如何在创建行时填写DataTable的特定列(例如,uniqueidentifier),以便始终可以假定该列将具有有用的值?
我已经使用
将此列绑定到我的对象上的属性NullValue = Guid.NewGuid()
但它需要FormattingEnabled,所以我怀疑这不是真的有用(属性仍然很方便,谢天谢地)。我不想撒上
row[UniqueID] = Guid.NewGuid();
我到处创建一个新行的语句 - 我更喜欢这样做一次,然后知道每次创建一个新行时,它都会有一个独特的标识符。
答案 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,你可以在这里微调类中属性的默认值。