Как добавить новый DataRow в DataTable?

У меня DataGridView привязан к DataTable (DataTable привязан к базе данных). Мне нужно добавить DataRow к DataTable. Я пытаюсь использовать следующий код:

dataGridViewPersons.BindingContext[table].EndCurrentEdit();
DataRow row = table.NewRow();

for (int i = 0; i < 28; i++)
{
    row[i] = i.ToString();
}

Но это не работает, DataGridView никогда не добавлялась новая строка. Подскажите, пожалуйста, как исправить мой код?

Заранее спасибо.


person malcoauri    schedule 28.09.2012    source источник
comment
dotnetperls.com/datarow   -  person DmitryBoyko    schedule 26.03.2014


Ответы (8)


Вы можете попробовать этот код - на основе Rows.Add method

DataTable table = new DataTable();
DataRow row = table.NewRow();
table.Rows.Add(row);

Ссылка: https://docs.microsoft.com/dotnet/api/system.data.datarowcollection.add?view=net-5.0#System_Data_DataRowCollection_Add_System_Data_DataRow_

person Aghilas Yakoub    schedule 28.09.2012

Мне очень помогли примеры dotnetperls на DataRow. Фрагмент кода для нового DataTable оттуда:

static DataTable GetTable()
{
    // Here we create a DataTable with four columns.
    DataTable table = new DataTable();
    table.Columns.Add("Weight", typeof(int));
    table.Columns.Add("Name", typeof(string));
    table.Columns.Add("Breed", typeof(string));
    table.Columns.Add("Date", typeof(DateTime));

    // Here we add five DataRows.
    table.Rows.Add(57, "Koko", "Shar Pei", DateTime.Now);
    table.Rows.Add(130, "Fido", "Bullmastiff", DateTime.Now);
    table.Rows.Add(92, "Alex", "Anatolian Shepherd Dog", DateTime.Now);
    table.Rows.Add(25, "Charles", "Cavalier King Charles Spaniel", DateTime.Now);
    table.Rows.Add(7, "Candy", "Yorkshire Terrier", DateTime.Now);

    return table;
}
person mimo    schedule 18.11.2016

//َСоздание новой строки со структурой таблицы:

DataTable table = new DataTable();
DataRow row = table.NewRow();
table.Rows.Add(row);

// Присвоение значений столбцам строки (предполагается, что в этой строке 28 столбцов):

for (int i = 0; i < 28; i++)
{
    row[i] = i.ToString();
}
person Mehran Sarrafi    schedule 14.11.2013

Вы должны явно добавить строку к столу

table.Rows.Add(row);
person rene    schedule 28.09.2012

Если нужно скопировать из другой таблицы, сначала нужно скопировать структуру:

DataTable copyDt = existentDt.Clone();
copyDt.ImportRow(existentDt.Rows[0]);
person Aleksey Kontsevich    schedule 14.03.2013

Это работает для меня:

var table = new DataTable();
table.Rows.Add();
person x-silencer    schedule 28.09.2012

попробуйте table.Rows.add(row); после вашего утверждения for.

person Riccardo    schedule 28.09.2012

person    schedule
comment
Пожалуйста, постарайтесь не просто сбрасывать код в качестве ответа и попытайтесь объяснить, что он делает и почему. Ваш код может быть неочевидным для людей, не имеющих соответствующего опыта кодирования. Пожалуйста, отредактируйте свой ответ, включив в него разъяснение, контекст и постарайтесь упомянуть любые ограничения, предположения или упрощения в своем ответе. - person Sᴀᴍ Onᴇᴌᴀ; 20.06.2017
comment
Этот код неполон и не имеет ничего общего со строками данных. - person jpaugh; 25.04.2019