WinForm:DataGridView新增加行

Rain Man發表於2014-04-13

1.不顯示最下面的新行

通常 DataGridView 的最下面一行是使用者新追加的行(行頭顯示 * )。如果不想讓使用者新追加行即不想顯示該新行,可以將 DataGridView 物件的 AllowUserToAddRows 屬性設定為 False。

DataGridView1.AllowUserToAddRows = false;

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

2. 為生成的新行新增預設值

當使用者選擇“新行”作為當前行,DataGridView會觸發DefaultValuesNeeded事件。在該事件中可以訪問新行,併為其生成預設值,為使用者輸入提供方便。

private void dataGridView1_DefaultValuesNeeded(object sender, DataGridViewRowEventArgs e)
{
    e.Row.Cells["Region"].Value = "WA";
    e.Row.Cells["City"].Value = "Redmond";
    e.Row.Cells["PostalCode"].Value = "98052-6399";
    e.Row.Cells["Region"].Value = "NA";
    e.Row.Cells["Country"].Value = "USA";
    e.Row.Cells["CustomerID"].Value = NewCustomerId();
}

3.在新行中輸入資料

使用者開始在新行輸入資料之前,新行的IsNewRow屬性值為true,即第一次觸發改行的CellEnter和CellBeginEdit事件中IsNewRow事件為Ture。 一旦使用者開始輸入,這一行就不再是新行了,DataGridView中會產生一個“新”的新行,看下面示意圖:

在新增“新”的新行時,會觸發UserAddedRow事件,它的事件處理函式的第二個引數有屬性Row,指定了這個“新”的新行。如果使用者此時按下Escape鍵,“新”的新行會被移除,這會觸發UserDeletingRow事件,它的事件處理函式的第二個引數的屬性Row指定了“新”的新行。

4. 自定義新行的視覺化效果

  • 新行是基於RowTemplate模板建立的,如果沒有指定它的單元格的樣式,它們會採用繼承的樣式。
  • 新行中單元格的初始值是由每個單元格的DefaultNewRowValue屬性決定的。對於DataGridViewImageCell型別的單元格,其初始值為一個佔點陣圖片,其它型別的則為null。你可以重 寫這個屬性以返回自定義值。但也可以在DefaultValuesNeeded事件處理函式中對預設值進行替換,該事件在焦點進入新行時觸發。
  • 新行標題的標準圖示是箭頭或者星號,並沒有得到暴露。如果你要自定義這個圖示,就需要創 建一個自定義的DataGridViewRowHeaderCell 類。
  • 新行的標題的標準圖示使用標題單元格DataGridViewCellStyle的ForeColor屬性。注意:如果沒有足夠的空間,圖示就不會再顯示。
  • 如果為標題單元格設定了字串值(通過Value屬性),但沒有足夠的控制元件同時顯示文字和圖示,那麼圖示會被首先截掉。

5. 新行的排序

  • 在非繫結模式下,新行總是新增在DataGridView的最後一行,即使已經對資料排序。使用者需要在新增新行後會“自動”再次進行排序,以將新記錄放在合適的位置;這種行為方式類似於ListView控制元件。
  • 在繫結模式或虛擬模式(Virtual Mode)下,如果已對資料排序,那麼插入資料時的行為取決於資料模型的實現方式。對於ADO.NET,新加的行會被自動排序至合適的位置。

相關文章