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

试试这个

    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进行操作。此外,您(如果从服务器端完成数据绑定)应仅在页面未回发时绑定您的 gridview;

If Not Page.IsPostBack Then
   'Bind your gridview here
End if
于 2013-01-24T14:05:38.527 回答
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 回答