在DataGrid中使用项模板
我们可能会遇到这样的情况,当我们要删除记录的时候,可能不止删除一条记录,而是删除两条甚至更多,于是我们通常的做法就是在每条记录后都用一个复选框,选中表示要删除,不选则表示不删除。在asp.net中利用项模板可以轻松实现这个功能。
效果如下图:
怎么样,这个效果很酷吧?其实我觉得最主要的是方便。
接下来我来介绍一下整个实施的过程:
1、 创建一个asp.net应用程序,在WEB窗体中添加一个DataGrid控件,在该控件上单击鼠标右键,选择“属性生成器…”,选择“列”标签,创建一个模板列,如下图:
2、 确定后,再次在控件上单击右键,出现如下菜单:
3、 选择“Columns[5]-删除”菜单(您的可能会不一样),出现模板编辑窗口:
4、 放一个“复选框”到ItemTemplate中,准备工作就做完了,接下来写代码实现批量删除。
5、 思路:先获取每一个复选框所对应的记录ID号(你可以通过各种方法去设置,我用的是获取DATAGRID控件中的第一列的值),把这些ID号放在ArrayList动态数组中,然后写一个方法,参数即为该ArrayList动态数组,遍历所有元素,然后一个一个删除就可以了。
6、 获取ID号集的方法:遍历所有DataGrid中的所有行(Items),取得指定单元格(Cells),然后找到该单元格的控件(Controls)
代码如下:
public ArrayList getIDs()
{
ArrayList al = new ArrayList();
CheckBox box;
for(int i = 0 ;i < this.DataGrid2.Items.Count ; i ++)
{
box = (CheckBox)al.Add(this.DataGrid2.Items[i].Cells[5].Controls[1];
}
if(box.Checked)
{
al.Add(Convert.ToInt32(this.DataGrid2.Items[i].Cells[0]));
}
return al;
}
7、 删除代码如下:
/// <summary>
/// 根据ID删除记录,如果ID为-1,则删除全部
/// </summary>
/// <param name="id">ID号</param>
public void DeleteOne(int id)
{
string sql;
if(id == -1)
sql = "delete from " + this.TableName;
else
sql = "delete from " + this.TableName + " where id = " + id.ToString();
SqlCommand cmd = new SqlCommand(sql,con);
try
{
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
catch(Exception)
{
}
}
/// <summary>
/// 根据ID号成批删除
/// </summary>
/// <param name="al">ID号列表</param>
public virtual void DeleteBated(ArrayList al)
{
int id;
for(int i = 0 ;i<al.Count ; i ++)
{
id = (int)al[i];//获取的主题ID
this.DeleteOne(id);//删除本主题
}
}
本文地址:http://com.8s8s.com/it/it28534.htm