欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

怎么在C#中利用WinForm對(duì)DataGridView進(jìn)行開(kāi)發(fā)-創(chuàng)新互聯(lián)

本篇文章給大家分享的是有關(guān)怎么在C#中利用WinForm對(duì)DataGridView進(jìn)行開(kāi)發(fā),小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

為雜多等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及雜多網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站制作、網(wǎng)站建設(shè)、雜多網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

基本的數(shù)據(jù)渲染

根據(jù)提供的數(shù)據(jù)展示出效果。


提供給DataGridView數(shù)據(jù)源有很多方式,大致有如下三種:

直接增加,每個(gè)單元格類型都是DataGridViewTextBoxCell

int index=this.dataGridView1.Rows.Add();
this.dataGridView1.Rows[index].Cells[0].Value = "1";
this.dataGridView1.Rows[index].Cells[1].Value = "2";
this.dataGridView1.Rows[index].Cells[2].Value = "3";

直接增加一行,在行上的每天單元格內(nèi)添加數(shù)據(jù),缺點(diǎn)是太單一

直接增加,但我們可以指定單元格類型

DataGridViewRow row = new DataGridViewRow();
DataGridViewTextBoxCell textboxcell = new DataGridViewTextBoxCell();
textboxcell.Value = "aaa";
row.Cells.Add(textboxcell);
DataGridViewComboBoxCell comboxcell = new DataGridViewComboBoxCell();
row.Cells.Add(comboxcell);
dataGridView1.Rows.Add(row);

可選的類型如下圖:

怎么在C#中利用WinForm對(duì)DataGridView進(jìn)行開(kāi)發(fā)

使用vo對(duì)象

上面2種都不是我想要的,因?yàn)榱斜碚故镜臄?shù)據(jù)大部分情況下是復(fù)雜的后臺(tái)回傳的數(shù)據(jù)。所以我建議使用Vo。
新建InfoVo.cs類

public class InfoVo
 {
  /// <summary>
  /// 
  /// </summary>
  public string uidItem { get; set; }
  /// <summary>
  /// 
  /// </summary>
  public string uidItemRevision { get; set; }
  /// <summary>
  /// 
  /// </summary>
  public string primaryTag { get; set; }
 }

構(gòu)造一個(gè)List,將InfoVo放進(jìn)List對(duì)象里,然后將List對(duì)象賦值給dataGridView.DataSource即可。
在窗體的Load事件里添加如下代碼

private void SearchInfo_Load(object sender, EventArgs e)
  {
  	List<InfoVo> list = new List<InfoVo>();
    list.Add(new InfoVo(){ uidItem="1", uidItemRevision ="1", primaryTag ="1"});
    list.Add(new InfoVo(){ uidItem="2", uidItemRevision ="2", primaryTag ="2"});
    dataGridView.AutoGenerateColumns = false;
    dataGridView.DataSource = null;
    dataGridView.DataSource = list;
  }

直接賦值dataGridView.DataSource = list即可。這里的AutoGenerateColumns是禁止dataGridView自動(dòng)根據(jù)vo屬性創(chuàng)建列。

在窗體上選中DataGridView,在屬性面板里點(diǎn)擊Columns選項(xiàng)。如下圖


怎么在C#中利用WinForm對(duì)DataGridView進(jìn)行開(kāi)發(fā)


在打開(kāi)的面板里,我們可以創(chuàng)建列。選擇是否可見(jiàn),設(shè)置抬頭
DataPropertyName:指定列綁定的數(shù)據(jù)源屬性字段。
在DolumnType里我們可以指定單元格類型,如下圖


怎么在C#中利用WinForm對(duì)DataGridView進(jìn)行開(kāi)發(fā)


比如下拉框,或者單元框。
至此,我們可以渲染出DataGridView組件里,下面看一些屬性。

dataGridView

列寬自適應(yīng)

foreach (DataGridViewColumn column in dataGridView.Columns)
 {
  column.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
 }
