这里需要执行几个步骤 - 这些步骤都不是特别困难,但可能有点困难fiddly(恕我直言)。好消息是,一旦您成功完成一次,再做一次就会变得更容易!
我假设你有一个<asp:*DataSource>
页面上的控件 - 我更喜欢 ObjectDataSource,但我认为这并不重要,我认为 SqlDataSource 效果同样好。我从来没有尝试过这样做GridView.DataSource = MyDataSet
在代码隐藏中,所以我不知道这是否有效,但我的假设是它不会,因为你不会得到你想要的正确的双向绑定。该数据源为您的网格提供主要数据。这里的关键点是您的数据库查询必须返回状态文本字段和状态 ID。
所以你的网格视图现在看起来像这样:
<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>
The Text="<%# Bind('Status') %>"
是将状态文本放入网格时缺少的部分。
现在,将第二个数据源添加到标记中,该数据源从状态表中读取一组值。
<asp:objectdatasource runat="server" id="StatusObjectDataSource" ... />
并将 EditItemTemplate 添加到绑定到 Status DataSource 的 GridView 中。
<EditItemTemplate>
<asp:DropDownList ID="ddlStatus" runat="server" datavaluefield="StatusID"
datatextfield="Status" DataSourceID="StatusObjectDataSource"
SelectedValue="<%# Bind('StatusId') %>" />
</EditItemTemplate>
The SelectedValue="<%# Bind('StatusId') %>"
是连接两个数据集的东西,这样当您将一行翻转到编辑模式时,下拉列表就已经选择了正确的项目,然后当您保存它时,您就可以将状态 ID 放入数据库中。
你就完成了。