2009-05-26 100 views
2

如何在創建行時填寫DataTable的特定列(例如uniqueidentifier),以便始終可以假定該列將具有有用的值?自動填充DataTable列

我有此列綁定到財產礦井的對象上

NullValue = Guid.NewGuid() 

,但它需要FormattingEnabled,所以我懷疑這是不是真的工作(財產的仍然得心應手,謝天謝地)。我不希望有灑

row[UniqueID] = Guid.NewGuid(); 

語句隨處可見我創建一個新的行 - 我寧願做一次,然後高枕無憂知道,每次我創建一個新的行,它」將有一個獨特的標識符。

回答

3

您應該捕獲DataTable上的TableNewRow事件,每次使用NewRow()方法創建新的DataRow時會觸發該事件。在事件處理程序中,您可以預填充所有需要具有「默認」值的列。

請注意,默認值不會從數據庫中流過,因此不要依賴uniqueidentifier列的默認值爲newid() - 這並不意味着您的DataTable中的新行將獲得Guid.NewGuid( )作爲它們的默認值。這就是TableNewRow的用途。

+0

恰恰是我以後!謝謝。 – Merus 2009-05-26 03:50:57

0

數據庫應該是創建新行ID的地方。如果您正在使用SQL Server,則可以使用UniqueIndentifier規範創建主鍵列,並且每次添加新記錄時,數據庫都會自動爲其分配唯一標識符。

+0

這會是不錯的,但我需要知道主鍵是什麼,因爲我需要使用它,並把行插入到數據庫觸發器驗證該行如果我盲目地做,它不一定會通過。我創建自己的唯一標識符要容易得多。 – Merus 2009-05-26 03:50:53

0

您可以使用DataColumn.DefaultValue作爲seed和increment的整數,但不能用於NewGuid(),因爲所有的值都是相同的。

爲什麼不在插入時使用Guid.NewGuid(),或者不是使用DataTables,而是使用List(Of SomeClass),您可以在其中細調類中屬性的默認值。

1

儘管我同意Robert的觀點,數據庫應該在哪裏指定默認值,但是完全可以將DataTable用於不同的目的,可能作爲數據存儲?無論如何,據我所知,你的DataTable應該有一個TableNewRow事件。剛搞定,並添加您的GUID這樣:

DataTable myTable = new DataTable(); 
myTable.TableNewRow = myTable_TableNewRow; 

// ... 

private void myTable_TableNewRow(object sender, DataTableNewRowEventArgs e) 
{ 
    e.Row[k] = Guid.NewGuid(); 
}