婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > DataGridView展開與收縮功能實現

DataGridView展開與收縮功能實現

熱門標簽:聊城智能電銷機器人電話 安陸市地圖標注app 海東防封電銷卡 云南外呼系統代理 上海市三維地圖標注 寧德防封版電銷卡 南昌自動外呼系統線路 西寧電銷外呼系統公司 辦公用地圖標注網點怎么操作

很多數據都有父節點與子節點,我們希望單擊父節點的時候可以展開父節點下的子節點數據。

比如一個醫院科室表,有父科室與子科室,點擊父科室后,在父科室下面可以展現該科室下的所有子科室。

我們來說一下在DataGridView中如何實現這個功能。

首先,創建示例數據:

示例數據SQL

create table Department 
( 
 ID int identity(1,1) not null, 
 DName varchar(20) null, 
 DparentId int null, 
 Dtelphone varchar(20) null, 
 Dhospital varchar(50) null 
) 
 
insert into Department values('門診外室',1,'1111','XXX醫院') 
insert into Department values('門診內科',1,'2222','XXX醫院') 
insert into Department values('門診手術',1,'3333','XXX醫院') 
insert into Department values('門診兒科',1,'4444','XXX醫院') 
insert into Department values('神經內室',2,'5555','XXX醫院') 
insert into Department values('神經外科',2,'6666','XXX醫院') 
insert into Department values('住院手術',2,'7777','XXX醫院') 
insert into Department values('住院康復',2,'8888','XXX醫院') 

其實思路很簡單,就是在展開父節點的時候,在父節點下插入新的DataGridViewRow;收縮父節點的時候,在父節點下刪除該子節點的DataGridViewRow。

為了簡便,代碼中的數據讀取我都直接硬編碼了。

加載父節點數據,除了數據庫中的列外我還新加了兩列:IsEx與EX。

private void DataGridBing(DataTable table) 
    { 
      if (table.Rows.Count > 0) 
      { 
        for (int i = 0; i  table.Rows.Count; i++) 
        { 
           
          int k = this.dataGridView1.Rows.Add(); 
          DataGridViewRow row = this.dataGridView1.Rows[k]; 
          row.Cells["ID"].Value = table.Rows[i]["ID"]; 
          row.Cells["DName"].Value = table.Rows[i]["DName"]; 
          row.Cells["Daddress"].Value = table.Rows[i]["Daddress"]; 
          row.Cells["Dtelphone"].Value = table.Rows[i]["Dtelphone"]; 
          //用于顯示該行是否已經展開 
          row.Cells["IsEx"].Value = "false"; 
          //用于顯示展開或收縮符號,為了簡單我就直接用字符串了,其實用圖片比較美觀 
          row.Cells["EX"].Value = "+"; 
        } 
      } 
    } 

下面就是Cell的單擊事件了,分別在事件中寫展開的插入與收縮的刪除.

插入子節點:

string isEx=this.dataGridView1.Rows[e.RowIndex].Cells["IsEx"].Value.ToString(); 
      if (this.dataGridView1.Columns[e.ColumnIndex].Name == "EX"  isEx=="false") 
      { 
        string id = this.dataGridView1.Rows[e.RowIndex].Cells["ID"].Value.ToString(); 
        DataTable table = GetDataTable("select * from Department where DparentId="+id); 
        if (table.Rows.Count > 0) 
        { 
          //插入行 
          this.dataGridView1.Rows.Insert(e.RowIndex+1, table.Rows.Count); 
          for (int i = 0; i  table.Rows.Count; i++) 
          { 
            DataGridViewRow row = this.dataGridView1.Rows[e.RowIndex + i+1]; 
            row.DefaultCellStyle.BackColor = Color.CadetBlue; 
            row.Cells["ID"].Value = table.Rows[i]["ID"]; 
            row.Cells["DName"].Value = table.Rows[i]["DName"]; 
            row.Cells["Daddress"].Value = table.Rows[i]["Daddress"]; 
            row.Cells["Dtelphone"].Value = table.Rows[i]["Dtelphone"]; 
          } 
        } 
        //將IsEx設置為true,標明該節點已經展開 
        this.dataGridView1.Rows[e.RowIndex].Cells["IsEx"].Value = "true"; 
        this.dataGridView1.Rows[e.RowIndex].Cells["EX"].Value = "-"; 

刪除子節點:

if (this.dataGridView1.Columns[e.ColumnIndex].Name == "EX"  isEx == "true") 
      { 
        string id = this.dataGridView1.Rows[e.RowIndex].Cells["ID"].Value.ToString(); 
        DataTable table = GetDataTable("select * from Department where DparentId=" + id); 
        if (table.Rows.Count > 0) 
        { 
          //利用Remove 
          for (int i = 0; i  table.Rows.Count; i++) 
          { 
            foreach (DataGridViewRow row in this.dataGridView1.Rows) 
            { 
              if (row.Cells["ID"].Value.Equals(table.Rows[i]["ID"])) 
              { 
                this.dataGridView1.Rows.Remove(row); 
              } 
            } 
          } 
        } 
        ////將IsEx設置為false,標明該節點已經收縮 
        this.dataGridView1.Rows[e.RowIndex].Cells["IsEx"].Value = "false"; 
        this.dataGridView1.Rows[e.RowIndex].Cells["EX"].Value = "+"; 
      } 

這里面通過比較ID來唯一確定一行,循環比較多,因為子節點是緊接著父節點的,我們可以確定子節點所在的行數,所以用RemoveAt()方法更好。

//利用RemoveAt 
          for (int i = table.Rows.Count; i > 0; i--) 
          { 
            //刪除行 
            this.dataGridView1.Rows.RemoveAt(i + e.RowIndex); 
          } 

上面的做法是通過不斷的插入與刪除來實現,但這樣與數據庫的交互變得很頻繁。更好的做法應該是插入一次,然后通過隱藏或顯示行來實現我們的效果。

為此,我們還要在grid中新增兩個列:

IsInsert:用來判斷該行是否已經有插入子節點數據

RowCount:用來保存該行下插入的子節點數量。

在方法DataGridBing中,綁定數據時,應該再加一列:

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

而在增加節點的時候,我們要多做一個判斷,如果IsInsert為false就插入數據,如果為true就顯示數據

展開行

if (this.dataGridView1.Columns[e.ColumnIndex].Name == "EX"  isEx=="false") 
      { 
        if (this.dataGridView1.Rows[e.RowIndex].Cells["IsInsert"].Value.ToString() == "false") 
        { 
          string id = this.dataGridView1.Rows[e.RowIndex].Cells["ID"].Value.ToString(); 
          DataTable table = GetDataTable("select * from Department where DparentId=" + id); 
          if (table.Rows.Count > 0) 
          { 
            //插入行 
            this.dataGridView1.Rows.Insert(e.RowIndex + 1, table.Rows.Count); 
            for (int i = 0; i  table.Rows.Count; i++) 
            { 
              DataGridViewRow row = this.dataGridView1.Rows[e.RowIndex + i + 1]; 
              row.DefaultCellStyle.BackColor = Color.CadetBlue; 
              row.Cells["ID"].Value = table.Rows[i]["ID"]; 
              row.Cells["DName"].Value = table.Rows[i]["DName"]; 
              row.Cells["Daddress"].Value = table.Rows[i]["Daddress"]; 
              row.Cells["Dtelphone"].Value = table.Rows[i]["Dtelphone"]; 
            } 
            this.dataGridView1.Rows[e.RowIndex].Cells["IsInsert"].Value = "true"; 
            this.dataGridView1.Rows[e.RowIndex].Cells["RowCount"].Value = table.Rows.Count; 
          } 
        } 
        else 
        { 
          //顯示數據 
          int RowCount = Convert.ToInt32(this.dataGridView1.Rows[e.RowIndex].Cells["RowCount"].Value); 
          for (int i = 1; i = RowCount; i++) 
          { 
            this.dataGridView1.Rows[e.RowIndex + i].Visible = true; 
          } 
        } 
        //將IsEx設置為true,標明該節點已經展開 
        this.dataGridView1.Rows[e.RowIndex].Cells["IsEx"].Value = "true"; 
        this.dataGridView1.Rows[e.RowIndex].Cells["EX"].Value = "-"; 
      } 

收縮的時候,我們直接隱藏行就可以了.

收縮行

if (this.dataGridView1.Columns[e.ColumnIndex].Name == "EX"  isEx == "true") 
      { 
        int RowCount = Convert.ToInt32(this.dataGridView1.Rows[e.RowIndex].Cells["RowCount"].Value); 
        for (int i = 1; i = RowCount; i++) 
        { 
          //隱藏行 
          this.dataGridView1.Rows[e.RowIndex + i].Visible = false; 
        } 
        ////將IsEx設置為false,標明該節點已經收縮 
        this.dataGridView1.Rows[e.RowIndex].Cells["IsEx"].Value = "false"; 
        this.dataGridView1.Rows[e.RowIndex].Cells["EX"].Value = "+"; 
      } 

大家知道DataGridView是如何實現展開收縮的吧,希望大家不僅知道是如何實現的還要動手實驗一番,才不枉小編辛苦整理此文章哦

您可能感興趣的文章:
  • C# DataGridView綁定數據源的方法
  • C#窗體控件DataGridView常用設置
  • Winform在DataGridView中顯示圖片
  • WinForm中DataGridView折疊控件【超好看】
  • C#自定義DataGridViewColumn顯示TreeView
  • C#中DataGridView動態添加行及添加列的方法
  • DataGridView使用自定義控件實現簡單分頁功能(推薦)

標簽:衢州 崇左 平涼 青海 洛陽 汕尾 贛州 南寧

巨人網絡通訊聲明:本文標題《DataGridView展開與收縮功能實現》,本文關鍵詞  DataGridView,展開,與,收縮,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《DataGridView展開與收縮功能實現》相關的同類信息!
  • 本頁收集關于DataGridView展開與收縮功能實現的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    成人毛片在线观看| 日韩黄色免费电影| 成人高清在线视频| 中文字幕一区二区三区在线播放 | 国产精品自产自拍| 久久免费精品国产久精品久久久久| 麻豆成人免费电影| 久久综合五月天婷婷伊人| 国产麻豆精品视频| 日韩一区中文字幕| 欧美日本不卡视频| 久久99精品久久久久| 中文字幕不卡的av| 欧美中文字幕一二三区视频| 蜜臀久久99精品久久久画质超高清| 久久伊99综合婷婷久久伊| 成人av网站在线| 肉丝袜脚交视频一区二区| 欧美本精品男人aⅴ天堂| 国产suv精品一区二区883| 亚洲欧美日韩国产综合在线| 欧美高清dvd| 成人一区二区视频| 视频在线观看一区二区三区| 久久久久国产精品麻豆| 色哟哟一区二区| 激情小说亚洲一区| 亚洲第一会所有码转帖| wwwwxxxxx欧美| 91国产免费看| 国产一区二区久久| 亚洲高清免费一级二级三级| 久久久不卡影院| 欧美色老头old∨ideo| 国产电影精品久久禁18| 亚洲高清免费视频| 国产精品毛片久久久久久| 欧美日韩aaa| 91免费看片在线观看| 国产综合成人久久大片91| 亚洲一区二区三区视频在线播放| 精品久久久久久无| 欧美喷潮久久久xxxxx| 成人av小说网| 国产成人一级电影| 日韩av在线发布| 亚洲免费视频成人| 国产精品色眯眯| 久久免费美女视频| 6080国产精品一区二区| 91成人国产精品| 成人动漫一区二区在线| 国产乱理伦片在线观看夜一区| 视频一区视频二区中文字幕| 亚洲自拍欧美精品| 亚洲色图视频免费播放| 欧美国产日产图区| 久久精品日韩一区二区三区| 日韩欧美在线123| 欧美一区二区三区在线视频| 欧美性猛交一区二区三区精品| 不卡的av网站| 懂色av中文一区二区三区 | 国产拍揄自揄精品视频麻豆| 日韩视频免费观看高清完整版| 欧美中文字幕一区二区三区| 91久久精品一区二区三| 成人久久久精品乱码一区二区三区| 国内精品免费**视频| 精品一区二区三区视频| 麻豆成人久久精品二区三区红| 日本在线不卡视频| 蜜臀av一区二区在线免费观看| 亚洲成人自拍偷拍| 日韩av在线免费观看不卡| 日韩在线观看一区二区| 日韩成人精品视频| 日韩—二三区免费观看av| 青青草97国产精品免费观看 | 日韩精品一区二| 日韩欧美另类在线| 久久综合丝袜日本网| 亚洲国产高清在线观看视频| 国产色产综合色产在线视频| 亚洲国产精品精华液ab| 亚洲欧洲日产国产综合网| 一区二区三区视频在线观看| 午夜视频在线观看一区二区| 日本不卡123| 国内精品久久久久影院薰衣草| 国产成人精品免费视频网站| 91社区在线播放| 欧美日韩中文字幕精品| 欧美一区中文字幕| 欧美激情在线看| 亚洲精选视频在线| 青青草视频一区| 国产精品主播直播| 91美女精品福利| 91麻豆精品国产91久久久| 久久综合九色欧美综合狠狠| 国产精品婷婷午夜在线观看| 亚洲一区在线播放| 蜜桃一区二区三区在线| 国产91富婆露脸刺激对白| 一本色道**综合亚洲精品蜜桃冫| 制服丝袜亚洲播放| 国产精品美女一区二区在线观看| 亚洲一区中文日韩| 国产美女在线精品| 欧美综合在线视频| 亚洲精品一线二线三线| 一区二区三区视频在线看| 狠狠色综合色综合网络| 日本韩国欧美在线| 国产偷国产偷精品高清尤物| 亚洲国产精品久久人人爱蜜臀| 国产一区二区调教| 欧美日韩大陆在线| 国产精品乱码人人做人人爱 | 欧美电影一区二区| 中文字幕不卡一区| 蜜桃精品在线观看| 欧美自拍偷拍一区| 亚洲国产精品成人综合色在线婷婷| 亚洲aⅴ怡春院| av亚洲精华国产精华精华| 欧美一区二区女人| 亚洲欧美偷拍卡通变态| 韩国欧美国产1区| 欧美精品三级日韩久久| 成人免费在线视频观看| 久久草av在线| 欧美日韩精品欧美日韩精品| 国产精品久久久久永久免费观看| 日韩av电影免费观看高清完整版在线观看 | 精品久久久久久久久久久久久久久久久 | 成人的网站免费观看| 日韩欧美一级二级| 夜夜嗨av一区二区三区 | 日本久久电影网| 中文av一区特黄| 国产一区在线观看视频| 欧美一区二区精品久久911| 亚洲天堂福利av| 国产成人av一区二区| 精品第一国产综合精品aⅴ| 午夜在线电影亚洲一区| 色婷婷国产精品| 亚洲天堂成人在线观看| 成年人午夜久久久| 国产精品理论片| 国产成人一区在线| 国产日韩亚洲欧美综合| 精品一区二区三区免费观看| 91精品久久久久久久99蜜桃| 五月天激情小说综合| 欧美日韩国产综合久久| 亚洲电影一级黄| 欧美老肥妇做.爰bbww视频| 亚洲综合色成人| 91黄色免费观看| 亚洲一区二区在线免费看| 色婷婷综合久久| 亚洲最色的网站| 欧洲精品中文字幕| 亚洲18影院在线观看| 欧美浪妇xxxx高跟鞋交| 男人操女人的视频在线观看欧美| 欧美日韩精品一区二区三区| 日韩电影免费在线| 日韩欧美一级二级| 韩国欧美国产1区| 日本一区二区电影| 91影视在线播放| 亚洲国产色一区| 日韩一二在线观看| 精品一区二区免费| 国产欧美精品一区二区色综合朱莉| 成人免费毛片app| 一区二区三区精品在线| 欧美丰满少妇xxxxx高潮对白| 老汉av免费一区二区三区| 国产婷婷一区二区| 色婷婷av久久久久久久| 一区二区免费在线播放| 欧美电影在线免费观看| 国产成人一级电影| 一区二区三区四区在线播放 | 欧美妇女性影城| 国产精品亚洲一区二区三区在线| 日本一区二区三区电影| 日本伦理一区二区| 裸体健美xxxx欧美裸体表演| 国产午夜亚洲精品羞羞网站| 91色视频在线| 老司机精品视频线观看86| 亚洲丝袜制服诱惑| 欧美大胆人体bbbb| av在线免费不卡|