2016-11-02 3 views
0

これをたくさん検索しようとしましたが、残念ながら運がありません。 COMポートとボーレートを選択して別のCOMポートに接続できるようにするアプリケーションがあります(信号が一方のポートに入り、もう一方のポートに入ります)。私はそれをXML形式に保存する保存機能を持っています。XMLファイルでdatagridviewを再生成する方法

XMLファイルのすべての情報がdatagridviewに入力されるように、その保存ファイルを開くことができますが、私はそれを行う方法を見つけることができません。 (私のアプリケーションでは、基本的なセットアップを使用して)

私は(レイアウトは完璧ではありませんが、私は後でそれを変更することができます)、それはこのようになり、GoogleのChromeでXMLファイルを開きます。

<Root_Element> 
<Output_Port Output_Baud="9600">COM104</Output_Port> 
<Serial_Port_Name Use="Checkbox is Off" Baud="9600" Extract="" Data="">COM3</Serial_Port_Name> 
<Serial_Port_Name Use="Checkbox is Off" Baud="9600" Extract="" Data="">COM1</Serial_Port_Name> 
<Serial_Port_Name Use="Checkbox is Off" Baud="9600" Extract="" Data="">COM6</Serial_Port_Name> 
<Serial_Port_Name Use="Checkbox is Off" Baud="9600" Extract="" Data="">COM5</Serial_Port_Name> 
<Serial_Port_Name Use="Checkbox is Off" Baud="9600" Extract="" Data="">COM4</Serial_Port_Name> 
<Serial_Port_Name Use="Checkbox is On" Baud="9600" Extract="12345" Data="">COM100</Serial_Port_Name> 
<Serial_Port_Name Use="Checkbox is Off" Baud="9600" Extract="" Data="">COM101</Serial_Port_Name> 
<Serial_Port_Name Use="Checkbox is On" Baud="9600" Extract="" Data="">COM102</Serial_Port_Name> 
<Serial_Port_Name Use="Checkbox is Off" Baud="9600" Extract="" Data="">COM103</Serial_Port_Name> 
<Serial_Port_Name Use="Checkbox is Off" Baud="9600" Extract="" Data="">COM104</Serial_Port_Name> 
<Serial_Port_Name Use="Checkbox is Off" Baud="9600" Extract="" Data="">COM105</Serial_Port_Name> 
</Root_Element> 

以下のコードはデータの保存方法です。私はちょうど本質的にこれの逆を行うことができ、元の場所にデータを戻すことができるようにしたい。

private void saveFileDialog1_FileOk(object sender, CancelEventArgs e) 
    { 

     // Create the XmlDocument. 
     XmlDocument doc = new XmlDocument(); 

     // Create root element. 
     XmlElement rootElem = doc.CreateElement("Root_Element"); 
     doc.AppendChild(rootElem); 

     // Add an "Output Port" element.     
     XmlElement outPortElem = doc.CreateElement("Output_Port"); 
     outPortElem.Value = (string)comboBox1.SelectedItem; 
     rootElem.AppendChild(outPortElem); 

     // Add an "Output Baud" Attribute. 
     XmlAttribute outBaudAtt = doc.CreateAttribute("Output_Baud"); 
     outBaudAtt.Value = (string)comboBox2.SelectedItem; 
     outPortElem.Attributes.Append(outBaudAtt); 

     foreach (DataGridViewRow row in dataGridView1.Rows) 
     { 
      var ip_port2 = (SerialPort)row.Tag; 

      // Write Serial Port Name element. 
      XmlElement nameElem = doc.CreateElement("Serial_Port_Name"); 
      nameElem.Value = (string)row.HeaderCell.Value; // display the port name 
      rootElem.AppendChild(nameElem); 

      if (ip_port2.IsOpen == true) // if the ip_port is open 
      { 
       // Add a "Use" attribute. 
       XmlAttribute useAtt = doc.CreateAttribute("Use"); 
       useAtt.Value = "Checkbox is On"; // display the port as "on" 
       nameElem.Attributes.Append(useAtt); 
      } 
      else if (ip_port2.IsOpen != true) // if the ip_port is closed 
      { 
       // Add a "Use" attribute. 
       XmlAttribute useAtt = doc.CreateAttribute("Use"); 
       useAtt.Value = "Checkbox is Off"; // display the port as "off" 
       nameElem.Attributes.Append(useAtt); 
      } 

      // Add a "Baud" attribute. 
      XmlAttribute baudAtt = doc.CreateAttribute("Baud"); 
      baudAtt.Value = (string)row.Cells[1].Value; 
      nameElem.Attributes.Append(baudAtt); 

      // Add an "Extract" attribute. 
      XmlAttribute extractAtt = doc.CreateAttribute("Extract"); 
      extractAtt.Value = (string)row.Cells[2].Value; 
      nameElem.Attributes.Append(extractAtt); 

      // Add a "Data" attribute. 
      XmlAttribute dataAtt = doc.CreateAttribute("Data"); 
      dataAtt.Value = (string)row.Cells[3].Value; 
      nameElem.Attributes.Append(dataAtt); 
     } 

     // Save the document to a file. White space is preserved (no white space). 
     doc.PreserveWhitespace = true;    
     doc.Save(saveFileDialog1.FileName); 

助けがあれば助かります。前もって感謝します!

答えて

0

DataSet/DataTableを試してください。

このコードは、XMLファイルを読み込む:

var ds = new DataSet(); 
ds.ReadXml("filename.xml"); 

は今、2 DataTableDataSetです。

のは、最初から値を取得してみましょう:

var outputBaud = ds.Tables[0].Rows[0]["Output_Baud"]; 
var outputPort = ds.Tables[0].Rows[0]["Output_Port_Text"]; 

次に、第二DataTable(注意ブラックマジック!)からDataGridViewを埋める:

dataGridView.DataSource = ds.Tables[1]; 

シンプルな、そうではありませんか?

DataGridViewの値を編集できるようになりました。データバインディングのおかげで、それらはDataTableに格納されます。

データを保存するのも非常に簡単です。

ds.Tables[0].Rows[0]["Output_Baud"] = outputBaud; 
ds.Tables[0].Rows[0]["Output_Port_Text"] = outputPort; 

ds.WriteXml("filename.xml"); 

巨大なコードを捨てることができます。

関連する問題