3

I use ObjectDataSource as below.

<asp:ObjectDataSource ID="Item" runat="server" 
                SelectMethod="Grid_DataBind" TypeName="XXX.XXX.XXX" 
                DataObjectTypeName="Controller.Items" UpdateMethod="UpdateRow_Grid"
                InsertMethod="InsertRow_Grid">

When InsertMethod fire, everything work fine but ...

public IList<Items> InsertRow_Grid(Items item)
    {
        item.ID = System.Guid.NewGuid().ToString();          
        bool contains = GridSource.AsEnumerable()
                        .Any(row => item.JobID == row.JobID);
        if (!contains)
        {
            GridSource.Add(item);              
        }
        else
        {              
           lblMsg.Text= "This record has already exists.";               
        }
        return GridSource;
    }

It doesn't know my label object which is presented in my aspx file.

enter image description here

I had read this so that I can search proper solution.

But I still don't get how to do.

Every suggestion will be appreciated.

Community
  • 1
  • 1
Frank Myat Thu
  • 4,448
  • 9
  • 67
  • 113

2 Answers2

1

This is because asp:ObjectDataSource creates new instance of object you specified in "TypeName" property To use current page object instead of creating new, you need this code:

YourObjectDataSource.ObjectCreating += (s, a) => { a.ObjectInstance = this; };

Place it in Page_Load or Page_Init

gdbdable
  • 4,445
  • 3
  • 30
  • 46
-1

You can add this code to your page

...
<asp:Label id="lblMsg" runat="server"/>
<asp:ObjectDataSource ID="Item" runat="server" 
            SelectMethod="Grid_DataBind" TypeName="XXX.XXX.XXX" 
            DataObjectTypeName="Controller.Items" UpdateMethod="UpdateRow_Grid"
            InsertMethod="InsertRow_Grid">
.....
Aghilas Yakoub
  • 28,516
  • 5
  • 46
  • 51