【发布时间】:2020-02-21 18:04:50
【问题描述】:
我希望能够在我的网格视图中选择一行或多行,以便能够将多行数据存储在一个对象中,然后使用对象列表执行我需要的任何操作。
在 ASP 代码中,我有一个标准的 gridview 和一个带有 ItemTemplate 的 TemplateField,我已经放置了我的按钮。命令名称是 Switch(这在 C# 中是相关的)。下面是我的 templateField 代码(我试过 AutoPostBack="False" 在这种情况下不起作用)
<asp:TemplateField>
<ItemTemplate>
<asp:Button CssClass="buttonStuff" Text="Switch" runat="server" CommandName="Switch" CommandArgument="<%# Container.DataItemIndex %>" AutoPostBack="False" />
</ItemTemplate>
</asp:TemplateField>
现在,当在任意行上单击 Switch 按钮时,我们会获取正确的行索引并在 C# 中获取我们的值,代码如下:
protected void GridView2_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Switch")
{
//Determine the RowIndex of the Row whose Button was clicked.
int rowIndex = Convert.ToInt32(e.CommandArgument);
//Reference the GridView Row.
GridViewRow row = GridView2.Rows[rowIndex];
//Perform what needs to do done
}
}
现在,我已经获取了正确的值,并且可以为单击一个按钮执行我需要做的事情,但问题是,我不能只选择多行而是只选择一个,因为当我单击按钮一次。
我相信理想情况下,在这种情况下,我想禁用此自动回发并自己手动添加。
任何建议将不胜感激,谢谢
【问题讨论】:
-
将 DataKey 添加到您的 GridView,以便您可以轻松识别行的对象。为每一行添加一个复选框,然后将您的按钮放在 GridView 之外...单击按钮时,您循环遍历每一行,找到该行的 Checkbox 控件并查看它是否被选中....如果是,抓住DataKey,得到你需要的对象。
-
这听起来很有希望,你有一个粗略的例子吗?
-
感谢您的想法和帮助,我回答了自己的问题并链接了有关此类事情的便捷指南。感谢您的想法