成員名稱說(shuō)明
NotSet列的大小調(diào)整行為從DataGridView.AutoSizeColumnsMode 屬性繼承。
None列寬不會(huì)自動(dòng)調(diào)整。
AllCells調(diào)整列寬,以適合該列中的所有單元格的內(nèi)容,包括標(biāo)題單元格。
AllCellsExceptHeader調(diào)整列寬,以適合該列中的所有單元格的內(nèi)容,不包括標(biāo)題單元格。
DisplayedCells調(diào)整列寬,以適合當(dāng)前屏幕上顯示的行的列中的所有單元格的內(nèi)容,包括標(biāo)題單元格。
DisplayedCellsExceptHeader調(diào)整列寬,以適合當(dāng)前屏幕上顯示的行的列中的所有單元格的內(nèi)容,不包括標(biāo)題單元格。
ColumnHeader調(diào)整列寬,以適合列標(biāo)題單元格的內(nèi)容。
Fill調(diào)整列寬,使所有列的寬度正好填充控件的顯示區(qū)域,只需要水平滾動(dòng)保證列寬在DataGridViewColumn.MinimumWidth屬性值以上。相對(duì)列寬由相對(duì)DataGridViewColumn.FillWeight屬性值決定。

如果想讓列寬能按比例填充顯示區(qū)域則column.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

禁止縮放單元格大小

2個(gè)屬性

  • AllowUserToResizeColumns:true:禁止縮放列

  • AllowUserToResizeRows:true:禁止縮放行

用戶自定義列的順序

用戶可以拖動(dòng)的方式排序列展示
AllowUserToOrderColumns:true

是否可以編輯單元格

  • 窗體的ReadOnlyfalse

  • 在Columns彈出的列編輯窗口里,選擇列的ReadOnlyfalse

  • SelectionModeRowReadSelect(這是默認(rèn)值)

行頭,列頭不顯示

在屬性面板里選中RowheadersVisible和ColumnHeadersVisible,置為false

列表顯示不完全,必需鼠標(biāo)移到組件上才能顯示的bug

RowheadersVisible置為false即可。

行頭顯示行號(hào)

RowStateChanged事件添加監(jiān)聽(tīng),(在屬性面板右邊閃電圖標(biāo)下找)。

private void dataGridView1_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e)
{
 //顯示在HeaderCell上
 for (int i = 0; i < this.dataGridView1.Rows.Count; i++)
 {
  DataGridViewRow r = this.dataGridView1.Rows[i];
  r.HeaderCell.Value = string.Format("{0}", i + 1);
 }
 this.dataGridView1.Refresh();
}

行號(hào)沒(méi)有完全顯示出來(lái)的解決辦法是將DataGridViewRowHeadersWidthSizeMode屬性設(shè)置為AutoSizeToAllHeaders、AutoSizeToDisplayedHeaders或者AutoSizeToFirstHeader。

禁止自動(dòng)創(chuàng)建列

如果我們提供的vo對(duì)象,dataGrid會(huì)自動(dòng)根據(jù)屬性創(chuàng)建列,這不是我想要的,我希望能控制顯示。如下設(shè)置即可
dataGridView.AutoGenerateColumns = false;

修改單元格類型

單元格可以顯示文件,也可以顯示單元框,下拉框,圖片和超鏈拉。只要在編輯列窗口里選擇ColumnType下拉框,選擇一下即可。當(dāng)然選擇的不同,數(shù)據(jù)設(shè)置不同,比如
單選框DataGridViewCheckBoxColumn如下


怎么在C#中利用WinForm對(duì)DataGridView進(jìn)行開(kāi)發(fā)

下拉框DataGridViewComboBoxColumn


怎么在C#中利用WinForm對(duì)DataGridView進(jìn)行開(kāi)發(fā)

選中模式

可以指定選中是整個(gè)行被選中還是每個(gè)小單元格被選中
SelectionMode,全部可選如下


怎么在C#中利用WinForm對(duì)DataGridView進(jìn)行開(kāi)發(fā)

其它

當(dāng)然還有其它,只要我們熟悉,在屬性面板上幾乎都能找到。

選中事件

CellClick是選中事件,不用它即可,不要用CellContentClick,因?yàn)槿绻麊卧駸o(wú)內(nèi)容,這個(gè)CellContentClick事件不會(huì)觸發(fā)。

