2012-08-14 75 views
1

我無法從代碼隱藏的Gridview ItemTemplate中訪問asp.NET HiddenField。我需要能夠讀取這些隱藏域包含的值,以便我可以執行刪除方法。 的代碼如下ASP.NET Gridview ItemTemplate在CodeBehind中的訪問

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="MemberList.ascx.cs" Inherits="UserControls_MemberList" %> 
<asp:RadioButtonList ID="ReportSelect" runat="server" RepeatDirection="Horizontal"> 
<asp:ListItem Value="1">All</asp:ListItem> 
<asp:ListItem Value="2">Current Members</asp:ListItem> 
<asp:ListItem Value="3">Perspective Members</asp:ListItem> 
</asp:RadioButtonList> 
<asp:Button ID="ReportSelectButton" runat="server" OnClick="ReportSelectButton_Click" 
Text="Select Report Type" /> 
<asp:Button ID="LinkToHomePage" runat="server" Text="Back to Homepage" OnClick="LinkToHomePage_Click"> 
</asp:Button> 
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" Height="308px" 
Width="1282px" onselectedindexchanged="GridView1_SelectedIndexChanged"> 
<Columns> 
    <asp:BoundField HeaderText="First Name" AccessibleHeaderText="FirstName" DataField="FirstName"> 
    </asp:BoundField> 
    <asp:BoundField HeaderText="Last Name" AccessibleHeaderText="LastName" DataField="LastName"> 
    </asp:BoundField> 
    <asp:BoundField HeaderText="Street Address" AccessibleHeaderText="StreetAddress" 
     DataField="StreetAddress"></asp:BoundField> 
    <asp:BoundField HeaderText="City" AccessibleHeaderText="City" DataField="City"></asp:BoundField> 
    <asp:BoundField HeaderText="State" AccessibleHeaderText="State" DataField="State"> 
    </asp:BoundField> 
    <asp:BoundField HeaderText="Zip" AccessibleHeaderText="Zip" DataField="Zip"></asp:BoundField> 
    <asp:BoundField HeaderText="Birthday" AccessibleHeaderText="Birthday" DataField="Birthday" /> 
    <asp:BoundField HeaderText="Email" AccessibleHeaderText="Email" DataField="Email"> 
    </asp:BoundField> 
    <asp:BoundField HeaderText="PrimaryPhone" AccessibleHeaderText="PrimaryPhone" DataField="PrimaryPhone" /> 
    <asp:BoundField HeaderText="AlternatePhone" AccessibleHeaderText="AlternatePhone" 
     DataField="AlternatePhone" /> 
    <asp:BoundField HeaderText="Pending" AccessibleHeaderText="Pending" DataField="Pending" /> 
    <asp:BoundField HeaderText="IsMember" AccessibleHeaderText="IsMember" DataField="IsMember" /> 
    <asp:BoundField HeaderText="Username" AccessibleHeaderText="Username" DataField="Username"> 
    </asp:BoundField> 
    <asp:BoundField HeaderText="Description" AccessibleHeaderText="Descripton" DataField="Description" /> 
    <asp:TemplateField HeaderText="Edit" AccessibleHeaderText="Edit"> 
     <ItemTemplate> 
      <asp:HyperLink ID="EditUsername" runat="server" NavigateUrl='<%# Link.ToMemberAdmin(Eval("Username").ToString())%>' 
       Text="Edit" /> 
      <asp:Button ID="DeleteButton" runat="server" Text="Delete Entry" OnClick="DeleteButton_Click"/> 
      <asp:HiddenField ID="HiddenUsername" Value='<%#Bind("Username") %>' runat="server" /> 
      <asp:HiddenField ID="HiddenEmail" Value='<%#Bind("Email") %>' runat="server" /> 
     </ItemTemplate> 
    </asp:TemplateField> 
</Columns> 
</asp:GridView> 

代碼隱藏

protected void DeleteButton_Click(object sender, EventArgs e) 
{ 
    HiddenField Username = GridView1.FindControl("HidderUsername") as HiddenField; 
    HiddenField Email = GridView1.FindControl("HiddenEmail") as HiddenField; 
    string username = Username.Value; 
    string email = Email.Value; 
    AdminAccess.DeleteMemberApplication(username, email); 
} 

任何幫助,將不勝感激。

回答

0

HiddenField控件將成爲<td>的一部分,這是GridView呈現的<tr>之一。 GridView控件的FindControl只知道它是直接的孩子,而隱藏的控件是低於它的兩個級別,它不會找到它們。相反,從sender開始,並嘗試找到其兄弟隱藏控件。在下面的事件處理程序的兩顆HiddenControl線:

HiddenField Username = (HiddenField) ((Button)sender).Parent.Controls.FindControl("HiddenUsername"); 
HiddenField Email = (HiddenField) ((Button)sender).Parent.Controls.FindControl("HiddenEmail"); 

它應該得到你正在尋找的值,以該行中刪除數據。

0

只要用按鈕CommandArgument

<asp:TemplateField HeaderText="Edit" AccessibleHeaderText="Edit"> 
    <ItemTemplate> 
     <asp:HyperLink ID="EditUsername" runat="server" NavigateUrl='<%# Link.ToMemberAdmin(Eval("Username").ToString())%>' 
      Text="Edit" /> 
     <asp:Button ID="DeleteButton" runat="server" Text="Delete Entry" OnClick="DeleteButton_Click" 
      CommandArgument='<%#Eval("Username")+"^"+Eval("Email") %>'/> 
    </ItemTemplate> 
</asp:TemplateField> 

protected void DeleteButton_Click(object sender, EventArgs e) 
{ 
    var btn = sender as Button; 
    var args = btn.CommandArgument.Split('^'); 
    string username = args[0]; 
    string email = args[1]; 
    AdminAccess.DeleteMemberApplication(username, email); 
}