过滤DROPDOWNLIST从人口的SqlDataSource [英] Filtering Dropdownlist populated from sqldatasource

查看:119
本文介绍了过滤DROPDOWNLIST从人口的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


  1. 一个网格视图

  2. 一个用于主下拉列表

  3. 和最后一个孩子下拉列表

一旦你的下拉菜单,创造 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