【问题标题】:Reset dropdown values重置下拉值
【发布时间】:2014-04-08 08:34:18
【问题描述】:

我的页面中有 3 个级联下拉菜单。默认情况下,我所有下拉列表的页面加载都有一个默认选项,如下所示

--Select--

因此,当用户尝试在下拉菜单中选择此 -- Select-- 选项时,它会抛出错误。

错误信息:

Validation of viewstate MAC failed

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

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();                                  
}

第三个下拉菜单:

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

【问题讨论】:

  • 我不明白你的问题。请澄清。
  • 请让我知道哪一部分?
  • 没有看到你的代码的其余部分是不容易看到发生了什么......你插入的项目的文本是“--Select--”但是值是什么?您是否使用该值来填充您的网格视图?目前该值将是“--Select--”。那是您用来填充 Gridview 的东西吗... if (ddlGroup.SelectedValue.ToString() == "--Select--" ?​​
  • @karz - 用代码更新了我的帖子。

标签: c# asp.net .net gridview


【解决方案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 
}                                  
    }

【讨论】:

    【解决方案2】:
    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 中的值是否有意义?

    如果您的查询结果为:

    从 Application where Date = '--Select--' and Group = '--Select--' 中选择 Distinct(code)

    它大概不会返回任何东西?

    顺便说一句 - 您的代码正在自找麻烦。为什么不将打开数据库连接放在 try catch finally 块中,以便确保始终关闭连接。

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

    【讨论】:

    • 但是当我选择这个 -- 选择 -- 在我的第二个下拉列表中我仍然看到 0 条记录。
    • 您能否发布当您在第二个下拉列表中选择项目时运行的代码以及您用于绑定网格视图的代码。
    猜你喜欢
    • 2019-05-25
    • 2019-04-25
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多