在DropDown Selected_Indexchanged事件中,SelectedValue始终在First Value中重置

时间:2013-10-28 12:52:29

标签: asp.net sql c#-4.0 gridview drop-down-menu

我有DropdownList,我在Page_Load

时填充
protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                DataTable table = new DataTable();


                string connectionString = GetConnectionString();
                string sqlQuery = "select distinct sname from contacts where sname is not null";


                using (OracleConnection conn = new OracleConnection(connectionString))
                {

                    try
                    {
                        conn.Open();

                        using (OracleCommand cmd = new OracleCommand(sqlQuery, conn))
                        {

                            using (OracleDataAdapter ODA = new OracleDataAdapter(cmd))
                            {

                                ODA.Fill(table);

                            }

                        }
                    }
                    catch (Exception ex)
                    {
                        Response.Write("Not Connected" + ex.ToString());
                    }

                }

                //DropDownList1.DataSource = table;
                //DropDownList1.DataValueField = "";

                DropDownList2.DataSource = table;
                DropDownList2.DataValueField = "sname";
                DropDownList2.DataTextField = "sname";



                DropDownList2.DataBind();
            }
}

现在我尝试在DropDownList的项目更改

时填充GridView
protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
        {
            DataTable table = new DataTable();


            string connectionString = GetConnectionString();
            string val = DropDownList2.SelectedValue;

            string sqlQuery = "SELECT distinct DUTY_DATE FROM DUTY_ROTA,DUTY_TYPES,CONTACTS WHERE DUTY_DATE between SYSDATE and SYSDATE+30  AND DUTY_ROTA.DUTY_TYPE = DUTY_TYPES.DUTY_TYPE AND SNAME IS NOT NULL and contacts.sname = '" + val + "' ORDER BY DUTY_DATE";
            using (OracleConnection conn = new OracleConnection(connectionString))
            {

                try
                {
                    conn.Open();

                    using (OracleCommand cmd = new OracleCommand(sqlQuery, conn))
                    {

                        using (OracleDataAdapter ODA = new OracleDataAdapter(cmd))
                        {

                            ODA.Fill(table);

                        }

                    }
                }
                catch (Exception ex)
                {
                    Response.Write("Not Connected" + ex.ToString());
                }

            }

            GridView1.DataSource = table;
            GridView1.DataBind();

        }

我启用了AutoPostBack。现在当我将DropDownList项更改为另一个项时,Page正在加载但始终保留第一个值。我试着调试,我发现了

string val = DropDownList2.SelectedValue;

val变量始终是Query返回的第一个值。有人可以告诉我怎么能摆脱这个。我想在下拉列表中选择任何项目时填充GridView。

2 个答案:

答案 0 :(得分:0)

您好我认为当您选择其他项目时,下拉列表会再次收费。在页面加载中放置一个断点并查看您的下拉列表是否再次收费我没有看到其他原因。祝你好运

答案 1 :(得分:0)

您的下拉列表应如下所示:

<asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="True" 
OnSelectedIndexChanged="DropDownList2_SelectedIndexChanged">
        </asp:DropDownList>

确保AutoPostBack设置为TRUE。

您可以尝试的另一件事是在索引大于-1时选择项目。

      if(DropDownList2.SelectedIndex != -1) 
    {
        string val = DropDownList2.SelectedItem.Value;
//    enter code here
     }