C#中dataGridView用法實例分析

SqlConnectionconn=newSqlConnection("Server=(local);DataBase=test;User=sa;Pwd=sa");

  SqlDataAdapterda=newSqlDataAdapter("select*fromtest",conn);

  DataSetds=newDataSet();

  da.Fill(ds);

  dataGridView1.DataSource=ds.Tables[0];

  ①DataGridView取得或者修改當前單元格的內容:

  當前單元格指的是DataGridView焦點所在的單元格,它可以通過DataGridView對象的CurrentCell屬性取得。如果當前單元格不存在的時候,返回Nothing(C#是null)

  //取得當前單元格內容

  Console.WriteLine(DataGridView1.CurrentCell.Value);

  //取得當前單元格的列Index

  Console.WriteLine(DataGridView1.CurrentCell.ColumnIndex);

  //取得當前單元格的行Index

  Console.WriteLine(DataGridView1.CurrentCell.RowIndex);

  另外,使用DataGridView.CurrentCellAddress屬性(而不是直接訪問單元格)來確定單元格所在的行:DataGridView.CurrentCellAddress.Y和列:DataGridView.CurrentCellAddress.X。這對於避免取消共享行的共享非常有用。

  當前的單元格可以通過設定DataGridView對象的CurrentCell來改變。可以通過CurrentCell來設定

  DataGridView的激活單元格。將CurrentCell設爲Nothing(null)可以取消激活的單元格。

  //設定(0,0)爲當前單元格

  DataGridView1.CurrentCell=DataGridView1[0,0];

  在整行選中模式開啓時,你也可以通過CurrentCell來設定選定行。

  ///<summary>

  ///向下遍歷

  ///</summary>

  ///<paramname="sender"></param>

  ///<paramname="e"></param>

  privatevoidbutton4_Click(objectsender,EventArgse)

  ...{

  introw=this.dataGridView1.CurrentRow.Index+1;

  if(row>this.dataGridView1.RowCount-1)

  row=0;

  this.dataGridView1.CurrentCell=this.dataGridView1[0,row];

  }

  ///<summary>

  ///向上遍歷

  ///</summary>

  ///<paramname="sender"></param>

  ///<paramname="e"></param>

  privatevoidbutton5_Click(objectsender,EventArgse)

  ...{

  introw=this.dataGridView1.CurrentRow.Index-1;

  if(row<0)

  row=this.dataGridView1.RowCount-1;

  this.dataGridView1.CurrentCell=this.dataGridView1[0,row];

  }

  *注意:this.dataGridView的索引器的參數是:columnIndex,rowIndex或是columnName,rowIndex

  這與習慣不同。

  ②DataGridView設定單元格只讀:

  1)使用ReadOnly屬性

  如果希望,DataGridView內所有單元格都不可編輯,那麼只要:

  [C#]

  //設置DataGridView1爲只讀

  DataGridView1.ReadOnly=true;

  此時,用戶的新增行操作和刪除行操作也被屏蔽了。

  如果希望,DataGridView內某個單元格不可編輯,那麼只要:

  [C#]

  //設置DataGridView1的第2列整列單元格爲只讀

  DataGridView1.Columns[1].ReadOnly=true;

  //設置DataGridView1的第3行整行單元格爲只讀

  DataGridView1.Rows[2].ReadOnly=true;

  //設置DataGridView1的[0,0]單元格爲只讀

  DataGridView1[0,0].ReadOnly=true;

  2)使用EditMode屬性

  DataGridView.EditMode屬性被設置爲DataGridViewEditMode.EditProgrammatically時,用戶就不能手動編輯單元格的內容了。但是可以通過程序,調用DataGridView.BeginEdit方法,使單元格進入編輯模式進行編輯。

  [C#]

  DataGridView1.EditMode=DataGridViewEditMode.EditProgrammatically;

  3)根據條件設定單元格的不可編輯狀態

  當一個一個的通過單元格座標設定單元格ReadOnly屬性的方法太麻煩的時候,你可以通過CellBeginEdit事件來取消單元格的編輯。

  [C#]

  //CellBeginEdit事件處理方法

  privatevoidDataGridView1_CellBeginEdit(objectsender,

  DataGridViewCellCancelEventArgse)

  {

  DataGridViewdgv=(DataGridView)sender;

  //是否可以進行編輯的條件檢查

  if(dgv.Columns[e.ColumnIndex].Name=="Column1"&&

  !(bool)dgv["Column2",e.RowIndex].Value)

  {

  //取消編輯

  e.Cancel=true;

  }

  }

  ③DataGridView不顯示最下面的新行:

  通常DataGridView的最下面一行是用戶新追加的行(行頭顯示*)。如果不想讓用戶新追加行即不想顯示該新行,可以將DataGridView對象的AllowUserToAddRows屬性設置爲False。

  [C#]

  //設置用戶不能手動給DataGridView1添加新行

  DataGridView1.AllowUserToAddRows=false;

  但是,可以通過程序:DataGridViewRowCollection.Add爲DataGridView追加新行。

  補足:如果DataGridView的DataSource綁定的是DataView,還可以通過設置DataView.AllowAdd

  屬性爲False來達到同樣的效果。

  ④DataGridView判斷新增行:

  DataGridView的AllowUserToAddRows屬性爲True時也就是允許用戶追加新行的場合下,DataGridView的最後一行就是新追加的行(*行)。使用DataGridViewRow.IsNewRow屬性可以判斷哪一行是新追加的行。另外,通過DataGridView.NewRowIndex可以獲取新行的行序列號。在沒有新行的時候,NewRowIndex=-1。

  ⑤DataGridView行的用戶刪除操作的自定義:

  1)無條件的限制行刪除操作。

  默認時,DataGridView是允許用戶進行行的刪除操作的。如果設置DataGridView對象的AllowUserToDeleteRows屬性爲False時,用戶的行刪除操作就被禁止了。

  [C#]

  //禁止DataGridView1的行刪除操作。

  DataGridView1.AllowUserToDeleteRows=false;

  但是,通過DataGridViewRowCollection.Remove還是可以進行行的刪除。

  補足:如果DataGridView綁定的是DataView的話,通過DataView.AllowDelete也可以控制行的刪除。

  2)行刪除時的條件判斷處理。

  用戶在刪除行的時候,將會引發DataGridView.UserDeletingRow事件。在這個事件裏,可以判斷條件並取消刪除操作。

  [C#]

  //DataGridView1的UserDeletingRow事件

  privatevoidDataGridView1_UserDeletingRow(

  objectsender,DataGridViewRowCancelEventArgse)

  {

  //刪除前的用戶確認。

  if(MessageBox.Show("確認要刪除該行數據嗎?","刪除確認",

  MessageBoxButtons.OKCancel,

  MessageBoxIcon.Question)!=DialogResult.OK)

  {

  //如果不是OK,則取消。

  e.Cancel=true;

  }

  }

  ⑥DataGridView行、列的隱藏和刪除:

  1)行、列的隱藏

  [C#]

  //DataGridView1的第一列隱藏

  DataGridView1.Columns[0].Visible=false;

  //DataGridView1的第一行隱藏

  DataGridView1.Rows[0].Visible=false;

  2)行頭、列頭的隱藏

  [C#]

  //列頭隱藏

  DataGridView1.ColumnHeadersVisible=false;

  //行頭隱藏

  DataGridView1.RowHeadersVisible=false;

  3)行和列的刪除

  [C#]

  '刪除名爲"Column1"的列

  DataGridView1.Columns.Remove("Column1");

  '刪除第一列

  DataGridView1.Columns.RemoveAt(0);

  '刪除第一行

  DataGridView1.Rows.RemoveAt(0);

  4)刪除選中行

  [C#]

  foreach(DataGridViewRowrinDataGridView1.SelectedRows)

  {

  if(!r.IsNewRow)

  {

  DataGridView1.Rows.Remove(r);

  }

  }

  ⑦DataGridView禁止列或者行的Resize:

  1)禁止所有的列或者行的Resize

  [C#]

  //禁止用戶改變DataGridView1的所有列的列寬

  DataGridView1.AllowUserToResizeColumns=false;

  //禁止用戶改變DataGridView1の所有行的行高

  DataGridView1.AllowUserToResizeRows=false;

  但是可以通過DataGridViewColumn.Width或者DataGridViewRow.Height屬性設定列寬和行高。

  2)禁止指定行或者列的Resize

  [C#]

  //禁止用戶改變DataGridView1的第一列的列寬

  DataGridView1.Columns[0].Resizable=DataGridViewTriState.False;

  //禁止用戶改變DataGridView1的第一列的行寬

  DataGridView1.Rows[0].Resizable=DataGridViewTriState.False;

  &S658;關於NoSet

  當Resizable屬性設爲DataGridViewTriState.NotSet時,實際上會默認以DataGridView的AllowUserToResizeColumns和AllowUserToResizeRows的屬性值進行設定。比如:DataGridView.AllowUserToResizeColumns=False且Resizable是NoSet設定時,Resizable=False。

  判斷Resizable是否是繼承設定了DataGridView的AllowUserToResizeColumns和AllowUserToResizeRows的屬性值,可以根據State屬性判斷。如果State屬性含有ResizableSet,那麼說明沒有繼承設定。

  3)列寬和行高的最小值的設定

  [C#]

  //第一列的最小列寬設定爲100

  DataGridView1.Columns[0].MinimumWidth=100;

  //第一行的最小行高設定爲50

  DataGridView1.Rows[0].MinimumHeight=50;

  4)禁止用戶改變行頭的寬度以及列頭的高度

  [C#]

  //禁止用戶改變列頭的高度

  DataGridView1.ColumnHeadersHeightSizeMode=

  DataGridViewColumnHeadersHeightSizeMode.DisableResizing;

  //禁止用戶改變行頭的寬度

  DataGridView1.RowHeadersWidthSizeMode=

  DataGridViewRowHeadersWidthSizeMode.EnableResizing;

  ⑧DataGridView列寬和行高自動調整的設定:

  1)設定行高和列寬自動調整

  [C#]

  //設定包括Header和所有單元格的列寬自動調整

  DataGridView1.AutoSizeColumnsMode=DataGridViewAutoSizeColumnsMode.AllCells;

  //設定包括Header和所有單元格的行高自動調整

  DataGridView1.AutoSizeRowsMode=DataGridViewAutoSizeRowsMode.AllCells;

  AutoSizeColumnsMode屬性的設定值枚舉請參照msdn的DataGridViewAutoSizeRowsMode說明。

  2)指定列或行自動調整

  [C#]

  //第一列自動調整

  DataGridView1.Columns[0].AutoSizeMode=

  DataGridViewAutoSizeColumnMode.DisplayedCells;

  AutoSizeMode設定爲NotSet時,默認繼承的是DataGridView.AutoSizeColumnsMode屬性。

  3)設定列頭的高度和行頭的寬度自動調整

  [C#]

  //設定列頭的寬度可以自由調整

  DataGridView1.ColumnHeadersHeightSizeMode=

  DataGridViewColumnHeadersHeightSizeMode.AutoSize;

  //設定行頭的寬度可以自由調整

  DataGridView1.RowHeadersWidthSizeMode=

  DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;

  4)隨時自動調整

  a,臨時的,讓列寬自動調整,這和指定AutoSizeColumnsMode屬性一樣。

  [C#]

  //讓DataGridView1的所有列寬自動調整一下。

  DataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);

  //讓DataGridView1的第一列的列寬自動調整一下。

  DataGridView1.AutoResizeColumn(0,DataGridViewAutoSizeColumnMode.AllCells);

  上面調用的AutoResizeColumns和AutoResizeColumn當指定的是DataGridViewAutoSizeColumnMode.AllCells的時候,參數可以省略。即:

  DataGridView1.AutoResizeColumn(0)和DataGridView1.AutoResizeColumns()

  b,臨時的,讓行高自動調整

  [C#]

  //讓DataGridView1的所有行高自動調整一下。

  DataGridView1.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCells);

  //讓DataGridView1的第一行的行高自動調整一下。

  DataGridView1.AutoResizeRow(0,DataGridViewAutoSizeRowMode.AllCells);

  上面調用的AutoResizeRows和AutoResizeRow當指定的是DataGridViewAutoSizeRowMode.AllCells的時候,參數可以省略。即:DataGridView1.AutoResizeRow(0)和DataGridView1.AutoResizeRows()

  c,臨時的,讓行頭和列頭自動調整

  關於性能:

  通過AutoSizeColumnsMode或者AutoSizeRowsMode屬性所指定的單元格進行自動調整時,如果調整次數過於多那麼將可能導致性能下降,尤其是在行和列數比較多的情況下。在這時用DisplayedCells代替AllCells能減少非所見的單元格的調整,從而提高性能。

  [C#]

  //列頭高度自動調整

  DataGridView1.AutoResizeColumnHeadersHeight();

  //行頭寬度自動調整

  DataGridView1.AutoResizeRowHeadersWidth(

  DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders);

  ⑨DataGridView凍結列或行

  1)列凍結

  DataGridViewColumn.Frozen屬性爲True時,該列左側的所有列被固定,橫向滾動時固定列不隨滾動條滾動而左右移動。這對於重要列固定顯示很有用。[C#]

  //DataGridView1的左側2列固定

  DataGridView1.Columns[1].Frozen=true;

  但是,DataGridView.AllowUserToOrderColumns=True時,固定列不能移動到非固定列,反之亦然。

  2)行凍結

  DataGridViewRow.Frozen屬性爲True時,該行上面的所有行被固定,縱向滾動時固定行不隨滾動條滾動而上下移動。

  [C#]

  //DataGridView1的上3行固定

  DataGridView1.Rows[2].Frozen=true;

  ⑩DataGridView列順序的調整

  設定DataGridView的AllowUserToOrderColumns爲True的時候,用戶可以自由調整列的順序。

  當用戶改變列的順序的時候,其本身的Index不會改變,但是DisplayIndex改變了。你也可以通過程序改變DisplayIndex來改變列的順序。列順序發生改變時會引發ColumnDisplayIndexChanged事件:

  [C#]

  //DataGridView1的ColumnDisplayIndexChanged事件處理方法

  privatevoidDataGridView1_ColumnDisplayIndexChanged(objectsender,

  DataGridViewColumnEventArgse)

  {

  Console.WriteLine("{0}的位置改變到{1}",

  e.Column.Name,e.Column.DisplayIndex);

  }

  DataGridView行頭列頭的單元格

  [C#]

  //改變DataGridView1的第一列列頭內容

  DataGridView1.Columns[0].HeaderCell.Value="第一列";

  //改變DataGridView1的第一行行頭內容

  DataGridView1.Rows[0].HeaderCell.Value="第一行";

  //改變DataGridView1的左上頭部單元內容

  DataGridView1.TopLeftHeaderCell.Value="左上";

  另外你也可以通過HeaderText來改變他們的內容。

  [C#]

  //改變DataGridView1的第一列列頭內容

  DataGridView1.Columns[0].HeaderText="第一列";

  DataGridView剪切板的操作

  DataGridView.ClipboardCopyMode屬性被設定爲DataGridViewClipboardCopyMode.Disable以外的情況時,「Ctrl+C」按下的時候,被選擇的單元格的內容會拷貝到系統剪切板內。格式有:Text,UnicodeText,Html,CommaSeparatedValue。可以直接粘貼到Excel內。

  ClipboardCopyMode還可以設定Header部分是否拷貝:EnableAlwaysIncludeHeaderText拷貝Header部分、EnableWithoutHeaderText則不拷貝。默認是EnableWithAutoHeaderText,Header如果選擇了的話,就拷貝。

  1)編程方式實現剪切板的拷貝

  Clipboard.SetDataObject(DataGridView1.GetClipboardContent())

  2)DataGridView的數據粘貼

  實現剪切板的拷貝比較容易,但是實現DataGridView的直接粘貼就比較難了。「Ctrl+V」按下進行粘貼時,DataGridView沒有提供方法,只能自己實現。

  以下,是粘貼時簡單的事例代碼,將拷貝數據粘貼到以選擇單元格開始的區域內。

  [C#]

  //當前單元格是否選擇的判斷

  if(DataGridView1.CurrentCell==null)

  return;

  intinsertRowIndex=DataGridView1.CurrentCell.RowIndex;

  //獲取剪切板的內容,並按行分割

  stringpasteText=Clipboard.GetText();

  if(string.IsNullOrEmpty(pasteText))

  return;

  pasteText=pasteText.Replace("","");

  pasteText=pasteText.Replace('','');

  pasteText.TrimEnd(newchar[]{''});

  string[]lines=pasteText.Split('');

  boolisHeader=true;

  foreach(stringlineinlines)

  {

  //是否是列頭

  if(isHeader)

  {

  isHeader=false;

  continue;

  }

  //按Tab分割數據

  string[]vals=line.Split('');

  //判斷列數是否統一

  if(vals.Length-1!=DataGridView1.ColumnCount)

  thrownewApplicationException("粘貼的列數不正確。");

  DataGridViewRowrow=DataGridView1.Rows[insertRowIndex];

  //行頭設定

  row.HeaderCell.Value=vals[0];

  //單元格內容設定

  for(inti=0;i<row.Cells.Count;i++)

  {

  row.Cells[i].Value=vals[i+1];

  }

  //DataGridView的行索引+1

  insertRowIndex++;

  }
  DataGridView單元格的ToolTip的設置
  DataGridView.ShowCellToolTips=True的情況下,單元格的ToolTip可以表示出來。對於單元格窄小,無法完全顯示的單元格,ToolTip可以顯示必要的信息。
  1)設定單元格的ToolTip內容
  [C#]
  //設定單元格的ToolTip內容
  DataGridView1[0,0].ToolTipText="該單元格的內容不能修改";
  //設定列頭的單元格的ToolTip內容
  DataGridView1.Columns[0].ToolTipText="該列只能輸入數字";
  //設定行頭的單元格的ToolTip內容
  DataGridView1.Rows[0].HeaderCell.ToolTipText="該行單元格內容不能修改";
  2)CellToolTipTextNeeded事件
  在批量的單元格的ToolTip設定的時候,一個一個指定那麼設定的效率比較低,這時候可以利用CellToolTipTextNeeded事件。當單元格的ToolTipText變化的時候也會引發該事件。但是,當DataGridView的DataSource被指定且VirualMode=True的時候,該事件不會被引發。
  [C#]
  //CellToolTipTextNeeded事件處理方法
  privatevoidDataGridView1_CellToolTipTextNeeded(objectsender,
  DataGridViewCellToolTipTextNeededEventArgse)
  {
  e.ToolTipText=e.ColumnIndex.ToString()+","+e.RowIndex.ToString();
  }
  DataGridView的右鍵菜單(ContextMenuStrip)
  DataGridView,DataGridViewColumn,DataGridViewRow,DataGridViewCell有ContextMenuStrip屬性。可以通過設定ContextMenuStrip對象來控制DataGridView的右鍵菜單的顯示。DataGridViewColumn的ContextMenuStrip屬性設定了除了列頭以外的單元格的右鍵菜單。DataGridViewRow的ContextMenuStrip屬性設定了除了行頭以外的單元格的右鍵菜單。DataGridViewCell的ContextMenuStrip屬性設定了指定單元格的右鍵菜單。[C#]
  //DataGridView的ContextMenuStrip設定
  DataGridView1.ContextMenuStrip=this.ContextMenuStrip1;
  //列的ContextMenuStrip設定
  DataGridView1.Columns[0].ContextMenuStrip=this.ContextMenuStrip2;
  //列頭的ContextMenuStrip設定
  DataGridView1.Columns[0].HeaderCell.ContextMenuStrip=this.ContextMenuStrip2;
  //行的ContextMenuStrip設定
  DataGridView1.Rows[0].ContextMenuStrip=this.ContextMenuStrip3;
  //單元格的ContextMenuStrip設定
  DataGridView1[0,0].ContextMenuStrip=this.ContextMenuStrip4;
  對於單元格上的右鍵菜單的設定,優先順序是:Cell>Row>Column>DataGridView
  CellContextMenuStripNeeded、RowContextMenuStripNeeded事件
  利用CellContextMenuStripNeeded事件可以設定單元格的右鍵菜單,尤其但需要右鍵菜單根據單元格值的變化而變化的時候。比起使用循環遍歷,使用該事件來設定右鍵菜單的效率更高。但是,在DataGridView使用了DataSource綁定而且是VirtualMode的時候,該事件將不被引發。
  [C#]
  //CellContextMenuStripNeeded事件處理方法
  privatevoidDataGridView1_CellContextMenuStripNeeded(objectsender,
  DataGridViewCellContextMenuStripNeededEventArgse)
  {
  DataGridViewdgv=(DataGridView)sender;
  if(e.RowIndex<0)
  {
  //列頭的ContextMenuStrip設定
  e.ContextMenuStrip=this.ContextMenuStrip1;
  }
  elseif(e.ColumnIndex<0)
  {
  //行頭的ContextMenuStrip設定
   e.ContextMenuStrip=this.ContextMenuStrip2;
  }
  elseif(dgv[e.ColumnIndex,e.RowIndex].Valueisint)
  {
  //如果單元格值是整數時
  e.ContextMenuStrip=this.ContextMenuStrip3;
  }
  }
  同樣,可以通過RowContextMenuStripNeeded事件來設定行的右鍵菜單。
  [C#]
  //RowContextMenuStripNeeded事件處理方法
  privatevoidDataGridView1_RowContextMenuStripNeeded(objectsender,
  DataGridViewRowContextMenuStripNeededEventArgse)
  {
  DataGridViewdgv=(DataGridView)sender;
  //當"Column1"列是Bool型且爲True時、設定其的ContextMenuStrip
  objectboolVal=dgv["Column1",e.RowIndex].Value;
  Console.WriteLine(boolVal);
  if(boolValisbool&&(bool)boolVal)
  {
  e.ContextMenuStrip=this.ContextMenuStrip1;
   }
  }
  CellContextMenuStripNeeded事件處理方法的參數中、「e.ColumnIndex=-1」表示行頭、「e.RowIndex=-1」表示列頭。RowContextMenuStripNeeded則不存在「e.RowIndex=-1」的情況。
  DataGridView的單元格的邊框、網格線樣式的設定
  1)DataGridView的邊框線樣式的設定
  DataGridView的邊框線的樣式是通過DataGridView.BorderStyle屬性來設定的。BorderStyle屬性設定值是一個
  BorderStyle枚舉:FixedSingle(單線,默認)、Fixed3D、None。
  2)單元格的邊框線樣式的設定
  單元格的邊框線的樣式是通過DataGridView.CellBorderStyle屬性來設定的。CellBorderStyle屬性設定值是
  DataGridViewCellBorderStyle枚舉。(詳細參見MSDN)
  另外,通過DataGridView.ColumnHeadersBorderStyle和RowHeadersBorderStyle屬性可以修改DataGridView的頭部的單元格邊框線樣式。屬性設定值是DataGridViewHeaderBorderStyle枚舉。(詳細參見MSDN)
  3)單元格的邊框顏色的設定
  單元格的邊框線的顏色可以通過DataGridView.GridColor屬性來設定的。默認是ControlDarkDark。但是只有在CellBorderStyle被設定爲Single、SingleHorizontal、SingleVertical的條件下才能改變其邊框線的顏色。同樣,ColumnHeadersBorderStyle以及RowHeadersBorderStyle只有在被設定爲Single時,才能改變顏色。
  4)單元格的上下左右的邊框線式樣的單獨設定
  CellBorderStyle只能設定單元格全部邊框線的式樣。要單獨改變單元格某一邊邊框式樣的話,需要用到DataGridView.AdvancedCellBorderStyle屬性。如示例:
  同樣,設定行頭單元格的屬性是:AdvancedRowHeadersBorderStyle,設定列頭單元格屬性是:AdvancedColumnHeadersBorderStyle。
  &e327;DataGridView單元格表示值的自定義
  通過CellFormatting事件,可以自定義單元格的表示值。(比如:值爲Error的時候,單元格被設定爲紅色)
  下面的示例:將“Colmn1”列的值改爲大寫。
  [C#]
  //CellFormatting事件處理方法
  privatevoidDataGridView1_CellFormatting(objectsender,
  DataGridViewCellFormattingEventArgse)
  {
  DataGridViewdgv=(DataGridView)sender;
  //如果單元格是“Column1”列的單元格
  if(dgv.Columns[e.ColumnIndex].Name=="Column1"&&e.Valueisstring)
  {
  //將單元格值改爲大寫
  stringstr=e.Value.ToString();
  e.Value=str.ToUpper();
  //應用該Format,Format完畢。
  e.FormattingApplied=true;
  }
  }
    CellFormatting事件的DataGridViewCellFormattingEventArgs對象的Value屬性一開始保存着未被格式化的值。當Value屬性被設定表示用的文本之後,把FormattingApplied屬性做爲True,告知DataGridView文本已經格式化完畢。如果不這樣做的話,DataGridView會根據已經設定的Format,NullValue,DataSourceNullValue,FormatProvider屬性會將Value屬性會被重新格式化一遍。
  &e328;DataGridView用戶輸入時,單元格輸入值的設定
  通過DataGridView.CellParsing事件可以設定用戶輸入的值。下面的示例:當輸入英文文本內容的時候,立即被改變爲大寫。
  [C#]
  //CellParsing事件處理方法
  privatevoidDataGridView1_CellParsing(objectsender,
  DataGridViewCellParsingEventArgse)
  {
   DataGridViewdgv=(DataGridView)sender;
  //單元格列爲“Column1”時
  if(dgv.Columns[e.ColumnIndex].Name=="Column1"&&
  e.DesiredType==typeof(string))
  {
  //將單元格值設爲大寫
  e.Value=e.Value.ToString().ToUpper();
  //解析完畢
   e.ParsingApplied=true;
  }
  }
  DataGridView新加行的默認值的設定
  需要指定新加行的默認值的時候,可以在DataGridView.DefaultValuesNeeded事件裏處理。在該事件中處理除了可以設定默認值以外,還可以指定某些特定的單元格的ReadOnly屬性等。
  [C#]
  //DefaultValuesNeeded事件處理方法
  privatevoidDataGridView1_DefaultValuesNeeded(objectsender,
  DataGridViewRowEventArgse)
  {
  //設定單元格的默認值
  e.Row.Cells["Column1"].Value=0;
  e.Row.Cells["Column2"].Value="-";

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章