0

次の Gridview があり、最後の列に ImageButton があります。ボタンがクリックされた行から姓と名を返そうとしています。ここや他のサイトを見て数時間を費やして動作させようとしましたが、成功しませんでした.

誰かが私のコードを見て、私が何か間違ったことをしていないかどうかを確認していただければ幸いです。

ありがとう

ASPコード

<asp:GridView runat="server" ID="gvSecondaryContacts" AutoGenerateColumns="False" DataKeyNames="ContactID" ShowHeaderWhenEmpty="false" GridLines="None" OnRowCommand="gvSecondaryContacts_OnRowCommand"  >
    <Columns>
        <asp:BoundField DataField="ContactID" HeaderText="ContactID" InsertVisible="False" ReadOnly="True" SortExpression="ContactID" Visible="false"/>

        <asp:TemplateField HeaderText="First Name">
            <ItemTemplate>
                <asp:Label ID="Label2" runat="server" Text='<%# Eval("FirstName") %>'></asp:Label>
            </ItemTemplate>
            <EditItemTemplate>
                <asp:TextBox runat="server" ID="txtSecFirstName" Text='<%# Eval("FirstName") %>'></asp:TextBox>
            </EditItemTemplate>
        </asp:TemplateField>

        <asp:TemplateField HeaderText="Last Name">
            <ItemTemplate>
                <asp:Label ID="Label1" runat="server" Text='<%# Eval("LastName") %>'></asp:Label>
            </ItemTemplate>
            <EditItemTemplate>
                <asp:TextBox runat="server" ID="txtSecLastName" Text='<%# Eval("LastName") %>'></asp:TextBox>
            </EditItemTemplate>
        </asp:TemplateField>

        <asp:TemplateField HeaderText="Email">
            <ItemTemplate>
                <asp:Label ID="Label4" runat="server" Text='<%# Eval("Email") %>'></asp:Label>
            </ItemTemplate>
            <EditItemTemplate>
                <asp:TextBox runat="server" ID="txtSecEmail" Text='<%# Eval("Email") %>'></asp:TextBox>
            </EditItemTemplate>
        </asp:TemplateField>

        <asp:TemplateField HeaderText="Position">
            <ItemTemplate>
                <asp:Label ID="Label3" runat="server" Text='<%# Eval("ClubPosition") %>'></asp:Label>
            </ItemTemplate>
            <EditItemTemplate>
                <asp:TextBox runat="server" ID="txtSecClubPosition" Text='<%# Eval("ClubPosition") %>'></asp:TextBox>
            </EditItemTemplate>
        </asp:TemplateField>

        <asp:TemplateField>
            <ItemTemplate>                   
                <asp:ImageButton runat="server" ID="ibtnDelete" CommandName="Delete" AlternateText="Delete Contact" CommandArgument="<%# CType(Container,GridViewRow).RowIndex %>"/>
            </ItemTemplate>
        </asp:TemplateField>


    </Columns>

VB コード

Public Sub gvSecondaryContacts_OnRowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs)
    If e.CommandName = "Delete" Then
        Dim index As Integer = Convert.ToInt32(e.CommandArgument)
        Dim row = gvSecondaryContacts.Rows(index)
        Dim ContactID As Integer = Convert.ToInt32(gvSecondaryContacts.DataKeys(index).Value)
        Dim sFirstName As String = gvSecondaryContacts.Rows(index).Cells(1).Text
        Dim sLastName As String = gvSecondaryContacts.Rows(index).Cells(2).Text
        MsgBox("Your name is " & sFirstName & " " & sLastName)
    End If

End Sub

ImageButton に対して次のことも試しましたが、返されたのは型であり、式エラーとして使用できません

        <asp:TemplateField>
            <ItemTemplate>                   
                <asp:ImageButton runat="server" ID="ibtnDelete" CommandName="Delete" AlternateText="Delete Contact" CommandArgument="<%# CType(Container, GridViewRow).RowIndex %>"/>
            </ItemTemplate>
        </asp:TemplateField>
4

3 に答える 3

0

代わりにクリックイベントを処理できます。クリックイベントハンドラーでImageButon's NamingContainerをキャストできます。GridViewRow次に、使用するだけですFindControl

Protected Sub Delete(sender As Object, e As EventArgs)
    Dim ctrl = DirectCast(sender, Control)
    Dim row = DirectCast(ctrl.NamingContainer, GridViewRow)
    ' you should rename this to LblFirstName
    Dim Label2 = DirectCast(row.FindControl("Label2"), Label)
    ' you should rename this to LblLastName
    Dim Label1 = DirectCast(row.FindControl("Label1"), Label)
    'MessageBoxes in ASP.NET don't make much sense
    MsgBox("Your name is " & Label2.Text & " " & Label1.Text)
End Sub
于 2013-01-24T14:15:52.650 に答える
0

これを試して

    Dim sFirstName As String = ((Label)gvSecondaryContacts.Rows(index).Cells(1).FindControl("Label2")).Text
    Dim sLastName As String =((Label)gvSecondaryContacts.Rows(index).Cells(2).FindControl("Label1")).Text
于 2013-01-24T13:54:03.520 に答える
0

問題はセッティングだと思うCommandArgument of ImageButton

CommandArgument="<%# CType(Container, GridViewRow).RowIndex %>"

このMSDN Exampleに従ってそれを行う必要はありません。また、(サーバー側からデータバインディングが行われた場合) ページがポストバックされていない場合にのみ、グリッドビューをバインドする必要があります。

If Not Page.IsPostBack Then
   'Bind your gridview here
End if
于 2013-01-24T14:05:38.527 に答える