2012-03-01 36 views
1

私は1つのフォームを持っています。button1の描画テーブルdatagridviewにあります。 細胞を充填した後、私はbutton2をによってXMLへのDataGridViewからのデータを保存する必要があります。データグリッドビューからxmlにデータを保存

//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); 
       } 

      } 

が、私はエラー受信:、私はXMLにDataGridViewのを保存することができますどのように

object reference not set to an instantce of an object.

を?

+1

データソースをdatagridviewに設定したコードを表示できますか? –

+0

明らかに、DataGridviewコントロールにバインドされたDataSourceはありません。このデータグリッドはどのように使いますか?より多くのコードを持つことはいいです.. –

答えて

2

は、私はあなたのDGVに有効なデータソースを持っていません期待しています。データソースをバインドする方法については、hereを参照してください。どのようにして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 
} 

を別の方法として、あなたは、これはより直接的にシリアライズすることができ、データソースを持っている場合。

これで、シリアル化可能で、すべてのデータでいっぱいのコレクションがあります。私はこの連載についての情報がhere見つけることができ、助けを願って

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

:今、あなたは次のように、その構造をシリアライズして、ファイルに書き込む必要があります。デザインビューのボタンをダブルクリックすることで、ボタンOnClickイベントのハンドラを作成することができます。

関連する問題