0

この問題に遭遇するのは初めてなので、誰か助けてください。これが私の問題です。2つのドロップダウンリストがあります。2番目のドロップダウンリストは最初のドロップダウンリストで選択したアイテムから入力され、2番目のドロップダウンリストでは選択したアイテムに応じてグリッドビューに入力されます。ここで問題となるのは、2番目のddlからアイテムを選択するたびに、それがポストバックし、選択したアイテムの代わりに最初のアイテムが選択されることです。

ここに私のコードがあります:(aspx)

                   <asp:TableRow> <%--Branch--%>
                        <asp:TableCell HorizontalAlign="Left">
                            <asp:Label ID="lblBranch" runat="server" Font-Bold="true">Branch:</asp:Label>
                        </asp:TableCell>
                        <asp:TableCell HorizontalAlign="Left">
                            <asp:DropDownList ID="ddlBranch" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlBranch_SelectedIndexChanged" AppendDataBoundItems="true" />
                        </asp:TableCell>
                    </asp:TableRow>

                    <asp:TableRow> <%--Recepient--%>
                        <asp:TableCell HorizontalAlign="Left">
                            <asp:Label ID="lblRecepient" runat="server" Font-Bold="true">Recepient:</asp:Label>
                        </asp:TableCell>
                        <asp:TableCell HorizontalAlign="left">
                            <asp:DropDownList ID="ddlRecepientDepartment" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlRecepientDepartment_SelectedIndexChanged"  AppendDataBoundItems="true" EnableViewState="true"></asp:DropDownList>
                        </asp:TableCell>
                    </asp:TableRow>

                    <asp:TableRow> <%--Gridview Recepient--%>
                        <asp:TableCell></asp:TableCell>
                        <asp:TableCell>
                            <asp:GridView ID="gvRecepientPosition" runat="server" AllowPaging="True" AutoGenerateColumns="False"
                                EmptyDataText="No Record found!" ShowFooter="false" ShowHeader="true" Width="99%" HorizontalAlign="Center" PageSize="5" OnPageIndexChanging="gvRecepientPosition_PageIndexChanging">
                                <Columns>
                                <%--<asp:TemplateField HeaderText="ID" Visible="false">
                                    <ItemTemplate>
                                    <asp:Label ID="lblID" runat="server" Text='<%# Bind("RECID") %>'></asp:Label>
                                    </ItemTemplate>
                                </asp:TemplateField>--%>
                                <asp:TemplateField HeaderText="Recepient" Visible="true">
                                     <ItemTemplate>
                                        <asp:CheckBox ID="cbRecepientPosition"  runat="server"/>
                                     </ItemTemplate>
                                </asp:TemplateField>
                                 <asp:BoundField DataField="Position" HeaderText="Position" ItemStyle-HorizontalAlign="Left" />
                                </Columns>
                            </asp:GridView>
                        </asp:TableCell>
                    </asp:TableRow>

コードビハインド:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            ddlBranch.Items.Clear();
            GetBranch();

        }


    }

    private void GetBranch()
    {
             var objManager = new EmailNotificationInfoManager();
           // ddlBranch.Items.Clear();
            ddlBranch.DataSource = objManager.EmailNotificationInfoBranch();
            ddlBranch.DataTextField = "Branch";
            ddlBranch.DataValueField = "RECID";
            ddlBranch.DataBind();

            ddlBranch.Items.Insert(0,"<--Select-->");


    }

    protected void ddlBranch_SelectedIndexChanged(object sender, EventArgs e)
    {
        var objManager = new EmailNotificationInfoManager();
        ddlRecepientDepartment.Items.Clear();
        ddlRecepientDepartment.DataSource = objManager.EmailNotificationInfoDepartment(Convert.ToInt64(ddlBranch.SelectedValue));
        ddlRecepientDepartment.DataTextField = "Department";
        ddlRecepientDepartment.DataValueField = "branchID";
        ddlRecepientDepartment.DataBind();

        ddlRecepientDepartment.Items.Insert(0,"<--Select-->");

    }

    protected void ddlRecepientDepartment_SelectedIndexChanged(object sender, EventArgs e)
    {
        var objManager = new EmailNotificationInfoManager();

        gvRecepientPosition.DataSource = objManager.GetPositionByDepartment(ddlRecepientDepartment.SelectedItem.Text);
        gvRecepientPosition.DataBind();

        Session["PositionDepartment"] = objManager.GetPositionByDepartment(ddlRecepientDepartment.SelectedItem.Text);

        ddlRecepientDepartment.Attributes.Add("onChange", "this.currentvalue = this.value;");
        //Page.Response.Redirect(HttpContext.Current.Request.Url.ToString(), true);
    }

これで私を助けてください。ありがとう!

4

2 に答える 2

2

最初のドロップダウンが最初のアイテムを選択することを意味する場合は、のEnableViewState="true"プロパティを確認してくださいddlBranch

そして、なぜこれ?

ddlRecepientDepartment.Attributes.Add("onChange", "this.currentvalue = this.value;");
于 2012-05-15T09:25:23.507 に答える
1

あなたがしなければならないことはイベントハンドラーにあります

 protected void ddlRecepientDepartment_SelectedIndexChanged
 (object sender, EventArgs e)
 {}

selectedIndexプロパティをindex現在選択されているアイテムのに設定します。

于 2012-05-15T08:18:24.600 に答える