C#用 XML 繫結多個ComboBox
阿新 • • 發佈:2019-02-05
0
繫結第一個ComboBox
private void Mxdr_Form_Load(object sender, EventArgs e) { string str = @"Total.xml"; //\bin\Debug資料夾下的XML文件。 string total = "Total"; string comboxName = "name"; string totvalue = "value"; Label la = labe_show; ComboBox com = comBox_Table; //DataGridView dgv = dataGridView1; //Button ton = butt_SaveFile; getXmlTableBinding(str,total,comboxName,totvalue,com); }
// 查詢並讀取 xml 文件 private void butt_FindTable_Click(object sender, EventArgs e) { try { DataGridView dataGView = dataGridView1; ComboBox com = comBox_Table; Button ton = butt_FindTable; if (com.SelectedIndex != -1) { XmlFileName = com.SelectedValue.ToString(); getXmlTable(XmlFileName, dataGView, com, ton); } /* 繫結comboBox2 的條件 */ if (dst != null && File.Exists(XmlFileName + ".xml")) { if (com.SelectedIndex != -1) { string sTableName = com.SelectedValue.ToString(); ComboBox comSeek = comBox_Seek; getXmlTableBinding_Game(sTableName, comSeek); //labe_show.Text = com.Text + "文件(" + XmlFileName + ".xml)"; } } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }
儲存 XML 文件:
// 儲存 xml 文件
private void butt_SaveFile_Click(object sender, EventArgs e)
{
ComboBox com = comBox_Table;
Button ton = butt_FindTable;
this.SaveXmlFile(com, ton);
}
0
繫結方法:
/// <summary>★ 資料繫結 ★ 繫結到 ComboBox ★ /// <para>ComboBox com = 你要繫結的 ComboBox ; </para><para> </para><para>示例:</para> /// <para>ComboBox com = comboBox1;<para>string xml = "xml.xml"</para> /// <para>string XmlNode = "要查詢的節點"</para> /// <para>GetXmlTable(com);</para></para></summary> /// <param name="xml"></param> /// <param name="XmlNode"></param> /// <param name="com"></param> private void getXmlTableBinding(string xml, string XmlNode,string comboxName,string comValue, ComboBox com) { com.DataSource = null; //清空 ComboBox.DataSource //com.Items.Clear(); string xmlpath =xml; //注意檔案位置 此處表示在工程 \bin\Debug 中 DataSet xmlds = new DataSet(); xmlds.ReadXml(xmlpath); //ComboBox顯示的屬性(Text 前臺顯示) com.DisplayMember = comboxName; //ComboBox實際的屬性值(隱藏/後臺) com.ValueMember = comValue; //comboBox1獲取表集合內容 com.DataSource = xmlds.Tables[XmlNode]; //獲取 "Total" 節點內容 com.SelectedIndex = -1; com.DropDownStyle = ComboBoxStyle.DropDownList; // 設定不可輸入文字 // 清空資料釋放資源 xmlds.Clear(); xmlds.Dispose(); }
上面的方法是繫結一個二列的表(name 和 value)列。name 列存放中文式的字元,value 存放不方便使用中文的文件名。
如:name = 商品 value = Commodity 。在繫結前,首先就要先建立 XML 文件。
繫結第二個表方法:
0
/// <summary> 繫結遊戲ID,以便查詢<para> </para>
/// 引數1:xml 文件名稱。引數2:要繫結的 ComboBox。
/// </summary>
/// <param name="xmlTableName">引數 xmlTableName為 xml文件的名稱,不含字尾名</param>
/// <param name="comboBoxName">引數 comboBoxName 為 要繫結的 ComboBox 。</param>
private void getXmlTableBinding_Game(string xmlTableName, ComboBox comboBoxName)
{
comboBoxName.DataSource = null;
//comboBoxName.Items.Clear();
string xmlpath = xmlTableName; //注意檔案位置 此處表示在工程 \bin\Debug 中
DataSet xmlds = new DataSet();
xmlds.ReadXml(xmlTableName + ".xml");
comboBoxName.DisplayMember = "遊戲Name";
comboBoxName.ValueMember = "姓名";
comboBoxName.DataSource = dst.Tables["toTable"];
comboBoxName.SelectedIndex = -1;
comboBoxName.DropDownStyle = ComboBoxStyle.DropDownList;
/* 清空DataSet資料,為comboBoxName.DataSource
* 留出再次繫結空間。
*/
xmlds.Clear();
xmlds.Dispose();
}
0
#region ==☆**☆== 讀取列表 == DatXml(string s) ==☆**☆==
///</summary>
/// <summary>讀取 xml 列表。<para> <para> 請不要改變此方法的結構</para><para>
/// 這是為 FindXmlFile(string s,DataGridView dataGView,ComboBox com,Button ton)方法呼叫</para></para>
/// <para> <para>XmlFileName XML文件名 string xmlFileName = "xmlFile";</para></para>
/// <para>DataGridView dataG1 = dataGridView1;</para><para>ComboBox com = comboBox1;</para>
/// <para>Button ton = button1;</para><para>getXmlTable(XmlFileName,dataG1,com,ton);</para>
/// </summary>
/// <param name="XmlFileName">XML 表名,不要加 .xml 字尾</param>
/// <param name="dataGView">DataGridView 控制元件 </param>
/// <param name="com">ComboBox com 控制元件</param>
/// <param name="ton">Button 控制元件</param>
private void getXmlTable(string XmlFileName, DataGridView dataGView, ComboBox com, Button ton)
{
try
{
if (File.Exists(XmlFileName + ".xml"))
{
this.dst = new DataSet();
dst.ReadXml(XmlFileName + ".xml");
dataGView.DataSource = dst.Tables[0];
}
else
{
DialogResult r = MessageBox.Show(
"沒有找到" + XmlFileName + ".xml,\n是否建立" + XmlFileName + ".xml?",
"建立提醒!",
MessageBoxButtons.OKCancel,
MessageBoxIcon.Question);
if (r == DialogResult.OK)
{
//string st = comboBox1.SelectedValue.ToString();
/* comboBox1.SelectedValue 為comboBox1的 ValueMember 值,
* 所以,首先要繫結 ValueMember 值,否則將會返回一個 null 錯誤 */
xmlclss.IsDateString(XmlFileName);
dataGView.DataSource = dst.Tables[0];
}
else
{
com.SelectedIndex = -1;
com.Enabled = false;
ton.ForeColor = Color.Black;
}
if (File.Exists(XmlFileName + ".xml"))
{
this.dst = new DataSet();
this.dst.ReadXml(XmlFileName + ".xml");
dataGView.DataSource = this.dst.Tables[0];
}
}
}
catch (Exception e) { MessageBox.Show(e.ToString()); }
}
#endregion
讀取列表 getXmlTable(string XmlFileName, DataGridView dataGView, ComboBox com, Button ton) 中的
xmlclss.IsDateString(XmlFileName);
為呼叫其他建立XML文件方法,參考