过滤DROPDOWNLIST从人口的SqlDataSource [英] Filtering Dropdownlist populated from sqldatasource
问题描述
我也有这是从sqldatasources填充2列类型的GridView
I have a gridview which has 2 column types which are populated from sqldatasources
TransportationMode(禁用DROPDOWNLIST),ContainerType(启用DROPDOWNLIST)
TransportationMode(Disabled Dropdownlist), ContainerType(Enabled Dropdownlist),
Vessel - 20DC
Vessel - 20RF
Vessel - 40DC
Vessel - 40HC
Vessel - 40RF
Air - Air pick up
Air - Courier Courier
Truck - Full Reefer Truck
Truck - Full Truck
Vessel - Partial Container
Vessel - Partial Reefer Container
Truck - Partial Reefer Truck
Truck - Partial Truck
Railway - Wagon pick up
问题是,当我在GridView的一排TransportationMode已choosen作为例如空气,那么如何才能ContainerType进行过滤,只有空气拿起和快递快递应在drowdownlist进行填充。
Question is when TransportationMode of a row in my gridview has been choosen as 'Air' for example, Then how can ContainerType be filtered and only Air Pick Up and Courier Courier should be populated in the drowdownlist.
推荐答案
基本上你需要做的是有3个数据源
Basically what you need to do is have 3 data sources
- 一个网格视图
- 一个用于主下拉列表
- 和最后一个孩子下拉列表
一旦你的下拉菜单,创造 EditItemTemplate中
字段,你设置:
Once you have that create EditItemTemplate
fields for the drop downs and you're set:
<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>
后面的 code:
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;
}
}
希望这有助于!
这篇关于过滤DROPDOWNLIST从人口的SqlDataSource的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!