2009-05-26 17 views
0

Ich versuche derzeit eine benutzerdefinierte Gridview-Schnittstelle zu implementieren, um Daten von einem ObjectDataSource-Frontend zu ASP.net-Mitgliedschaft anzuzeigen. Der asp.net Code für das Gridview istBenutzerdefinierte Gridview - Bindung mit nicht-statischen Funktion

 <asp:GridView 
      id="grdUsers" 
      HeaderStyle-cssclass="grid_header" 
      RowStyle-cssclass="row" 
      AlternatingRowStyle-cssclass="alternating" 
      OnRowUpdating="grdUsers_RowUpdating" 
      OnRowDeleting="grdUsers_RowDeleting" 
      OnRowCancelingEdit="grdUsers_cancelEdit" 
      datasourceid="srcUsers" 
      autogeneratecolumns="false" 
      allowsorting="true" 
      AllowPaging="true" 
      EmptyDataText="No users..." 
      pagesize="9" 
      runat="server"> 
      <Columns> 
       <asp:CommandField 
        HeaderText="Ops" 
        ButtonType="Image" 
        ShowEditButton="true" 
        EditText="E" 
        UpdateText="U" 
        ShowCancelButton="true" 
        CancelText="X" 
        ShowDeleteButton="true" 
        DeleteText="D" /> 
       <asp:BoundField 
        ReadOnly="true" 
        DataField="UserName" 
        HeaderText="UserName" /> 
       <asp:BoundField 
        DataField="Email" 
        HeaderText="Contact Email" /> 
       <asp:TemplateField 
        HeaderText="Role"> 
        <ItemTemplate> 
        <asp:Label 
         ID="lblRole" 
         text="<%# namespace.Admin.getRoleOfUser() %>" 
         runat="server" /> 
        </ItemTemplate> 
        </asp:TemplateField> 
       <asp:CheckBoxField 
        DataField="IsApproved" 
        HeaderText="User is Approved" /> 
       <asp:TemplateField 
        HeaderText="UserLocked"> 
        <ItemTemplate> 
        <asp:CheckBox 
         id="grdUsers_lockCheckBox" 
         Checked='<%# Eval("IsLockedOut") %>' 
         Enabled="false" 
         runat="server" /> 
        </ItemTemplate> 
        <EditItemTemplate> 
        <asp:Button 
         id="grdUsers_unlockUser" 
         OnClick="grdUsers_unlockUser" 
         Text="Unlock" 
         runat="server" /> 
        <asp:HyperLink 
         id="grdUsers_lockInfo" 
         text="?" 
         onclick='popup("lock_info.html")' 
         runat="server" /> 
        </EditItemTemplate> 
       </asp:TemplateField> 
      </Columns> 
      </asp:GridView> 

Mein Code zur Zeit stirbt, weil die Funktion roleOfUser get() ist eine öffentliche Funktion. Vorzugsweise würde ich gerne eine Zeichenfolge des UserName (aus der zweiten Zelle der GridView gezogen) an diese Funktion übergeben, von der ich aber nicht sicher bin, und wie ich diese nicht statische Funktion aufrufen soll, da ich nicht weiß wie um es aus dem asp.net-Code zu instanziieren.

public string getRoleOfUser() 
    { 
     GridView users = (GridView)admin.FindControlRecursive(Page, "grdUsers"); 
     Int32 i = users.EditIndex; 

     GridViewRow userRow = users.Rows[i]; 

     return userRow.Cells[1].Text; 
    } 

    private Control FindControlRecursive(Control root, string id) 
    { 
     if (root.ID == id) 
     { 
      return root; 
     } 

     foreach (Control c in root.Controls) 
     { 
      Control t = FindControlRecursive(c, id); 
      if (t != null) 
      { 
       return t; 
      } 
     } 

     return null; 
    } 

Antwort

1

Es sollte einfach sein:

<% getRoleOfUser() %> 

seine Unter der Annahme einer Memberfunktion der Seite Ihre Gridview eingeschaltet ist.

+0

Das funktioniert tatsächlich. Ich scheine mich zu erinnern, dass ich das versucht habe und Namespace-Fehler bekommen habe, aber es funktioniert jetzt :) danke. – PhrkOnLsh

+0

Wir freuen uns, Ihnen behilflich zu sein. – jrista

Verwandte Themen