读书人

从xml文件读取值并绑定多个控件控件

发布时间: 2013-12-10 15:05:55 作者: rapoo

从xml文件读取值并绑定多个控件,控件互相干扰的问题 求助
大家好 我写了个函数用来从xml文件中读取控件的值,然后绑定。但是奇怪的是,当选择控件comboBoxEx41的值时, comboBoxEx42和comboBoxEx43 也同时变成和 comboBoxEx41 一样了。 请问是什么问题呢?
我想让三个控件绑定相同的属性值,操作互不干扰,应该怎么修改呢? 谢谢 下面是代码:


//从xml文件中绑定控件
private void update1()
{
DataSet ds = new DataSet();
string fromPath = System.Environment.CurrentDirectory + @"\conf\rate_group.xml";
FileInfo xmlFile = new FileInfo(fromPath);
if (xmlFile.Exists)
{
FileStream fsReadxml = new FileStream(fromPath, FileMode.Open);
XmlTextReader myXmlReader = new XmlTextReader(fsReadxml);
ds.ReadXml(myXmlReader);
myXmlReader.Close();
}

comboBoxEx41.DataSource = ds.Tables[0];
comboBoxEx41.DisplayMember = "displaymember";
comboBoxEx41.ValueMember = "valuemember";
comboBoxEx41.SelectedIndex = -1;
comboBoxEx41.DropDownStyle = ComboBoxStyle.DropDownList;


comboBoxEx42.DataSource = ds.Tables[0];
comboBoxEx42.DisplayMember = "displaymember";
comboBoxEx42.ValueMember = "valuemember";
comboBoxEx42.SelectedIndex = -1;
comboBoxEx42.DropDownStyle = ComboBoxStyle.DropDownList;


comboBoxEx43.DataSource = ds.Tables[0];
comboBoxEx43.DisplayMember = "displaymember";
comboBoxEx43.ValueMember = "valuemember";
comboBoxEx43.SelectedIndex = -1;
comboBoxEx43.DropDownStyle = ComboBoxStyle.DropDownList;
}


[解决办法]
加上Copy可以。

测试通过

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.IO;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{

DataSet ds = new DataSet();



string xml = @"<root>
<item displaymember=""a"" valuemember=""1""></item>
<item displaymember=""b"" valuemember=""2""></item>
<item displaymember=""c"" valuemember=""3""></item>
</root>";

MemoryStream stream = new MemoryStream(Encoding.Default.GetBytes(xml));
XmlTextReader myXmlReader = new XmlTextReader(stream);
ds.ReadXml(myXmlReader);
myXmlReader.Close();

comboBox1.DataSource = ds.Tables[0].Copy();
comboBox1.DisplayMember = "displaymember";
comboBox1.ValueMember = "valuemember";
comboBox1.SelectedIndex = -1;
comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;

comboBox2.DataSource = ds.Tables[0].Copy();
comboBox2.DisplayMember = "displaymember";
comboBox2.ValueMember = "valuemember";
comboBox2.SelectedIndex = -1;
comboBox2.DropDownStyle = ComboBoxStyle.DropDownList;


comboBox3.DataSource = ds.Tables[0].Copy();
comboBox3.DisplayMember = "displaymember";
comboBox3.ValueMember = "valuemember";
comboBox3.SelectedIndex = -1;
comboBox3.DropDownStyle = ComboBoxStyle.DropDownList;
}
}
}


[解决办法]
当多个控件绑定相同数据源时会有联动效应,这是微软的好事。因为很多场景是,你点击datarow,希望有界面显示datarow的详细信息,你更改下拉框选项是希望下面里datagirdview根据你选择的那项刷新

很多人对winform的偏见是‘winform不是wpf,那需要自己写一大堆事件,手动更新数据刷新,同步操作’其实并非如此,winfrom也可以做到不怎么写手动代码,让微软的代码自己去同步刷新去

好了废话就这么多,了解这个你自己就知道该怎么改了:“绑定相同数据源微软会自动同步UI,那么你不想他自动同步UI,就绑到不同的数据源上即可”
[解决办法]
是的,应该 Copy!

读书人网 >C#

热点推荐