GridView暂时不知道是否有多选功能,老师又让做出来只能按自己的方法实现
数据的绑定不再写直接写过程和思路,在GridView中添加模板在模板里加入CheckBox,但在后台不能访问建好的CheckBox,问题就出在这里。
遍历CheckBox的属性和事件,发现了CheckBox有个CheckedChanged于是后台借助这个事件来得到具体是哪个CheckBox激发的时间。
想办法确立选中的Checkbox与选中的数据对应,CheckBox的属性可以喝数据库的信息绑定,于是我将每条数据的id与checkbox的CssClass属性绑定在一起
于是可以通过2得到选中数据的id,并且赋值给Session存储用户的选择。
当用户最后点击确定删除后,再从Session中读取用户最后选择的数据,用户在选择过程中会有选中然后又取消的可能,通过程序保证用户最终选择的数据的id值都存储在Seesion【“xyuan”】中
//获取用户最终的选择
protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
{
CheckBox x = (CheckBox)sender;//1这里用来接收具体是哪CheckBox激发的事件
string x1 = Convert.ToString(Session["xyuan"]);
string h1 = "a";
if (x1 == "")//x1等于空说明用户是第一次点击,所以直接复制,第二次可能是取消选择。
{
Session["xyuan"] = Session["xyuan"] + x.CssClass + ",";//2得到cssclass的值,值与id相等
}
else
{
string[] n = Session["xyuan"].ToString().Split(',');//3通过特殊符号将保存在session中的字符串变为单个字符
Session["x"] = "";
foreach (string h in n)//4通过该循环得到最后选中的是哪个,即用户可能选择后又放弃选择,
{
if (h == x.CssClass)//如果session中含有被选中的行则为h1赋值,
{
h1 = "l";
}
else
{//session中如果与不被选中的行不同则赋值给x若果有则不赋值,h1的值改变ze将x复制个xyuan,若不变则相反
//session["x"]中保存的永远是被选中
Session["x"] = Session["x"] + h+",";
}
}
if (h1 == "a")//如果h1的值不变书名Session【“xyuan”】中不含有被选中的数据,然后将数据保存进去
{
Session["xyuan"] = Session["xyuan"] + x.CssClass + ",";//得到cssclass的值,值与id相等
}
else if (h1 == "l")//h1如果等于l说明session中含有被选中的行,但Session【“x”】中不会保存重复的项,所以将值赋给Session【“xyuan”】以便下次重新操作
{
Session["xyuan"] = Session["x"].ToString();
}
}
}
//删除用户最终的选择
protected void Button1_Click(object sender, EventArgs e)
{ int sid=1;
string[] n = Session["xyuan"].ToString().Split(',');
foreach (string x in n)
{
if (x == "")
{ }
else {
sid = Convert.ToInt32(x);
xclass1.ExecuteNonQuery(sid);//调用删除方法循环删除数据
}
}
Response.Redirect("xyhgl.aspx");
}