2012-10-09 4 views
3

J'utilise ObjectDataSource comme indiqué ci-dessous.asp.net comment ObjectDataSource peut-il accéder aux objets System.Web.UI.Page

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

Quand le feu InsertMethod, tout fonctionne bien, mais ...

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; 
    } 

Il ne connaît pas mon objet label qui est présenté dans mon fichier ASPX.

enter image description here

J'avais lu this pour que je puisse rechercher une solution appropriée.

Mais je ne comprends toujours pas comment faire.

Toutes les suggestions seront appréciées.

+0

Où vous utilisez le contrôle lblMsg, grille à l'intérieur? S'il vous plaît écrire quelques contenus aspx produisant le même problème. – mrd

+0

Veuillez partager l'aspx pour créer le contrôle "lblMsg". –

Répondre

-1

Vous pouvez ajouter ce code à votre 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"> 
..... 
1

En effet, asp: ObjectDataSource crée une nouvelle instance d'objet spécifié dans « TypeName » propriété Pour utiliser l'objet page en cours au lieu de créer de nouveaux, vous avez besoin ce code:

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

Placez-le dans Page_Load ou Page_Init