сохранить данные из datagridview в xml - PullRequest
1 голос
/ 01 марта 2012

У меня есть 1 форма, где button1 нарисовать таблицу в datagridview .После заполнения ячеек мне нужно сохранить данные из datagridview в xml по button2 .

//save
private void button1_Click(object sender, EventArgs e)
        {        
            try
            {                      
                DataSet ds = new DataSet();
                ds = (DataSet)(dataGridView1.DataSource);
                ds.WriteXml(@"c:\1.xml");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ошибка: " + ex.Message);
            }            
        }

//draw a datagridview    
private void button2_Click(object sender, EventArgs e)
            {
                try
                {
                    int x, y;
                    x = Convert.ToInt32(textBox1.Text);
                    y = Convert.ToInt32(textBox2.Text);
                    double[,] grid;
                    grid = new double[x, y];
                    int k = 0;
                    k = dataGridView1.ColumnCount;
                    if (k != 0)
                        for (int i = 0; i < k; i++)
                            dataGridView1.Columns.RemoveAt(0);
                    dataGridView1.Columns.Clear();
                    AddColumns(y, dataGridView1);
                    AddRows(x, dataGridView1);
                    dataGridView1.RowHeadersWidth = 22;                                    
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Ошибка: " + ex.Message);
                }

            }

но я получил ошибку:

ссылка на объект не установлена ​​на мгновение объекта.

Итак, как я могу сохранить datagridview в xml?

1 Ответ

2 голосов
/ 01 марта 2012

Я ожидаю, что у вашего dgv нет действительного источника данных.См. здесь для получения информации о том, как связать источник данных. Как вы заполнили dgv данными?

Вы можете попробовать сериализацию, но DataGridView не сериализуем, вам нужно будет выполнить итерациюdgv (datagridview) и добавьте каждый элемент в коллекцию.Вероятно, было бы лучше создать структуру, которая будет представлять данные вашего dgv и объявить это как [Serializable()].Каждое поле может быть сохранено в виде строки, поэтому просто переберите dgv, вызовите ToString() для каждого элемента и добавьте его в экземпляр вашей структуры.Выполните итерацию по строкам вашего dgv примерно так:

 for (int i = 0; i < dgv.Rows.Count; i++)
 {
      //add each row and item to your structure
 }

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

Итак, теперь у вас есть коллекция, которая сериализуема.и он заполнен всеми вашими данными.Теперь вам нужно сериализовать эту структуру и затем записать ее в файл, например:

XmlSerializer izer = new XmlSerializer(YourStructure.GetType());
TextWriter WriteFileStream = new StreamWriter(@"c:\1.xml");
izer.Serialize(WriteFileStream, YourStructure);
WriteFileStream.Close();

Надеюсь, это поможет, информацию о сериализации можно найти здесь .Помните, что вы можете создать обработчик для события кнопки OnClick, дважды щелкнув по кнопке в режиме конструктора.

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