C# 如何从DataTable到combobox获取值?
我用C#编写winform应用程序。将combobox与数据表一起使用时出现问题。 我有C# 如何从DataTable到combobox获取值?,c#,combobox,datatable,C#,Combobox,Datatable,我用C#编写winform应用程序。将combobox与数据表一起使用时出现问题。 我有DataTable像: **privilege** **username** **password** admin admin 8887abc user user1 abc123 然后我将其加载到组合框。仅显示权限列,当用户单击“管理员”或“用户”时,它会
DataTable
像:
**privilege** **username** **password**
admin admin 8887abc
user user1 abc123
然后我将其加载到组合框。仅显示权限列,当用户单击“管理员”或“用户”时,它会自动加载用户单击“用户”和“密码”对应的行。当用户单击选择权限时,我无法获取事件
我的代码如下:
DataTable dt = new DataTable();
cmbCategory.DisplayMember = "privilege";
cmbCategory.ValueMember = "ID";
cmbCategory.DataSource = dt;
foreach(DataRow rows in dt.Rows)
{
txtUser.Text = rows["username"].ToString();
txtPassword.Text = rows["password"].ToString();
}
cmbCategory.SelectedIndex = 0;
我从excel文件加载数据表。
这只是我所有的代码。1类若要读取Excel中的数据,请将Excel数据从路径加载到DataTable。您需要将处理程序绑定到CMBContegory。SelectedIndex更改如下:
cmbCategory.SelectedIndexChanged += cmbCategory_SelectedIndexChanged;
然后定义一个方法
void cmbCategory_SelectedIndexChanged(object sender, EventArgs e)
{
// get the selection
DataRowView drv = (DataRowView)cmbCategory.SelectedItem;
// and display the info
txtUser.Text = drv["username"].ToString();
txtPassword.Text = drv["password"].ToString();
}
您需要将处理程序绑定到CMBContegory。SelectedIndex更改如下:
cmbCategory.SelectedIndexChanged += cmbCategory_SelectedIndexChanged;
然后定义一个方法
void cmbCategory_SelectedIndexChanged(object sender, EventArgs e)
{
// get the selection
DataRowView drv = (DataRowView)cmbCategory.SelectedItem;
// and display the info
txtUser.Text = drv["username"].ToString();
txtPassword.Text = drv["password"].ToString();
}
combobox控件有一个名为“SelectedIndexChanged”的事件,只需要处理该事件,因此当项目发生更改时,您可以在DataTable中查找特定项目,或者获取组合的选定项目(它也是DataTable项目的一个实例),然后搜索所需列的值
Form1.cs
using System;
using System.Data;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private static readonly DataTable MyData = new DataTable();
public Form1()
{
InitializeComponent();
//Assign the event handler
comboBox1.SelectedIndexChanged += comboBox1_SelectedIndexChanged;
}
private void Form1_Load(object sender, EventArgs e)
{
var column1 = new DataColumn("privilege", Type.GetType("System.String"));
var column2 = new DataColumn("username", Type.GetType("System.String"));
var column3 = new DataColumn("password", Type.GetType("System.String"));
MyData.Columns.Add(column1);
MyData.Columns.Add(column2);
MyData.Columns.Add(column3);
var row0 = MyData.NewRow();
row0["privilege"] = "Select an Item";
row0["username"] = "";
row0["password"] = "";
var row1 = MyData.NewRow();
row1["privilege"] = "admin";
row1["username"] = "admin";
row1["password"] = "8887abc";
var row2 = MyData.NewRow();
row2["privilege"] = "user";
row2["username"] = "user1";
row2["password"] = "abc123";
MyData.Rows.Add(row0);
MyData.Rows.Add(row1);
MyData.Rows.Add(row2);
comboBox1.DisplayMember = "privilege";
comboBox1.ValueMember = "username";
comboBox1.DataSource = MyData;
comboBox1.SelectedIndex = 0;
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
var cb = (sender as ComboBox);
var selectedItem = (cb.SelectedItem as DataRowView);
label1.Text = selectedItem["username"].ToString();
label2.Text = selectedItem["password"].ToString();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), "Error");
}
}
}
}
combobox控件有一个名为“SelectedIndexChanged”的事件,只需要处理该事件,因此当项目发生更改时,您可以在DataTable中查找特定项目,或者获取组合的选定项目(它也是DataTable项目的一个实例),然后搜索所需列的值
Form1.cs
using System;
using System.Data;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private static readonly DataTable MyData = new DataTable();
public Form1()
{
InitializeComponent();
//Assign the event handler
comboBox1.SelectedIndexChanged += comboBox1_SelectedIndexChanged;
}
private void Form1_Load(object sender, EventArgs e)
{
var column1 = new DataColumn("privilege", Type.GetType("System.String"));
var column2 = new DataColumn("username", Type.GetType("System.String"));
var column3 = new DataColumn("password", Type.GetType("System.String"));
MyData.Columns.Add(column1);
MyData.Columns.Add(column2);
MyData.Columns.Add(column3);
var row0 = MyData.NewRow();
row0["privilege"] = "Select an Item";
row0["username"] = "";
row0["password"] = "";
var row1 = MyData.NewRow();
row1["privilege"] = "admin";
row1["username"] = "admin";
row1["password"] = "8887abc";
var row2 = MyData.NewRow();
row2["privilege"] = "user";
row2["username"] = "user1";
row2["password"] = "abc123";
MyData.Rows.Add(row0);
MyData.Rows.Add(row1);
MyData.Rows.Add(row2);
comboBox1.DisplayMember = "privilege";
comboBox1.ValueMember = "username";
comboBox1.DataSource = MyData;
comboBox1.SelectedIndex = 0;
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
var cb = (sender as ComboBox);
var selectedItem = (cb.SelectedItem as DataRowView);
label1.Text = selectedItem["username"].ToString();
label2.Text = selectedItem["password"].ToString();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), "Error");
}
}
}
}
你需要提供完整的类/方法名代码,你不知道这是什么样的应用程序,桌面?web?我正在使用winform进行开发。您需要提供完整的类/方法名称代码,您无法知道这是什么类型的应用程序,桌面?web?我正在使用winform进行开发。如果只有一个项目与搜索匹配,为什么会得到一个数组?我有很多行。我认为必须使用foreach循环dt
中的所有行。你这样想吗?我做了编辑。我被windows ComboBox和web表单DropDownList搞混了。SelectedItem将是整个DataRow(或DataRowView),因此您拥有所需的一切。如果只有一个项目与搜索匹配,为什么要获得数组?我有很多行。我认为必须使用foreach循环dt
中的所有行。你这样想吗?我做了编辑。我被windows ComboBox和web表单DropDownList搞混了。SelectedItem将是整个DataRow(或DataRowView),因此您拥有所需的一切。