在DataGrid中使用项模板

类别:编程语言 点击:0 评论:0 推荐:

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