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

主頁 > 知識(shí)庫 > DataGridView展開與收縮功能實(shí)現(xiàn)

DataGridView展開與收縮功能實(shí)現(xiàn)

熱門標(biāo)簽:聊城智能電銷機(jī)器人電話 安陸市地圖標(biāo)注app 海東防封電銷卡 云南外呼系統(tǒng)代理 上海市三維地圖標(biāo)注 寧德防封版電銷卡 南昌自動(dòng)外呼系統(tǒng)線路 西寧電銷外呼系統(tǒng)公司 辦公用地圖標(biāo)注網(wǎng)點(diǎn)怎么操作

很多數(shù)據(jù)都有父節(jié)點(diǎn)與子節(jié)點(diǎn),我們希望單擊父節(jié)點(diǎn)的時(shí)候可以展開父節(jié)點(diǎn)下的子節(jié)點(diǎn)數(shù)據(jù)。

比如一個(gè)醫(yī)院科室表,有父科室與子科室,點(diǎn)擊父科室后,在父科室下面可以展現(xiàn)該科室下的所有子科室。

我們來說一下在DataGridView中如何實(shí)現(xiàn)這個(gè)功能。

首先,創(chuàng)建示例數(shù)據(jù):

示例數(shù)據(jù)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醫(yī)院') 
insert into Department values('門診內(nèi)科',1,'2222','XXX醫(yī)院') 
insert into Department values('門診手術(shù)',1,'3333','XXX醫(yī)院') 
insert into Department values('門診兒科',1,'4444','XXX醫(yī)院') 
insert into Department values('神經(jīng)內(nèi)室',2,'5555','XXX醫(yī)院') 
insert into Department values('神經(jīng)外科',2,'6666','XXX醫(yī)院') 
insert into Department values('住院手術(shù)',2,'7777','XXX醫(yī)院') 
insert into Department values('住院康復(fù)',2,'8888','XXX醫(yī)院') 

其實(shí)思路很簡單,就是在展開父節(jié)點(diǎn)的時(shí)候,在父節(jié)點(diǎn)下插入新的DataGridViewRow;收縮父節(jié)點(diǎn)的時(shí)候,在父節(jié)點(diǎn)下刪除該子節(jié)點(diǎn)的DataGridViewRow。

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

加載父節(jié)點(diǎn)數(shù)據(jù),除了數(shù)據(jù)庫中的列外我還新加了兩列: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"]; 
          //用于顯示該行是否已經(jīng)展開 
          row.Cells["IsEx"].Value = "false"; 
          //用于顯示展開或收縮符號(hào),為了簡單我就直接用字符串了,其實(shí)用圖片比較美觀 
          row.Cells["EX"].Value = "+"; 
        } 
      } 
    } 

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

插入子節(jié)點(diǎn):

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設(shè)置為true,標(biāo)明該節(jié)點(diǎn)已經(jīng)展開 
        this.dataGridView1.Rows[e.RowIndex].Cells["IsEx"].Value = "true"; 
        this.dataGridView1.Rows[e.RowIndex].Cells["EX"].Value = "-"; 

刪除子節(jié)點(diǎn):

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設(shè)置為false,標(biāo)明該節(jié)點(diǎn)已經(jīng)收縮 
        this.dataGridView1.Rows[e.RowIndex].Cells["IsEx"].Value = "false"; 
        this.dataGridView1.Rows[e.RowIndex].Cells["EX"].Value = "+"; 
      } 

這里面通過比較ID來唯一確定一行,循環(huán)比較多,因?yàn)樽庸?jié)點(diǎn)是緊接著父節(jié)點(diǎn)的,我們可以確定子節(jié)點(diǎn)所在的行數(shù),所以用RemoveAt()方法更好。

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

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

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

IsInsert:用來判斷該行是否已經(jīng)有插入子節(jié)點(diǎn)數(shù)據(jù)

RowCount:用來保存該行下插入的子節(jié)點(diǎn)數(shù)量。

在方法DataGridBing中,綁定數(shù)據(jù)時(shí),應(yīng)該再加一列:

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

