网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 大学论文导航 设计下载 最新论文 下载排行 原创论文 论文源代码
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > ASP.net > 正文

玩转DataGridView之行的展开与收缩

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/01/05
里面通过比较ID来唯一确定一行,循环比较多,因为子节点是紧接着父节点的,我们可以确定子节点所在的行数,所以用RemoveAt()方法更好。

  1. //利用RemoveAt  
  2.                     for (int i = table.Rows.Count; i > 0; i--)  
  3.                     {  
  4.                         //删除行  
  5.                         this.dataGridView1.Rows.RemoveAt(i + e.RowIndex);  
  6.                     } 

上面的做法是通过不断的插入与删除来实现,但这样与数据库的交互变得很频繁。更好的做法应该是插入一次,然后通过隐藏或显示行来实现我们的效果。

为此,我们还要在grid中新增两个列:

IsInsert:用来判断该行是否已经有插入子节点数据

RowCount:用来保存该行下插入的子节点数量。

在方法DataGridBing中,绑定数据时,应该再加一列:

  1. //是否插入  
  2. row.Cells["IsInsert"].Value = "false"

而在增加节点的时候,我们要多做一个判断,如果IsInsert为false就插入数据,如果为true就显示数据

展开行

  1. if (this.dataGridView1.Columns[e.ColumnIndex].Name == "EX" && isEx=="false")  
  2.             {  
  3.                 if (this.dataGridView1.Rows[e.RowIndex].Cells["IsInsert"].Value.ToString() == "false")  
  4.                 {  
  5.                     string id = this.dataGridView1.Rows[e.RowIndex].Cells["ID"].Value.ToString();  
  6.                     DataTable table = GetDataTable("select * from Department where DparentId=" + id);  
  7.                     if (table.Rows.Count > 0)  
  8.                     {  
  9.                         //插入行  
  10.                         this.dataGridView1.Rows.Insert(e.RowIndex + 1, table.Rows.Count);  
  11.                         for (int i = 0; i < table.Rows.Count; i++)  
  12.                         {  
  13.                             DataGridViewRow row = this.dataGridView1.Rows[e.RowIndex + i + 1];  
  14.                             row.DefaultCellStyle.BackColor = Color.CadetBlue;  
  15.                             row.Cells["ID"].Value = table.Rows[i]["ID"];  
  16.                             row.Cells["DName"].Value = table.Rows[i]["DName"];  
  17.                             row.Cells["Daddress"].Value = table.Rows[i]["Daddress"];  
  18.                             row.Cells["Dtelphone"].Value = table.Rows[i]["Dtelphone"];  
  19.                         }  
  20.                         this.dataGridView1.Rows[e.RowIndex].Cells["IsInsert"].Value = "true";  
  21.                         this.dataGridView1.Rows[e.RowIndex].Cells["RowCount"].Value = table.Rows.Count;  
  22.                     }  
  23.                 }  
  24.                 else 
  25.                 {  
  26.                     //显示数据  
  27.                     int RowCount = Convert.ToInt32(this.dataGridView1.Rows[e.RowIndex].Cells["RowCount"].Value);  
  28.                     for (int i = 1; i <= RowCount; i++)  
  29.                     {  
  30.                         this.dataGridView1.Rows[e.RowIndex + i].Visible = true;  
  31.                     }  
  32.                 }  
  33.                 //将IsEx设置为true,标明该节点已经展开  
  34.                 this.dataGridView1.Rows[e.RowIndex].Cells["IsEx"].Value = "true";  
  35.                 this.dataGridView1.Rows[e.RowIndex].Cells["EX"].Value = "-";  
  36.             } 

  • 上一篇资讯: ASP.NET 预定义模板
  • 网学推荐

    免费论文

    原创论文

    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号