C# 如何从DataTable到combobox获取值?

C# 如何从DataTable到combobox获取值?,c#,combobox,datatable,C#,Combobox,Datatable,我用C#编写winform应用程序。将combobox与数据表一起使用时出现问题。 我有DataTable像: **privilege** **username** **password** admin admin 8887abc user user1 abc123 然后我将其加载到组合框。仅显示权限列,当用户单击“管理员”或“用户”时,它会

我用C#编写winform应用程序。将combobox与数据表一起使用时出现问题。 我有
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),因此您拥有所需的一切。