[英]How to get ValueMember value from ComboBox C#?
我在嘗試獲取設置的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
對象。 然后您可以像這樣使用ComboBox.SelectedItem
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;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.