0

sqldatasources から入力された2つの列タイプを持つグリッドビューがあります

TransportationMode(無効なドロップダウンリスト)、ContainerType(有効なドロップダウンリスト)、

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

問題は、グリッドビューの行の TransportationMode が「Air」として選択された場合です。たとえば、ContainerType をフィルタリングして、Air Pick Up と Courier Courier のみを drowdownlist に入力する方法を教えてください。

4

1 に答える 1

1

基本的にあなたがする必要があるのは3つのデータソースを持つことです

  1. グリッド ビュー用の 1 つ
  2. メインのドロップダウン リスト用の 1 つ
  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;
    }
}

お役に立てれば!

于 2012-11-10T16:04:58.753 に答える