如何从组合框C#中获取ValueMember值?

如何从组合框C#中获取ValueMember值?,c#,xml,combobox,C#,Xml,Combobox,我在尝试获取已设置的ValueMember值时遇到一些问题。我正在尝试使用组合框将XML数据读取到文本框。这是我的密码: private void zamowienie_Load(object sender, EventArgs e) { label2.Text = DateTime.Now.ToShortDateString(); DataSet dsSet = new DataSet(); dsSet.ReadXml("E:\

我在尝试获取已设置的ValueMember值时遇到一些问题。我正在尝试使用组合框将XML数据读取到文本框。这是我的密码:

    private void zamowienie_Load(object sender, EventArgs e)
    {
        label2.Text = DateTime.Now.ToShortDateString();

        DataSet dsSet = new DataSet();
        dsSet.ReadXml("E:\\baza\\spis_klientow.xml");
        comboBox2.DataSource = dsSet.Tables["spis_klientow"];
        comboBox2.DisplayMember = "ID";
        comboBox2.ValueMember = "Name";
        comboBox2.ValueMember = "Phone";

    }

    private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
    {            
        DataSet ds = new DataSet();
        ds.ReadXml("E:\\baza\\spis_klientow.xml");

        foreach (DataRow item in ds.Tables["spis_klientow"].Rows)
        {
            label10.Text = item[1].ToString();
            label11.Text = item[2].ToString();
        }

    }

DataTable
绑定为
ComboBox
数据源时,
ComboBox.Items
集合将填充
DataRowView
对象。那么你可以这样用

private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
    var source = (DataRowView)comboBox2.SelectedItem;
    label10.Text = source["Name"].ToString();
    label11.Text = source["Phone"].ToString();
    // ...
}
然而,有一个更好的方法。WinForms数据绑定基础设施支持这种场景,而无需挂接到具体的控制事件中。您只需将组合框和文本框绑定到同一个数据源(
DataTable

下面是数据绑定“魔力”的完整工作示例:

using System;
using System.Data;
using System.Windows.Forms;

namespace Samples
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            var form = new Form();
            var comboBox = new ComboBox { Left = 16, Top = 16, DropDownStyle = ComboBoxStyle.DropDownList };
            var textBoxID = new TextBox { Left = 16, Top = comboBox.Bottom + 8 };
            var textBoxName = new TextBox { Left = 16, Top = textBoxID.Bottom + 8 };
            var textBoxPhone = new TextBox { Left = 16, Top = textBoxName.Bottom + 8 };
            form.Controls.AddRange(new Control[] { comboBox, textBoxID, textBoxName, textBoxPhone });

            // Begin essential part
            var dataSource = GetData();

            textBoxID.DataBindings.Add("Text", dataSource, "ID");
            textBoxName.DataBindings.Add("Text", dataSource, "Name");
            textBoxPhone.DataBindings.Add("Text", dataSource, "Phone");

            comboBox.DisplayMember = "Name";
            comboBox.ValueMember = "ID";
            comboBox.DataSource = dataSource;

            // End essential part
            Application.Run(form);
        }

        static DataTable GetData()
        {
            //DataSet dsSet = new DataSet();
            //dsSet.ReadXml("E:\\baza\\spis_klientow.xml");
            //return dsSet.Tables["spis_klientow"];

            var table = new DataTable();
            table.Columns.Add("ID", typeof(int));
            table.Columns.Add("Name");
            table.Columns.Add("Phone");
            for (int i = 1; i <= 10; i++)
                table.Rows.Add(i, "Name" + i, "Phone" + i);
            return table;
        }
    }
}
使用系统;
使用系统数据;
使用System.Windows.Forms;
名称空间示例
{
静态类程序
{
[状态线程]
静态void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var form=new form();
var comboBox=newcombobox{Left=16,Top=16,DropDownStyle=ComboBoxStyle.DropDownList};
var textBoxID=newtextbox{Left=16,Top=comboBox.Bottom+8};
var textBoxName=newtextbox{Left=16,Top=textBoxID.Bottom+8};
var textBoxPhone=newtextbox{Left=16,Top=textBoxName.Bottom+8};
AddRange(新控件[]{comboBox,textBoxID,textBoxName,textBoxPhone});
//开始重要部分
var dataSource=GetData();
textBoxID.DataBindings.Add(“Text”,dataSource,“ID”);
textBoxName.DataBindings.Add(“Text”,dataSource,“Name”);
textBoxPhone.DataBindings.Add(“Text”,dataSource,“Phone”);
comboBox.DisplayMember=“Name”;
comboBox.ValueMember=“ID”;
comboBox.DataSource=数据源;
//末端基本部件
申请表格;
}
静态数据表GetData()
{
//数据集dsSet=新数据集();
//ReadXml(“E:\\baza\\spis_klientow.xml”);
//返回dsSet.Tables[“spis_klientow”];
var table=新数据表();
表.列.添加(“ID”,类型(int));
表.列.添加(“名称”);
表.列.添加(“电话”);

对于(int i=1;我可以重新表述您实际要实现的目标将选定的组合框项从xml文件加载到文本框使用组合框而不是数据选择组合框属性SelectedItem和SelectedValues的说明我不知道如何操作。