重置下拉值

时间:2014-04-08 08:34:18

标签: c# asp.net .net gridview

我的页面中有3个级联下拉列表。默认情况下,对于我的所有下拉列表,我都有一个默认选项,如下面的

--Select--

因此,当用户尝试选择此选项时 - 在下拉列表中选择 - 选项会抛出并发生错误。

错误消息:

Validation of viewstate MAC failed

我的页面中有一个gridview,当我选择第一个下拉值时,gridview会填充数据。当我选择第二个下拉值时,前两个下拉值的组合将填入网格中。现在,当我在第二个下拉列表中选择--Select--选项时,gridview表示找到了0个记录而不是显示第一个下拉值。此外,当我选择选项--Select-- for first dropdown时,它必须返回页面加载中发生的网格数据的所有值。

ddlGroup.Items.Insert(0, "--Select--");

代码背后:

第一次下拉:

 protected void ddlDate_SelectedIndexChanged(object sender, EventArgs e)
{
        SqlConnection conn = new SqlConnection(strcon);
        conn.Open();
        string strQuery = "select distinct(Group) from Application where Date = '" + ddlDate.Text + "'";
        SqlCommand cmd = new SqlCommand(strQuery, conn);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        ddlGroup.DataSource = dt;
        ddlGroup.DataTextField = "Group";
        ddlGroup.DataBind();
        ddlGroup.Items.Insert(0, new ListItem("--Select--", "0"));
        conn.Close();
        ddlCode.Items.Clear();
        ddlCode.Items.Insert(0, new ListItem("--Select--", "0"));
        DataTable dtDate = DataRepository.GetDate(ddlDate.Text);
        gvDetails.DataSource = dtDate;
        gvDetails.DataBind();           
}

第二次掉落

 protected void ddlGroup_SelectedIndexChanged(object sender, EventArgs e)
{
        SqlConnection conn = new SqlConnection(strcon);
        conn.Open();
        string strQuery = "select distinct(Code) from Application where Date = '" + ddlDate.Text + "' and Group='" + ddlGroup.Text + "'";
        SqlCommand cmd = new SqlCommand(strQuery, conn);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        ddlCode.DataSource = dt;
        ddlCode.DataTextField = "Code";
        ddlCode.DataBind();
        ddlCode.Items.Insert(0, new ListItem("--Select--", "0"));
        conn.Close();
        DataTable dtGroup = DataRepository.GetGroup(ddlDate.Text, ddlGroup.Text);
        gvDetails.DataSource = dtGroup;
        gvDetails.DataBind();                                  
}

第3次下拉:

protected void ddlCode_SelectedIndexChanged(object sender, EventArgs e)
{
    DataTable dtCode = DataRepository.GetCode(ddlDate.Text, ddlGroup.Text, ddlCode.Text);
    gvDetails.DataSource = dtCode;
    gvDetails.DataBind();        
}

2 个答案:

答案 0 :(得分:1)

您需要在绑定gridview之前检查下拉列表值。

无论何时将所选值更改为--SELECT--它都会调用ddlGroup_SelectedIndexChanged函数。

尝试:

     protected void ddlGroup_SelectedIndexChanged(object sender, EventArgs e)
    {
if(ddlGroup.Text!="--Select--")
{
            SqlConnection conn = new SqlConnection(strcon);
            conn.Open();
            string strQuery = "select distinct(Code) from Application where Date = '" + ddlDate.Text + "' and Group='" + ddlGroup.Text + "'";
            SqlCommand cmd = new SqlCommand(strQuery, conn);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            da.Fill(dt);
            ddlCode.DataSource = dt;
            ddlCode.DataTextField = "Code";
            ddlCode.DataBind();
            ddlCode.Items.Insert(0, new ListItem("--Select--", "0"));
            conn.Close();
            DataTable dtGroup = DataRepository.GetGroup(ddlDate.Text, ddlGroup.Text);
            gvDetails.DataSource = dtGroup;
            gvDetails.DataBind();
}

else
{
// call ddlDate_SelectedIndexChanged 
}                                  
    }

答案 1 :(得分:0)

ddlGroup.Items.Insert(0, new ListItem("--Select--", "0"));

您的代码......

string strQuery = "select distinct(Code) from Application where Date = '" + ddlDate.Text + "' and Group='" + ddlGroup.Text + "'";

...你在哪里检查ddlDate.Text和ddlGroup.Text中的值是否有意义?

如果您的查询结果为:

从应用程序中选择Distinct(代码),其中Date =' - 选择 - '和组=' - 选择 - '

据推测,它不会返回任何东西吗?

顺便说一句 - 你的代码是在寻找麻烦。为什么不在try catch finally块中打开数据库连接,这样就可以确保始终关闭连接。

如何处理调用数据库引发的错误?