而在增加節(jié)點(diǎn)的時(shí)候,我們要多做一個(gè)判斷,如果IsInsert為false就插入數(shù)據(jù),如果為true就顯示數(shù)據(jù)

展開行

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 
        { 
          //顯示數(shù)據(jù) 
          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設(shè)置為true,標(biāo)明該節(jié)點(diǎn)已經(jīng)展開 
        this.dataGridView1.Rows[e.RowIndex].Cells["IsEx"].Value = "true"; 
        this.dataGridView1.Rows[e.RowIndex].Cells["EX"].Value = "-"; 
      } 

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

收縮行

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設(shè)置為false,標(biāo)明該節(jié)點(diǎn)已經(jīng)收縮 
        this.dataGridView1.Rows[e.RowIndex].Cells["IsEx"].Value = "false"; 
        this.dataGridView1.Rows[e.RowIndex].Cells["EX"].Value = "+"; 
      } 

大家知道DataGridView是如何實(shí)現(xiàn)展開收縮的吧,希望大家不僅知道是如何實(shí)現(xiàn)的還要?jiǎng)邮謱?shí)驗(yàn)一番,才不枉小編辛苦整理此文章哦

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

標(biāo)簽:衢州 崇左 青海 洛陽 汕尾 贛州 南寧

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《DataGridView展開與收縮功能實(shí)現(xiàn)》,本文關(guān)鍵詞  DataGridView,展開,與,收縮,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《DataGridView展開與收縮功能實(shí)現(xiàn)》相關(guān)的同類信息!
  • 本頁收集關(guān)于DataGridView展開與收縮功能實(shí)現(xiàn)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    成人午夜免费电影| 中文字幕一区在线| 色综合久久中文字幕| 欧美亚洲综合久久| 精品一区二区三区的国产在线播放| 色综合色狠狠天天综合色| 欧美不卡视频一区| 亚洲成人精品一区二区| 国产午夜精品久久久久久久| 亚洲午夜视频在线| 91在线码无精品| 亚洲国产精品久久一线不卡| 自拍偷拍亚洲综合| 午夜精品久久久久久久 | 免费观看成人av| 国产aⅴ精品一区二区三区色成熟| 日韩欧美国产综合一区| 日本亚洲天堂网| 高清日韩电视剧大全免费| 自拍偷在线精品自拍偷无码专区| 国产在线精品免费| 久久亚洲精精品中文字幕早川悠里 | 精品久久一区二区三区| 一区二区三区色| 91精品国产欧美一区二区18| 欧美aaa在线| 日韩欧美国产1| 久久精品一二三| 色94色欧美sute亚洲线路一ni| 久久九九全国免费| 欧美人与z0zoxxxx视频| 午夜国产精品一区| 久久精品人人做人人爽人人| www.欧美亚洲| 国产精品成人免费| 国产成人免费在线观看不卡| 成人小视频在线| 精品国产一区二区三区忘忧草| 色婷婷亚洲一区二区三区| 亚洲精品视频免费观看| 欧美一区二区三区精品| 亚洲gay无套男同| 奇米综合一区二区三区精品视频| 精品黑人一区二区三区久久| 处破女av一区二区| 久久欧美一区二区| 欧美丝袜丝nylons| 日日摸夜夜添夜夜添亚洲女人| 欧美色综合久久| 在线看国产一区二区| 天天爽夜夜爽夜夜爽精品视频| 欧美激情一区不卡| 国产99久久久久| 国产麻豆精品在线| 亚洲精品国产无天堂网2021| 欧美一区二区国产| 在线观看欧美精品| 国产一区二区在线免费观看| 日韩黄色免费网站| 夜夜嗨av一区二区三区中文字幕| 精品国产免费一区二区三区四区 | 国产亚洲成av人在线观看导航| 日韩电影网1区2区| 亚洲一区二区在线观看视频| 中文乱码免费一区二区| 一本一本久久a久久精品综合麻豆| 亚洲h动漫在线| 五月婷婷综合激情| 久久婷婷一区二区三区| 91精品在线一区二区| 26uuu国产电影一区二区| 欧美日韩精品一区二区三区| 国产a久久麻豆| 国产一区三区三区| 亚洲一区二区黄色| 亚洲国产精品一区二区www在线| 欧美r级电影在线观看| 欧美亚洲国产一区二区三区va| 麻豆国产精品777777在线| 日本不卡不码高清免费观看| 日韩精彩视频在线观看| 夜夜嗨av一区二区三区中文字幕| 一区二区三区蜜桃| 午夜精品久久久久久久| |精品福利一区二区三区| 国产在线精品不卡| 中文字幕第一区综合| 91久久精品午夜一区二区| 亚洲免费三区一区二区| 2023国产精品视频| 国产欧美日韩一区二区三区在线观看 | 欧美日韩在线电影| 成人永久aaa| 日韩国产在线观看| 久久国产精品免费| 91色乱码一区二区三区| 这里只有精品电影| 日韩一区二区免费高清| 欧美系列亚洲系列| 欧美一区二区三区四区视频| 欧美激情一区二区在线| 亚洲妇熟xx妇色黄| 成人性生交大片免费看在线播放 | 久久精品一区二区三区四区| 久久久久国产精品人| 激情文学综合网| 欧美性大战久久久久久久蜜臀| 国产日韩av一区二区| 久久国产精品露脸对白| 欧美日韩亚洲综合在线| 青青草精品视频| 日韩精品一区二区三区在线| 蜜桃视频第一区免费观看| 51精品久久久久久久蜜臀| 国产午夜亚洲精品午夜鲁丝片| 国产成人鲁色资源国产91色综| 日韩一级二级三级| 国产综合一区二区| 久久先锋影音av| 国产在线精品一区二区夜色| 91激情五月电影| 亚洲精选免费视频| 一本在线高清不卡dvd| ...xxx性欧美| 成人午夜av电影| 久久综合久久综合亚洲| 国产精品自拍三区| 国产精品无人区| jlzzjlzz欧美大全| 国产精品丝袜在线| 成人国产视频在线观看| 国产精品视频免费| av电影天堂一区二区在线观看| 国产精品免费看片| 色综合 综合色| 亚洲成人一二三| 欧美一区二区网站| 韩国毛片一区二区三区| 精品国产一区二区三区久久久蜜月 | 欧美精品久久99| 日本视频在线一区| 久久综合九色综合97婷婷| 国产中文字幕一区| 国产精品灌醉下药二区| 亚洲综合区在线| a美女胸又www黄视频久久| 成人欧美一区二区三区白人| 青青草国产精品97视觉盛宴| 91精品国产综合久久小美女| 亚洲精品欧美专区| 欧美三级三级三级| 国产一区二区伦理| 亚洲精品国产无套在线观| 欧美精品第一页| 色94色欧美sute亚洲线路一久| 丝袜美腿亚洲一区二区图片| 久久品道一品道久久精品| 欧美一区二区视频在线观看2022| 国产91高潮流白浆在线麻豆 | 久久成人av少妇免费| 午夜精品福利久久久| 久久影院视频免费| 欧美α欧美αv大片| 色综合天天综合狠狠| 美女在线视频一区| 免费在线一区观看| 亚洲精品免费在线播放| 2022国产精品视频| 欧美精品在线观看一区二区| 国产不卡视频在线观看| 婷婷激情综合网| 丝袜诱惑亚洲看片| 中文字幕一区二区三区四区| 91精品国产一区二区三区| 色狠狠桃花综合| 99久久精品国产一区| 99久久er热在这里只有精品66| 波波电影院一区二区三区| caoporen国产精品视频| 99国产精品久久久久久久久久 | 日韩精品中文字幕一区二区三区 | 色88888久久久久久影院野外| 韩国av一区二区三区在线观看| 秋霞影院一区二区| 久久国内精品自在自线400部| 久久成人久久鬼色| 国产成人欧美日韩在线电影 | 宅男在线国产精品| 欧美一区二区三区在线观看| 91精品国产综合久久蜜臀| 欧美大片一区二区| 国产视频不卡一区| 亚洲欧美日韩在线| 午夜精品成人在线视频| 麻豆国产欧美一区二区三区| 黄页视频在线91| 成人av在线网| 制服.丝袜.亚洲.另类.中文| 久久久久青草大香线综合精品| 亚洲人一二三区|