级联下拉列表在保存点击事件时重置为零索引

时间:2016-09-09 06:41:11

标签: asp.net web datagridview

我已经在网格视图asp.net的rowdatabound事件中动态创建了我的所有下拉列表和级联下拉列表 我的问题是当我从级联下拉和保存中选择任何值时。 只有第一个值第一次保存 情景是在国家下降假设,
我已经选择了印度,所以如果我选择一些国家说古吉拉特邦,那么各州会填充它们然后如果我按下保存并返回值,保存不是古吉拉特,而是下拉中的第一个值 我必须在每个帖子上调用bind grid

在Rowdatabound事件中

     if (value.Equals("Dropdown"))
                {
                    int attributeid = Int32.Parse((e.Row.DataItem as DataRowView).Row["attributeid"].ToString());
                    string a = (e.Row.DataItem as DataRowView).Row["attributevalue"].ToString();
                    DropDownList dp = new DropDownList();
                    dp.ID = attributeid.ToString();
                    dp.CssClass = "gridtextbox";
                    dp.EnableViewState = true;
                    getDropdowns(dp, attributeid);

                    String attributevalue = (e.Row.DataItem as DataRowView).Row["attributevalue"].ToString();
                    int cascadingid = Int32.Parse((e.Row.DataItem as DataRowView).Row["cascadingid"].ToString());


                    if (cascadingid != 0  )
                    {

                        dp.SelectedIndexChanged += new EventHandler(Bind_gridchild);
                        dp.AutoPostBack = true;

                    }

                    e.Row.Cells[1].Controls.Add(dp);

我的getdropdown()方法绑定第一次下拉的数据  在selectedIndexchange事件

 if (inputtype.Equals("Dropdown"))
                {
                    DropDownList dp = new DropDownList();
                    dp = (DropDownList)Vendorform.Rows[Int32.Parse(cascading)].FindControl(cascading);
                    //dp.EnableViewState = true;
                   // dp.AppendDataBoundItems = true;
                    string dummy = dp.ID;

                    using (dbForcastingDataContext db = new dbForcastingDataContext())
                    {

                            dp.DataSource = db.usp_vm_etl_getdropdownvalues(Int32.Parse(cascading), Int32.Parse(selectedValue));
                            dp.DataTextField = "attributeSelectionValue";
                            dp.DataValueField = "attributeSelectionValue";
                            dp.DataBind();
                            // dp.Items.Insert(0,new ListItem("Select", "0"));

                    }

                }

1 个答案:

答案 0 :(得分:0)

首先,您需要使用Javascript将所选值存储在隐藏字段中,因为您必须在每个帖子上调用绑定网格 并且在回发后选择的值将是ddl中的第一个值。

<script >
function CallButtonClick() {
            var e = document.getElementById("<%=DropDownList1.ClientID %>");
            var x = e.options[e.selectedIndex].value;
            document.getElementById("HiddenField1").innerText = x;
           __doPostBack("<%=DropDownList1.UniqueID %>", "");
        }
 </script>

在页面中添加HiddenField控件

<asp:HiddenField ID="HiddenField1" runat="server" />

您的代码

using (dbForcastingDataContext db = new dbForcastingDataContext())
         {
                dp.DataSource = db.usp_vm_etl_getdropdownvalues(Int32.Parse(cascading), Int32.Parse(selectedValue));
                dp.DataTextField = "attributeSelectionValue";
                dp.DataValueField = "attributeSelectionValue";
                dp.DataBind();
                if (HiddenField1.Value != null)
                {
                  DropDownList1.SelectedValue = HiddenField1.Value;
                }
                HiddenField1.Value = string.Empty;

        }

的DropDownList。

 <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" onchange="return CallButtonClick();" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" ></asp:DropDownList>