取得當(dāng)前單元格內(nèi)容 :DataGridView1.CurrentCell.Value
取得當(dāng)前單元格的列 Index:DataGridView1.CurrentCell.ColumnIndex
取得當(dāng)前單元格的行 Index:DataGridView1.CurrentCell.RowIndex
取得當(dāng)前行:dataGridView.CurrentRow;
獲得綁定的vo

DataGridViewRow dataGridViewRow = dataGridView.CurrentRow;
   InfoVo infoVo = dataGridViewRow.DataBoundItem as InfoVo ;
   infoVo .uidItemRevision ;

如果表格可編輯,那么編輯完表格會(huì)同步更新DataBoundItem綁定的vo對(duì)象

遍歷列表里所有單元格

foreach (DataGridViewRow item in dataGridView.Rows)
   {
     //item是每行的對(duì)象,cells是單元格集合
    if (null != item.Cells[0].Value && (Boolean)item.Cells[0].Value)
    {
			item.Cells[0].Value.toString();
		}
	}

使用 DataGridView.CurrentCellAddress 屬性(而不是直接訪問(wèn)單元格)來(lái)確定單元格所在的
行: DataGridView.CurrentCellAddress.Y
列: DataGridView.CurrentCellAddress.X 。

當(dāng)前的單元格可以通過(guò)設(shè)定 DataGridView 對(duì)象的 CurrentCell 來(lái)改變。可以通過(guò) CurrentCell 來(lái)設(shè)定
DataGridView 的激活單元格。將 CurrentCell 設(shè)為 Nothing(null) 可以取消激活的單元格。

DataGridView DataGridViewCheckBoxColumn編輯時(shí)實(shí)時(shí)觸發(fā)事件

正常響應(yīng)CellValueChanged()事件時(shí),當(dāng)改變checkbox狀態(tài)時(shí),只有當(dāng)焦點(diǎn)離開(kāi)該單元格時(shí)才能觸發(fā)CellValueChanged()事件,

如果要改變checkbox值時(shí)實(shí)時(shí)觸發(fā)CellValueChanged()事件,需要借用CurrentCellDirtyStateChanged()事件來(lái)提交未提交控件的更改。

private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
  {
   if (dataGridView1.IsCurrentCellDirty)
   {
    dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
   }
  }

