【问题标题】:access values of listview on code behind在后面的代码中访问 listview 的值
【发布时间】:2017-06-15 04:27:31
【问题描述】:

我正在创建一个列表视图并从数据库绑定数据。

<asp:ListView runat="server" ID="lstService" DataTextField="Name"
    DataValueField="Id" AutoPostBack="True">
    <LayoutTemplate>
        <table runat="server" id="table1">
            <tr runat="server" id="itemPlaceholder"></tr>
        </table>
    </LayoutTemplate>
    <ItemTemplate>
        <tr runat="server">
            <td runat="server">

                <asp:Label ID="NameLabel" runat="server"
                    Text='<%#Eval("Name") %>' Width="500px" Height="30px" />

                <asp:Button CssClass="btn btn-default" ID="srvButton" runat="server"
                    Text="Add" OnClick="srvButton_Click" />
                <div class="voffset3"></div>

            </td>
        </tr>
    </ItemTemplate>
</asp:ListView>

在后面的代码中,我在这个字段上绑定数据。我正在获取 ID、名称列。

现在它在按钮上显示带有文本“添加”的标签和按钮。但是当我点击 Add 时,我想传递与该列表视图项关联的“Id”的值,我该怎么做?

protected void srvButton_Click(object sender, EventArgs e)
{

}

【问题讨论】:

    标签: asp.net listview


    【解决方案1】:

    首先使用项目 ID 的值将 CommandArgument 添加到您的 Button:

    <asp:Button CssClass="btn btn-default" ID="srvButton" runat="server" Text="Add" OnClick="srvButton_Click" CommandArgument='<%#Eval("Id")' />
    

    现在您可以在 srvButton_Click 处理程序中访问它:

    protected void srvButton_Click(object sender, EventArgs e)
    {
        Button myButton = (Button)sender;
        int i = Convert.ToInt32(myButton.CommandArgument.ToString());
        //----
    }
    

    【讨论】:

    • 谢谢,有没有办法可以在后端绑定 Text="Add" 或 "Remove",我不想将 Add 默认分配为文本。
    • 当然。您需要向 ListView 添加一个 ItemDataBound 处理程序,并且在该处理程序中,您可以根据您的要求将 Text 属性分配给 Items。见这里:stackoverflow.com/questions/1588500/…
    【解决方案2】:

    您可以将OnClick 更改为OnCommand 并同时发送CommandArgument

    <asp:Button CssClass="btn btn-default" ID="srvButton" runat="server"
        Text="Add" OnCommand="srvButton_Command" CommandArgument=<%# Eval("ID") %> />
    

    然后在后面的代码中

    protected void srvButton_Command(object sender, CommandEventArgs e)
    {
        int id = Convert.ToInt32(e.CommandArgument);
    }
    

    或者您可以使用 ListView 的 OnItemCommand 事件和 DataKeyNames 属性,并使用没有绑定事件的按钮。

    <asp:ListView runat="server" ID="lstService" DataKeyNames="id"
        OnItemCommand="lstService_ItemCommand">
    
        <asp:Button CssClass="btn btn-default" ID="srvButton" runat="server" Text="Add" />
    

    然后在后面的代码中从 ListView 中获取 datakey。

    protected void lstService_ItemCommand(object sender, ListViewCommandEventArgs e)
    {
        int id = Convert.ToInt32(lstService.DataKeys[e.Item.DataItemIndex].Values[0]);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-31
      • 2011-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多