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

时间:2011-07-13 10:07:52

标签: c# datagridview dataset guid

我的问题:
我有一个DataSet,其中包含多个DataTables。 所有这些DataTables都有DataColumn名为“Id”且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

我尝试了什么:

  • DataGridViewRowsAddedUserAddedRowRowValidatingDefaultValuesNeeded
  • 的这些事件

如果有人能为我提供工作解决方案或提示,那将是非常棒的!

〜克里斯

3 个答案:

答案 0 :(得分:6)

我不确定你为什么说你不能使用DefaultValuesNeeded - 我刚试过这个并且它完美无缺:

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

我将Guid列的visibility属性设置为false,以便它不显示。创建新行时,该行已填充guid。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

我希望使用DefaulValue来简化操作并替换我当前的解决方案,但在阅读完这个帖子之后看起来我不能。

我当前的解决方案是在DataGridView中使用[ID]列(Visible = false),如果在DataGridView RowValidating事件中缺少新GUID,则添加新GUID。

    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 { }
    }