1

コードビハインドのGridviewItemTemplateからasp.NETHiddenFieldにアクセスできません。削除メソッドを実行できるように、これらの非表示フィールドに含まれる値を読み取れるようにする必要があります。コードは次のとおりです

<%@ 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>

CodeBehind

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

どんな助けでも大歓迎です。

4

2 に答える 2

0

HiddenFieldコントロールは、GridViewレンダリングの<td>1つであるの一部になります。<tr>GridViewコントロールのFindControlは、その直接の子のみを認識し、非表示のコントロールはその2レベル下にあるため、それらを検出しません。代わりに、から始めて、senderその兄弟の非表示コントロールを見つけてください。以下のように、イベントハンドラーの2つのHiddenControl行を置き換えます。

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

そして、その行のデータを削除するために探している値を取得する必要があります。

于 2012-08-14T02:43:34.567 に答える
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);
}
于 2012-08-14T02:55:06.180 に答える