我的页面中有 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();
}
最佳答案
绑定(bind)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
}
}
关于c# - 重置下拉值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22931710/