WinForm:DataGridView新增加行


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,新加的行會被自動排序至合適的位置。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM