Как скопировать содержимое DataGridView в набор данных? - PullRequest
0 голосов
/ 04 сентября 2011

Я не очень хорошо с ADO.NET, поэтому использовал следующий код, который я получил из Интернета, но я получаю ошибку " Нет строки в позиции 0. " @ отмеченная строка (*)хотя я вижу, что значение передается с использованием точек останова

        DataSet ds = new DataSet();
        DataTable dt = new DataTable("ProdFromDGV");
        ds.Tables.Add(dt);
        foreach (DataGridViewColumn col in dataGridView1.Columns)
        {
            dt.Columns.Add(col.HeaderText, typeof(string));
        }

        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            foreach (DataGridViewCell cell in row.Cells)
            {
                *dt.Rows[row.Index][cell.ColumnIndex] = cell.Value.ToString();*
            }
        }
        dt.WriteXml("table.xml");

Ответы [ 2 ]

0 голосов
/ 08 января 2014

// Это не сработает, но вам нужно что-то похожее на это ...

Просто измените

 DataRow row = new DataRow();

на:

DataRow row = dt.NewRow();

и это будет работать.

0 голосов
/ 05 сентября 2011

Вам необходимо сначала создать тип DataRow и добавить его в таблицу DataTable, прежде чем вы сможете назначить его.

Так что ваш код теперь будет выглядеть примерно так:

DataSet ds = new DataSet();
DataTable dt = new DataTable("ProdFromDGV");
ds.Tables.Add(dt);

foreach (DataGridViewColumn col in dataGridView1.Columns)
{
    dt.Columns.Add(col.HeaderText, typeof(string));
}

foreach (DataGridViewRow row in dataGridView1.Rows)
{
    foreach (DataGridViewCell cell in row.Cells)
    {
         // This will not work, but it's something similar to this that you need here...
         DataRow row = new DataRow();
         dt.RowCollecion.Add(row);    

         // Now you can assign to the row....
         dt.Rows[row.Index][cell.ColumnIndex] = cell.Value.ToString();
     }
}

dt.WriteXml("table.xml");

Надеюсь, это поможет некоторым ..

...