Автоматическое заполнение столбца DataTable - PullRequest
2 голосов
/ 26 мая 2009

Как вы заполняете определенный столбец DataTable (скажем, uniqueidentifier) ​​при создании строки, чтобы вы всегда могли предположить, что столбец будет иметь полезное значение?

Этот столбец привязан к свойству объекта с

NullValue = Guid.NewGuid() 

но для этого требуется FormattingEnabled, и поэтому я подозреваю, что это на самом деле не работает (свойство, к счастью, все еще удобно). Я не хочу, чтобы окропить

row[UniqueID] = Guid.NewGuid();

операторов везде Я создаю новую строку - я бы предпочел сделать это один раз, а потом спокойно, зная, что каждый раз, когда я создаю новую строку, у нее будет уникальный идентификатор.

Ответы [ 4 ]

3 голосов
/ 26 мая 2009

Вам нужно перехватить событие TableNewRow в DataTable, которое вызывается каждый раз, когда вы создаете новый DataRow с помощью метода NewRow (). В обработчике событий вы можете предварительно заполнить все столбцы, которые вам нужны, чтобы иметь значения по умолчанию.

Обратите внимание, что значения по умолчанию не поступают из базы данных, поэтому не полагайтесь на столбец uniqueidentifier со значением по умолчанию newid() - это не означает, что новые строки в вашей DataTable получат Guid .NewGuid () в качестве значений по умолчанию. Вот для чего нужен TableNewRow.

1 голос
/ 26 мая 2009

Хотя я согласен с Робертом, что в базе данных должны быть указаны значения по умолчанию, вполне возможно, что вы используете DataTable для других целей, возможно, в качестве хранилища данных? В любом случае, насколько мне известно, в вашей DataTable должно быть событие TableNewRow. Просто обработайте это и добавьте свой гид следующим образом:

DataTable myTable = new DataTable();
myTable.TableNewRow = myTable_TableNewRow;

// ...

private void myTable_TableNewRow(object sender, DataTableNewRowEventArgs e)
{
    e.Row[k] = Guid.NewGuid();
}
0 голосов
/ 26 мая 2009

Вы можете использовать DataColumn.DefaultValue для целых чисел с начальным и приращением, но не с NewGuid (), потому что все значения будут одинаковыми.

Почему бы не использовать Guid.NewGuid () во время вставки или вместо использования DataTables использовать List (Of SomeClass), где вы можете точно настроить такие вещи, как значения свойств по умолчанию в классе.

0 голосов
/ 26 мая 2009

База данных должна быть местом, где создаются новые идентификаторы строк. Если вы используете SQL Server, вы можете создать столбец первичного ключа со спецификацией UniqueIndentifier, и каждый раз, когда вы добавляете новую запись, база данных автоматически присваивает ей уникальный идентификатор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...