亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > 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精品系列在线观看| 韩国毛片免费大片| 国产成人精品一区二区视频| 精品美女| 日本特黄特黄aaaaa大片| 精品视频在线观看免费 | 国产伦精品一区二区三区无广告| 亚洲女人国产香蕉久久精品| 99久久精品国产麻豆| 青青久久精品国产免费看| 国产视频网站在线观看| 免费国产在线观看| 四虎影视久久久免费| 你懂的福利视频| 超级乱淫黄漫画免费| 国产一区二区精品久久91| 麻豆网站在线看| 国产麻豆精品hdvideoss| 国产a免费观看| 黄色福利片| 国产精品自拍在线| 亚洲 国产精品 日韩| 九九久久国产精品| 国产精品自拍亚洲| 久久精品店| 成人影视在线播放| 国产伦精品一区二区三区无广告 | 日韩欧美一二三区| 欧美激情一区二区三区中文字幕| 国产精品1024在线永久免费 | 国产精品12| 一级毛片视频在线观看| 国产欧美精品| 精品国产香蕉在线播出| 国产91精品一区| 国产精品自拍一区| 亚欧成人毛片一区二区三区四区| 日韩综合| 精品视频免费看| 九九精品在线播放| 日本在线www| 午夜在线影院| 精品视频在线观看一区二区| 亚飞与亚基在线观看| 午夜欧美成人香蕉剧场| 成人免费观看视频| 色综合久久天天综合绕观看| 日韩av东京社区男人的天堂| 国产一区二区精品久| 免费一级生活片| 日本特黄特色aaa大片免费| 国产一区二区精品久| 黄色免费三级| 国产91素人搭讪系列天堂| 国产一区二区精品| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 日韩一级黄色大片| 九九干| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 高清一级淫片a级中文字幕 | 精品视频一区二区| 久久国产一区二区| 中文字幕97| 一级毛片视频在线观看| 国产一区免费在线观看| 一级毛片看真人在线视频| 欧美一级视频免费| 97视频免费在线观看| 香蕉视频一级| 国产极品精频在线观看| 国产网站在线| 欧美大片a一级毛片视频| 91麻豆精品国产综合久久久| 日韩欧美一及在线播放| 精品久久久久久免费影院| 国产国产人免费视频成69堂| 亚洲wwwwww| 免费国产在线观看不卡| 免费的黄色小视频| 精品国产亚洲人成在线| 日韩一级黄色大片| a级毛片免费全部播放| 欧美国产日韩在线| 99久久精品国产片| 欧美激情一区二区三区视频| 午夜在线亚洲| 欧美a级片免费看| 一级毛片视频免费| 欧美a级片免费看| 精品久久久久久中文字幕2017| 国产国语对白一级毛片| 精品视频在线观看免费| 一级毛片看真人在线视频| 天天做日日爱| 国产激情一区二区三区| 91麻豆精品国产片在线观看| 国产不卡在线观看视频| 亚久久伊人精品青青草原2020| 精品视频一区二区| 欧美激情一区二区三区在线播放| 四虎久久精品国产| 国产成人精品综合| 久久久久久久网| 中文字幕97| 亚欧视频在线| 国产一区精品| 日本伦理片网站| 成人免费观看的视频黄页| 日韩字幕在线| 免费的黄色小视频| 国产麻豆精品| 人人干人人插| 久久国产精品自由自在| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 国产视频一区在线| 亚洲精品久久久中文字| 欧美大片a一级毛片视频| 国产综合成人观看在线| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 国产91精品系列在线观看| 国产网站麻豆精品视频| 国产91精品一区| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 青草国产在线| 精品视频在线观看视频免费视频| 精品国产亚洲一区二区三区| 九九免费高清在线观看视频| 九九精品在线播放| 欧美一级视频免费| 精品视频在线观看视频免费视频| 韩国三级香港三级日本三级la| 欧美激情影院| 亚欧乱色一区二区三区| 国产不卡福利| 国产不卡在线看| 999久久久免费精品国产牛牛| 国产一区二区精品久久91| 日日日夜夜操| 日韩欧美一二三区| 国产美女在线一区二区三区| 国产精品自拍一区| 久草免费在线视频| 精品视频在线看| 四虎影视库| 可以免费在线看黄的网站| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 99久久精品费精品国产一区二区| 青青久在线视频| 日日日夜夜操| 韩国妈妈的朋友在线播放| 日韩专区一区| 亚洲精品久久久中文字| 日韩在线观看视频黄| 在线观看成人网 | 日韩一级精品视频在线观看| 亚洲第一页色| 精品国产一区二区三区免费| 精品久久久久久中文| 国产综合91天堂亚洲国产| 毛片电影网| 国产综合成人观看在线| 精品国产一区二区三区久 | 免费国产一级特黄aa大片在线| 久久国产一区二区| 你懂的国产精品| 国产亚洲精品aaa大片| 99久久精品国产麻豆| 日韩中文字幕一区二区不卡| 欧美激情一区二区三区视频| 国产麻豆精品hdvideoss| 日韩欧美一二三区| 精品久久久久久中文字幕一区 | 精品视频一区二区三区免费| 免费一级生活片| 香蕉视频一级| 成人a大片在线观看| 深夜做爰性大片中文| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 久久精品欧美一区二区| 天天做日日干| 一本伊大人香蕉高清在线观看| 国产不卡在线看| 天天做人人爱夜夜爽2020 | 成人av在线播放| 成人免费观看视频| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 亚欧视频在线| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 高清一级片| 国产精品123| 精品久久久久久中文| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 日韩在线观看网站| 成人a大片在线观看| 久久精品欧美一区二区| 一级毛片视频播放| 日韩在线观看网站| 国产精品1024在线永久免费| 精品视频在线看| 色综合久久天天综合观看|