事實(shí)上,當(dāng)調(diào)用dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);時(shí),就提交了當(dāng)前的修改,很多其它事件都會(huì)有響應(yīng),其中CellValueChanged就是其中之一。
這樣CellValueChanged()事件就可以隨著checkbox的值的改變實(shí)時(shí)觸發(fā)。
以全選/反選為例說(shuō)明當(dāng)DataGridViewCheckBoxColumn發(fā)生變化時(shí)怎么處理全選/反選。
CheckBox有3種狀態(tài):選中(CheckState.Checked)/取消(CheckState.Unchecked)/部分選中(CheckState.Indeterminate)
在winForm組件里拖拽一個(gè)CheckBox命名為selectAllCheckBox,Text為全選,拖拽一個(gè)LinkLabel命名為revSelectLinkLbl,Text為反選。

 //全選
  private void selectAllCheckBox_CheckedChanged(object sender, EventArgs e)
  {
   CheckBox c = sender as CheckBox;
   if(c.CheckState == CheckState.Checked)
   {
    ChangeDataSourceChecked(true);
   }
   else if(c.CheckState == CheckState.Unchecked)
   {
    ChangeDataSourceChecked(false);
   }
  }

  private void ChangeDataSourceChecked(Boolean isSelected)
  {
   foreach (SavePlmBomResponseVo savePlmBomResponseVo in dataSource)
   {
    savePlmBomResponseVo.checkedC = isSelected;
   }
   dataGridView.DataSource = null;
   dataGridView.DataSource = dataSource;
  }
  /// <summary>
  /// 反選
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void revSelectLinkLbl_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
  {
   if (this.selectAllCheckBox.CheckState == CheckState.Checked)
   {
    this.selectAllCheckBox.CheckState = CheckState.Unchecked;
   }
   else if(this.selectAllCheckBox.CheckState == CheckState.Unchecked)
   {
    this.selectAllCheckBox.CheckState = CheckState.Checked;
   }
   else
   {
    //部分選中
    foreach (SavePlmBomResponseVo savePlmBomResponseVo in dataSource)
    {
     if (savePlmBomResponseVo.checkedC)
     {
      savePlmBomResponseVo.checkedC = false;
     }
     else
     {
      savePlmBomResponseVo.checkedC = true;
     }
    }
    dataGridView.DataSource = null;
    dataGridView.DataSource = dataSource;
   }
  }

  /// <summary>
  /// 處理DataSource數(shù)據(jù)變化時(shí),全選/反選選中狀態(tài)
  /// </summary>
  private void calSelectAllCheckBoxState()
  {
   int selectedCount = 0;
   foreach (SavePlmBomResponseVo savePlmBomResponseVo in dataSource)
   {
    if (savePlmBomResponseVo.checkedC)
    {
     ++selectedCount;
    }
   }
   if (selectedCount == 0)
   {
    if(this.selectAllCheckBox.CheckState != CheckState.Unchecked)
    {
     this.selectAllCheckBox.CheckState = CheckState.Unchecked;
    }
   }
   else if (selectedCount == dataSource.Count)
   {
    if (this.selectAllCheckBox.CheckState != CheckState.Checked)
    {
     this.selectAllCheckBox.CheckState = CheckState.Checked;
    }
   }
   else
   {
    if (this.selectAllCheckBox.CheckState != CheckState.Indeterminate)
    {
     this.selectAllCheckBox.CheckState = CheckState.Indeterminate;
    }
   }
  }

  /// <summary>
  /// 提交修改狀態(tài)
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void DataGridView_CurrentCellDirtyStateChanged(object sender, EventArgs e)
  {
   if (this.dataGridView.IsCurrentCellDirty)
   {
    this.dataGridView.CommitEdit(DataGridViewDataErrorContexts.Commit);
   }
  }

  //行值變化
  private void DataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
  {
   calSelectAllCheckBoxState();
  }

以上就是怎么在C#中利用WinForm對(duì)DataGridView進(jìn)行開(kāi)發(fā),小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

文章標(biāo)題:怎么在C#中利用WinForm對(duì)DataGridView進(jìn)行開(kāi)發(fā)-創(chuàng)新互聯(lián)
鏈接分享:http://aaarwkj.com/article18/coigdp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、商城網(wǎng)站、做網(wǎng)站、網(wǎng)站改版、域名注冊(cè)網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
日本韩国欧美一区二区在线| 久草午夜福利视频免费观看| 欧美日韩亚洲中文国产| 啊啊舒服爽用力爱我视频| 白白色手机视频免费看| 欧美日韩久久免费观看| 成年人黄色免费网站在线观看| 久久精品中文字幕人妻| 日本一区二区不卡二区| av午夜精品一区二区| 亚洲精品一品区二品区三| 好吊毛片一区二区三区| 久久精品国产亚洲av蜜点| 亚洲黄色成人免费观看| 麻豆国产传媒片在线观看| 国产成人精品久久一区二区三区| 日韩欧美精品另类在线| 日韩中文字幕视频久久| 男女搞j视频网站免费观看 | 在线青青草视频免费观看| 日韩av天堂在线观看| 肉肉开房天天操夜夜操| 成人18禁h黄在线看免费| 久久91亚洲精品中文字幕| 精品不卡一区二区三区| 亚洲黄色成人在线观看| 国产放荡av剧情精品| 亚洲永久精品天码野外| 夫妻性生活黄色录像视频| 粉嫩av北条麻妃电影| 国产97精品在线播放| 亚洲av天堂在线观看| 一卡二卡三卡四卡日韩| 成年视频免费观看视频| 92国产精品午夜福利| 97视频在线视频免费| 男女真人啪啪视频免费| 99久久成人精品国产片| 国外男女性生活在线视频| 后入视频国产在线观看| 午夜福利视频一区久久久|