【问题标题】:Linkbutton in a Datalist in a GridViewGridView 中数据列表中的链接按钮
【发布时间】:2012-10-19 15:52:45
【问题描述】:

我有一个有趣的 ASP/VB.NET 问题。我有一个网格视图,其中每一行在模板列中都有自己的数据列表。我想向数据列表中的每个项目添加一个链接按钮,该按钮将根据数据列表中的数据触发事件。但我不知道该怎么做。它在一个项目中,因此它具有设计器文件,该文件确实列出了gridview,但没有列出gridview 内的datalist。当我尝试添加它时,数据列表的列表会在我稍后编译时被删除。

我现在的问题是,我是否可以在 gridview 的数据列表中获取链接按钮来做某事?

<asp:GridView ID="gvCmteNom" runat="server" AutoGenerateColumns="False" showheader="true" HeaderStyle-BackColor="Silver" Width="1600px">
<Columns>
<asp:TemplateField HeaderText="CURRENT SERVICE">
        <ItemTemplate>
            <asp:TextBox ID="txtID" runat="server" Text='<%# Bind("NOMINEE_ID") %>' Visible="False" Width="25px" />
            <asp:DataList ID="dlCurrentCmtes" runat="server" DataSourceID="dsCurrentCmte" RepeatLayout="Flow" DataKeyField="ID" RepeatDirection="Horizontal">
                <ItemTemplate>
                    <asp:HiddenField runat="server" ID="hdnUserID" Value='<%# Eval("ID") %>' />
                    <asp:Label ID="lblDescription" runat="server" Text='<%# Eval("Description") %>' />
                    <asp:LinkButton runat="server" ID="lbIncrementYear" CommandName="IncrementYear" CommandArgument='<%# Eval("ProductID") %>' Text="Add Year" />
                </ItemTemplate>
                <SeparatorTemplate><br /><br /></SeparatorTemplate>
            </asp:DataList>
            <asp:SqlDataSource ID="dsCurrentCmte" runat="server" 
                ConnectionString="" 
                ProviderName="System.Data.SqlClient" SelectCommand="spCmteList" SelectCommandType="StoredProcedure">
                <SelectParameters>
                    <asp:ControlParameter ControlID="txtID" Name="ID" PropertyName="Text" Type="String" DefaultValue="" />
                </SelectParameters>
            </asp:SqlDataSource>
        </ItemTemplate>
    </asp:TemplateField>
</Columns>

【问题讨论】:

    标签: vb.net gridview linkbutton nested-datalist


    【解决方案1】:

    两种选择:

    选项 1 为 DataList 指定 ItemCommand 事件处理程序并使用它来响应事件:

    &lt;asp:DataList OnItemCommand="Item_Command" /&gt;

    然后在后面的代码中指定那个函数:

    Sub Item_Command(sender As Object, e As DataListCommandEventArgs) 
         If e.CommandName = "IncrementYear" Then
             ...
         End If
    End Sub
    

    选项 2 指定链接按钮的 OnClick 事件处理程序

    &lt;asp:LinkButton OnClick="LinkButton_Click" runat="server"/&gt;

    然后

    Sub LinkButton_Click(sender As Object, e As EventArgs) 
          ...
    End Sub
    

    【讨论】:

    • 选项 2 给了我最好的解决方案。但是代码的第一个链接应该是Dim lbIncrementYear As LinkButton = CType(sender, LinkButton) 所以你知道链接按钮的变量是什么,包括命令名和命令参数。我必须将两条数据传递给子程序,所以我必须使用这两个命令。这不是最佳做法,但有时你必须做你必须做的事情。
    • 酷,很高兴我能帮上忙。请记住,选项 1 还允许您收集有关数据列表的信息。 DataListCommandEventArgs 包含 datalistitem 以及命令参数(名称和参数),因此传递额外数据可能会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多