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="-";