我的页面中有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();
}
答案 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块中打开数据库连接,这样就可以确保始终关闭连接。
如何处理调用数据库引发的错误?