c# dataccolumn:生成一个新的GUID作为默认值

本文关键字:一个 GUID 默认值 dataccolumn | 更新日期: 2023-09-27 18:02:10

我的问题:
我有一个DataSet,里面有多个DataTables。所有这些DataTables都有一个名为"Id"的DataColumn, DataTypeSystem.Guid

这样一个表的简短示例:

+--------------------+
| User               |
+--------------------+
| *Id as System.Guid |
| Username as String |
| /* more columns */ |
+--------------------+

我把这个DataTable分配给了一个DataGridViewDataGridView被配置为允许创建、编辑和删除条目。

当用户现在创建一个新条目并保存它时,有一个例外,即"Id"未设置。

我的问题:
如何为新条目自动生成新的System.Guid ?

我现在的想法:

  • 指定dataSet.dataTable.Columns['Id'].DefaulValue中的魔法值。(类似于<DBNull>)
  • dataSet.dataTable上使用类似触发器的东西来监听新行。它必须在行得到验证之前执行
  • 与触发器相同,但在dataGridView上。

我试过了:

  • DataGridView的事件:RowsAdded, UserAddedRow, RowValidating, DefaultValuesNeeded

如果有人能给我一个有效的解决方案或提示,那就太棒了!

克里斯

~

c# dataccolumn:生成一个新的GUID作为默认值

我不知道为什么你说你不能使用DefaultValuesNeeded -我刚刚测试了这个,它工作得很好:

void dataGridView1_DefaultValuesNeeded(object sender, DataGridViewRowEventArgs e)
{
    e.Row.Cells["Guid"].Value = Guid.NewGuid();
}

我将Guid列的visibility属性设置为false,这样它就不显示了。当创建新行时,该行将填充一个guid。

是的,只需使用适当的事件并将GUID值添加到正确的列。如果该列对用户可见,则可以在用户单击新行的其中一个单元格时添加该列。也许RowsAdded事件可以完成这项工作

http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.rowsadded.aspx

我希望使用DefaulValue来简化事情并取代我当前的解决方案,但在阅读此线程后,看起来我不能。

我目前的解决方案是在DataGridView(可见= false)中有[ID]列,并添加新的GUID,如果它在DataGridView rowvalidation事件上缺失。

    private void dataGridView1_RowValidating(object sender, DataGridViewCellCancelEventArgs e)
    {
        try
        {
            //If ID is empty create a new GUID
            Guid guidID = Guid.NewGuid();
            if (this.dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString() == "")
                this.dataGridView1.Rows[e.RowIndex].Cells[2].Value = guidID;
        }
        catch { }
    }