自动填充DataTable列

时间:2009-05-26 02:03:00

标签: .net datatable

如何在创建行时填写DataTable的特定列(例如,uniqueidentifier),以便始终可以假定该列将具有有用的值?

我已经使用

将此列绑定到我的对象上的属性
NullValue = Guid.NewGuid() 

但它需要FormattingEnabled,所以我怀疑这不是真的有用(属性仍然很方便,谢天谢地)。我不想撒上

row[UniqueID] = Guid.NewGuid();

我到处创建一个新行的语句 - 我更喜欢这样做一次,然后知道每次创建一个新行时,它都会有一个独特的标识符。

4 个答案:

答案 0 :(得分:3)

您应该捕获DataTable上的TableNewRow事件,每次使用NewRow()方法创建新的DataRow时都会触发该事件。在事件处理程序中,您可以预先填充需要具有“默认”值的所有列。

请注意,默认值不会从数据库中流过,因此不要依赖默认值为uniqueidentifier的{​​{1}}列 - 这并不意味着您的新行DataTable将获取Guid.NewGuid()作为其默认值。这就是TableNewRow的用途。

答案 1 :(得分: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();
}

答案 2 :(得分:0)

数据库应该是创建新行ID的位置。如果您使用的是SQL Server,则可以创建具有UniqueIndentifier规范的主键列,每次添加新记录时,数据库都会自动为其分配唯一标识符。

答案 3 :(得分:0)

您可以将DataColumn.DefaultValue用于带种子和增量的整数,但不能使用NewGuid(),因为所有值都是相同的。

为什么不在插入时使用Guid.NewGuid(),或者使用List(Of SomeClass)代替使用DataTables,你可以在这里微调类中属性的默认值。