【问题标题】:Auto-populating a DataTable column自动填充 DataTable 列
【发布时间】:2010-10-28 20:41:22
【问题描述】:

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

我已使用

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

但它需要 FormattingEnabled,所以我怀疑这并没有真正起作用(属性仍然很方便,谢天谢地)。我不想洒了

row[UniqueID] = Guid.NewGuid();

我要创建新行的所有语句 - 我宁愿只做一次,然后放心,因为我每次创建新行时都会有一个唯一标识符。

【问题讨论】:

    标签: .net datatable


    【解决方案1】:

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

    请注意,默认值不会从数据库中流出,因此不要依赖默认值为 newid()uniqueidentifier 列 - 这并不意味着 DataTable 中的新行将获得 Guid .NewGuid() 作为它们的默认值。这就是 TableNewRow 的用途。

    【讨论】:

    【解决方案2】:

    虽然我同意 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();
    }
    

    【讨论】:

      【解决方案3】:

      数据库应该是创建新行 ID 的地方。如果您使用的是 SQL Server,您可以创建一个具有 UniqueIndentifier 规范的 Primary Key 列,并且每次添加新记录时,数据库都会自动为其分配一个 Unique Identifier。

      【讨论】:

      • 那很好,除了我需要知道主键是什么,因为我需要使用它并将行放入数据库会触发验证,如果我该行不一定会通过盲目地做。创建自己的唯一标识符对我来说要容易得多。
      【解决方案4】:

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

      为什么不在插入时使用 Guid.NewGuid(),或者使用 List(Of SomeClass) 而不是使用 DataTables,您可以在其中微调类中属性的默认值等内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-04
        • 2011-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-18
        • 2020-06-14
        • 2018-08-11
        相关资源
        最近更新 更多