婷婷综合国产,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
    99久久er热在这里只有精品15| 韩日欧美一区二区三区| 国产专区欧美精品| av色综合久久天堂av综合| 91国在线观看| 亚洲欧洲av色图| 成人网在线免费视频| 欧美一级欧美一级在线播放| 日韩精品成人一区二区在线| 69堂亚洲精品首页| 青草国产精品久久久久久| 777色狠狠一区二区三区| 亚洲国产精品视频| 欧美一级久久久久久久大片| 精品在线观看视频| 国产精品国产三级国产三级人妇| 色婷婷综合久久久| 日韩黄色小视频| 日韩欧美一区中文| 久久er精品视频| 国产精品第一页第二页第三页| 91免费国产在线观看| 日韩—二三区免费观看av| 日韩精品专区在线| 国产98色在线|日韩| 亚洲三级视频在线观看| 91黄色免费网站| 男女性色大片免费观看一区二区| 久久久亚洲精品一区二区三区| 国产做a爰片久久毛片| 亚洲精品国产成人久久av盗摄 | 免费成人你懂的| 日韩精品专区在线影院观看| av中文字幕不卡| 日本视频中文字幕一区二区三区| 欧美mv日韩mv国产网站| 色香色香欲天天天影视综合网| 青青草精品视频| 亚洲人成亚洲人成在线观看图片| 日韩视频免费观看高清完整版| 99国产精品国产精品久久| 老司机免费视频一区二区| 青青草成人在线观看| 91精品国产综合久久小美女| 国产91综合网| 青青草国产精品亚洲专区无| 国产精品久久久久婷婷| 日韩免费一区二区三区在线播放| www.日韩大片| 国产一区二区三区| 日韩av在线播放中文字幕| 国产色婷婷亚洲99精品小说| 麻豆一区二区三| 91精品在线一区二区| 亚洲一区二区精品久久av| 欧美国产在线观看| 99精品黄色片免费大全| 亚洲国产成人av网| 国产日韩欧美一区二区三区综合| 色综合激情久久| 国产成人精品亚洲午夜麻豆| 肉丝袜脚交视频一区二区| 久久精品视频免费| 欧美巨大另类极品videosbest| 99久久伊人网影院| 丰满少妇在线播放bd日韩电影| 日韩电影一区二区三区四区| 亚洲chinese男男1069| 精品视频在线免费观看| 国产性色一区二区| 欧美日韩国产首页在线观看| 在线免费观看不卡av| 亚洲欧美成人一区二区三区| 欧美成人video| 日韩高清在线一区| 亚洲成人手机在线| 亚洲综合在线第一页| 亚洲资源在线观看| 午夜视频一区在线观看| 亚洲一卡二卡三卡四卡五卡| 亚洲成av人片一区二区| 日产国产高清一区二区三区| 激情综合网最新| 国产成人日日夜夜| 亚洲激情欧美激情| 天天操天天干天天综合网| 日韩精品每日更新| 国产一区二区三区国产| 国产精品99久久不卡二区| 丰满放荡岳乱妇91ww| 成人免费高清在线| 色综合中文字幕| 欧美老年两性高潮| 久久亚洲一级片| 亚洲国产成人在线| 亚洲va韩国va欧美va精品| 强制捆绑调教一区二区| 不卡视频在线看| 日本精品一区二区三区高清 | 日韩国产成人精品| 日本中文一区二区三区| 国产美女视频一区| 色综合色综合色综合| 日韩欧美一级二级三级| 最新日韩在线视频| 免费在线观看精品| 2020国产精品久久精品美国| 欧美肥大bbwbbw高潮| 欧美日韩国产精选| 成人av在线网| 国产精品一区免费视频| 99久久国产综合精品色伊| 久久综合色播五月| 高清免费成人av| 欧美亚洲免费在线一区| 国产亚洲欧美一级| 色综合夜色一区| 麻豆国产欧美日韩综合精品二区| 免费视频最近日韩| a亚洲天堂av| 日韩欧美一区二区三区在线| 国产精品大尺度| 麻豆精品久久久| 欧美蜜桃一区二区三区| 国产精品视频在线看| 国内成人免费视频| 538在线一区二区精品国产| 一区二区三区日韩| 成人免费福利片| 久久久青草青青国产亚洲免观| 亚洲午夜国产一区99re久久| 北条麻妃国产九九精品视频| 久久一区二区三区国产精品| 开心九九激情九九欧美日韩精美视频电影 | 国产精品99久久不卡二区| 91丨国产丨九色丨pron| 日本一区二区三区视频视频| 激情综合网天天干| 精品国产自在久精品国产| 男人的天堂久久精品| 日韩一区二区三区四区| 蜜芽一区二区三区| 日韩一区二区三免费高清| 亚洲成av人片| 日韩情涩欧美日韩视频| 日本成人在线看| 91精品国产欧美一区二区成人| 日产精品久久久久久久性色| 日韩欧美中文一区| 久久久91精品国产一区二区精品| 蜜臀91精品一区二区三区| 欧美一卡二卡三卡| 美女视频黄频大全不卡视频在线播放| 日韩一区二区三区视频| 六月丁香综合在线视频| 久久免费看少妇高潮| 东方欧美亚洲色图在线| 国产精品传媒在线| 91在线无精精品入口| 亚洲一区二区精品久久av| 精品婷婷伊人一区三区三| 美女免费视频一区二区| 国产欧美精品一区二区色综合朱莉 | 制服丝袜日韩国产| 免费成人深夜小野草| 久久伊人蜜桃av一区二区| 成人avav影音| 亚洲va国产va欧美va观看| 日韩亚洲欧美成人一区| 国产成人夜色高潮福利影视| 亚洲伦理在线精品| 日韩欧美一区在线观看| 国产成人av在线影院| 亚洲一区在线观看免费| 亚洲视频小说图片| 国产激情视频一区二区三区欧美| 欧美精品一区二区三区蜜桃| 国产一区不卡精品| 成人福利视频在线| 欧美精品一级二级三级| 亚洲欧美国产毛片在线| 色综合久久久网| 国产婷婷色一区二区三区在线| 91性感美女视频| 国产无遮挡一区二区三区毛片日本| 一级日本不卡的影视| 国产午夜精品一区二区三区四区| 天天爽夜夜爽夜夜爽精品视频| 国产.欧美.日韩| 欧美高清在线视频| 国产成人av一区| 精品少妇一区二区三区视频免付费 | 日本中文字幕一区二区视频| 国产激情精品久久久第一区二区 | 欧美久久久久久久久中文字幕| 欧美精品一区二区三区一线天视频| 正在播放亚洲一区| 自拍偷拍国产亚洲| 国产一区二区不卡| 久久夜色精品国产欧美乱极品|