1. 程式人生 > >C#用 XML 繫結多個ComboBox

C#用 XML 繫結多個ComboBox

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文件方法,參考