今天在GridView中插入RadioButton控件显示的时候遇到的问题,就是从根据从数据库获取的数据判断用户对文件的权限是哪一种(只读、读写、拒绝)
根据对应的权限,选中相应的RadioButton控件
这是之前的代码:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
try
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
LinkButton lb = (LinkButton)e.Row.Cells[1].FindControl("filenameBtn");
RadioButton rb1 = (RadioButton)e.Row.Cells[3].FindControl("RadioButton1"); //只读
RadioButton rb2 = (RadioButton)e.Row.Cells[3].FindControl("RadioButton2"); //读写
RadioButton rb3 = (RadioButton)e.Row.Cells[3].FindControl("RadioButton3"); //拒绝
RadioButton rb4 = (RadioButton)e.Row.Cells[3].FindControl("RadioButton4"); //无
FileAction fa = new FileAction();
string shuxing = "";
if (gonghaotxt.Text != "") //如果选择了用户
{
DataTable dt = fa.Get_ceshi_User_File(gonghaotxt.Text.ToString().Trim());//查询选择的用户对应文件的权限
DataTable Dt = fa.Get_ceshi_File_Quanxian(lb.CommandArgument.ToString().Trim());//查询文件的属性组
if (dt.Rows.Count != 0)//如果用户对文件权限有分配
{
if (Dt.Rows.Count != 0)
{
for (int k = 0; k < Dt.Rows.Count; k++)
{
if (dt.Rows[0]["QxId"].ToString().Contains(Dt.Rows[k]["QxId"].ToString()))//判断是否包含该文件的权限组
{
shuxing = Dt.Rows[k]["QxName"].ToString().Trim();
switch (shuxing)
{
case "只读":
rb1.Checked = true;
break;
case "读写":
rb2.Checked = true;
break;
case "拒绝":
rb3.Checked = true;
break;
default:
break;
}
break;
}
else
{
rb4.Checked = true;
}
}
}
}
else
{
rb4.Checked = true;
}
}
else
{
rb4.Checked = true;
}
}
}
catch (Exception E)
{
Response.Write(E);
}
}
上面就出现了一个问题,就是如果用户对文件权限的显示是“只读”,RadioButton的选中就正确,但是,如果对应的权限不是“只读”,而是“读写”或者“拒绝”的话,RadioButton就会开小差选中“无”,调试了半天,感觉都没错,最后还是找大神才解决的,问题就在于,一开始 if (dt.Rows[0]["QxId"].ToString().Contains(Dt.Rows[k]["QxId"].ToString()))//判断是否包含该文件的权限组 不满足的话 rb4.checked=true 在RadioButton中,以第一次选择为准,也就是说,在for循环中如果一开始选中 rb4.checkd=true;即使后面因为条件变化原因改选成 rb2.checked=true; 那么实际上,选中的依然是 rb4.checked=true; 除非在改变 rb2.checked之前先 设置 rb4.checked=false
switch (shuxing)
{
case "只读":
rb4.Checked = false;
rb1.Checked = true;
break;
case "读写":
rb4.Checked = false;
rb2.Checked = true;
break;
case "拒绝":
rb4.Checked = false;
rb3.Checked = true;
break;
default:
break;
}
改成这样就正确了,原先以为后面选中的话,先前选中的就会被覆盖掉,以后面的为准,其实不然,还是自身学的不够透彻!