谢谢你们的答案。看起来自定义 DataGrid 是要走的路。对于任何 ASP.NET 新手,这就是我正在做的
<asp:DataGrid ID="GridView1" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:BoundColumn DataField="RuleID" Visible="False" HeaderText="RuleID"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="Category">
<ItemTemplate>
<!-- in case we want to display an image -->
<asp:Literal ID="litImage" runat="server">
</asp:Literal>
<asp:DropDownList ID="categoryListDropdown" runat="server"></asp:DropDownList>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
这将创建一个数据网格。然后我们可以将它绑定到数据源(在我的例子中是 DataTable)并使用类似的东西
foreach (DataGridItem item in this.GridView1.Items)
{
DropDownList categoryListDropdown = ((DropDownList)item.FindControl("categoryListDropdown"));
categoryListDropdown.Items.AddRange(listItems.ToArray());
}
填充数据网格中的初始下拉列表。在这种情况下,您还可以访问 item.Cells[0].text 以获取 RuleID。
我自己的注意事项: ASP.NET 模型在代码隐藏文件中执行所有操作。在较高级别上,您始终可以遍历 GridView1.Items 以获取每一行,并通过 item.findControl("ControlID") 查询存储在每个项目中的值,例如在按下“更新”按钮之后。