因此,在这个 GridView 中,有一个状态列,我希望在单击编辑按钮时显示一个包含“通过”、“待处理”、“失败”的下拉列表。这些值已经在表中,因此我需要以某种方式从该表绑定(bind)到每一行的每个 ddl。
这是 GridView 中的列。正如您所看到的,我只想在不处于编辑模式时显示一个标签,并在按下编辑按钮时显示一个 ddl
<asp:TemplateField HeaderText="During Production Status" SortExpression="DuringProductionStatus">
<EditItemTemplate>
<asp:DropDownList ID="ddlStatus" runat="server" datavaluefield="Name"
datatextfield="Name" DataSource="*What goes here?*"> />
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblStatus" runat="server"
Text='I don't understand how to get this from the ddl' />
</ItemTemplate>
</asp:TemplateField>
为了清楚起见,我的表名为 Status,数据库名为 DirectImport
最佳答案
这里需要执行几个步骤 - 这些步骤都不是特别困难,但可能有点繁琐(恕我直言)。好消息是,一旦您成功完成一次,再做一次就会变得更容易!
我假设你有一个<asp:*DataSource>
页面上的控件 - 我更喜欢 ObjectDataSource,但我认为这并不重要,我认为 SqlDataSource 效果同样好。我从未尝试过用 GridView.DataSource = MyDataSet
这样做在代码隐藏中,所以我不知道这是否有效,但我的假设是它不会,因为你不会得到你想要的正确的双向绑定(bind)。该数据源为您的网格提供主要数据。这里的关键点是您的数据库查询必须返回状态文本字段和状态 ID。
所以你的 GridView 现在看起来像:
<asp:objectdatasource runat="server" id="MainDataSource" ... />
<asp:gridview runat="server" id="MyGridView" DataSourceID="MainDataSource">
<Columns>
<asp:TemplateField HeaderText="During Production Status" SortExpression="DuringProductionStatus">
<ItemTemplate>
<asp:Label ID="lblStatus" runat="server"
Text="<%# Bind('Status') %>" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:gridview>
Text="<%# Bind('Status') %>"
是将状态文本放入网格时缺少的部分。
现在将第二个数据源添加到标记中,该数据源从状态表中读取一组值。
<asp:objectdatasource runat="server" id="StatusObjectDataSource" ... />
并将 EditItemTemplate 添加到绑定(bind)到 Status DataSource 的 GridView 中。
<EditItemTemplate>
<asp:DropDownList ID="ddlStatus" runat="server" datavaluefield="StatusID"
datatextfield="Status" DataSourceID="StatusObjectDataSource"
SelectedValue="<%# Bind('StatusId') %>" />
</EditItemTemplate>
SelectedValue="<%# Bind('StatusId') %>"
是连接两个数据集的东西,这样当您将一行翻转到编辑模式时,下拉列表就已经选择了正确的项目,然后当您保存它时,您就可以将状态 ID 放入数据库中。
你就完成了。
关于asp.net - 如何使用 VB 将数据库表中的下拉列表数据绑定(bind)到 gridview 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1848631/