基本上你需要做的是拥有 3 个数据源
- 一个用于网格视图
- 一个用于主下拉列表
- 最后一个为孩子下拉列表
一旦你EditItemTemplate
为下拉菜单创建了字段,你就设置好了:
<asp:SqlDataSource
ID="transportAndContainerTypeDS"
runat="server"
ConnectionString="<%$ ConnectionStrings:transportConnection %>"
SelectCommand="SELECT T.TransportationId, T.TransportationMode, CT.ContainerTypeId, CT.ContainerType FROM Transportation AS T INNER JOIN ContainerType AS CT ON T.TransportationId = CT.TransportationId"></asp:SqlDataSource>
<asp:GridView ID="gvTransportation"
runat="server"
AutoGenerateEditButton="true"
AutoGenerateColumns="False"
DataSourceID="transportAndContainerTypeDS"
DataKeyNames="TransportationId,ContainerTypeId">
<Columns>
<asp:BoundField DataField="TransportationId" Visible="false" />
<asp:BoundField DataField="ContainerTypeId" Visible="false" />
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Eval("TransportationMode") %>' />
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="ddlTransportation" runat="server"
DataSourceID="transportationDS"
AutoPostBack="true"
DataValueField="TransportationId"
DataTextField="TransportationMode"
SelectedValue='<%# Eval("TransportationId") %>'>
</asp:DropDownList>
<asp:SqlDataSource ID="transportationDS" runat="server"
ConnectionString="<%$ ConnectionStrings:transportConnection %>"
SelectCommand="SELECT TransportationId,TransportationMode FROM Transportation"></asp:SqlDataSource>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="Label4" runat="server" Text='<%# Eval("ContainerType") %>' />
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="ddlContainerType"
runat="server"
DataSourceID="containerDS"
DataValueField="ContainerTypeId"
DataTextField="ContainerType"
OnDataBound="ddlContainerType_DataBound" />
<asp:SqlDataSource ID="containerDS"
runat="server"
ConnectionString="<%$ ConnectionStrings:transportConnection %>"
SelectCommand="SELECT ContainerTypeId,TransportationId,ContainerType FROM ContainerType WHERE TransportationId = @TransportationId"
SelectCommandType="Text">
<SelectParameters>
<asp:ControlParameter
ControlID="ddlTransportation"
Name="TransportationId"
PropertyName="SelectedValue"
Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>
</EditItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
后面的代码:
protected void ddlContainerType_DataBound(object sender, EventArgs e)
{
var ddlContainerType = (DropDownList)sender;
ddlContainerType.Items.Insert(0, new ListItem("Make a Selection", String.Empty));
ddlContainerType.SelectedIndex = 0;
GridViewRow gvr = (GridViewRow)ddlContainerType.NamingContainer;
if (gvr.DataItem != null)
{
string strModel = ((System.Data.DataRowView)gvr.DataItem)["ContainerType"].ToString();
ddlContainerType.ClearSelection();
var li = ddlContainerType.Items.FindByValue(strModel);
if (li != null)
li.Selected = true;
}
}
希望这可以帮助!