На форме есть пустая DataGridView. Создаю для неё DataTable.
private void новыйToolStripMenuItem_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("Product"));
dt.Columns.Add(new DataColumn("Prize"));
dt.Columns.Add(new DataColumn("Count"));
dataGridView1.DataSource = dt;
}
Ввожу в строку DataGridView данные и пытаюсь сохранить их в XML.
private void сохранитьToolStripMenuItem_Click(object sender, EventArgs e)
{
DataTable dT = GetDataTableFromDGV(dataGridView1);
DataSet dS = new DataSet();
dS.Tables.Add(dT);
SaveFileDialog save = new SaveFileDialog();
save.Filter = "XML|*.xml";
if (save.ShowDialog(this) == DialogResult.OK)
{
try
{
dS.WriteXml(save.FileName);
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
Метод GetDataTableFromDGV
private DataTable GetDataTableFromDGV(DataGridView dgv)
{
DataTable dt = new DataTable();
foreach (DataGridViewColumn column in dgv.Columns)
{
if (column.Visible)
{
dt.Columns.Add();
}
}
object[] cellValues = new object[dgv.Columns.Count];
foreach (DataGridViewRow row in dgv.Rows)
{
for (int i = 0; i < row.Cells.Count; i++)
{
cellValues[i] = row.Cells[i].Value;
}
dt.Rows.Add(cellValues);
}
return dt;
}
При попытке открыть сохраненный XML
private void открытьToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog open = new OpenFileDialog();
if (open.ShowDialog(this) == DialogResult.OK)
{
string path = open.FileName;
ds = new DataSet();
ds.ReadXml(path);
dataGridView1.DataSource = ds.Tables[0].DefaultView;
}
}
Всегда получается, что нет последней Column. В методе GetDataTableFromDGV() указывает на ошибку NullReferenceException в строке:
cellValues[i] = row.Cells[i].Value;
Прочитал, что надо изначально задавать column в DataTable чтобы её избежать, но они уже заданы при создании.
В чем может быть ошибка?
object[] cellValues = new object[dgv.Columns.Count];. Чему будет равенcellValues[0]? Я отвечу - NULL, ибо вы просто задали пустой массив объектов. А инициализировать? Ну а вообще, я бы закрыл как дубликат. – EvgeniyZ May 12 '18 at 18:01