C# 如何从Access数据集/数据库填充组合框

C# 如何从Access数据集/数据库填充组合框,c#,combobox,dataset,C#,Combobox,Dataset,我遇到了一个难题,下一步该怎么做才能从我现有的数据集中填充一个组合框。我的数据库名为PID2db.mdb,表名为Customer string strCon = Properties.Settings.Default.PID2dbConnectionString; OleDbConnection conn = new OleDbConnection(strCon); try { conn.Open();

我遇到了一个难题,下一步该怎么做才能从我现有的数据集中填充一个组合框。我的数据库名为PID2db.mdb,表名为Customer

        string strCon = Properties.Settings.Default.PID2dbConnectionString;
        OleDbConnection conn = new OleDbConnection(strCon);
        try {
            conn.Open();
            string strSql = "Select forename,surname from customer where [customerID] ='" + txtName.Text + "'";
             OleDbDataAdapter adapter = new OleDbDataAdapter(new OleDbCommand(strSql, conn));
            DataSet ds = new DataSet();
            adapter.Fill(ds);
            cboName.DataSource = ds.Tables[0];
            cboName.DisplayMember = "forename";
            cboName.ValueMember = "surname";
        }
        finally {
            conn.Close();
        }
    }
谢谢你的帮助


编辑:添加新的代码段

您需要创建一个新的数据集,用数据填充它,最后设置组合框的、和属性。代码如下:

using System.Data.OleDb;

            string strCon = Properties.Settings.Default.PID2dbConnectionString;
            OleDbConnection conn = new OleDbConnection(strCon);
            try {
                conn.Open();
                string strSql = "Select forename,surname from customer where customer id ='" + txtName.Text + "'";
                OleDbDataAdapter adapter = new OleDbDataAdapter(new OleDbCommand(strSql, conn);
                DataSet ds = new DataSet();
                adapter.Fill(ds);
                comboBox1.DataSource = ds.Tables[0];
                comboBox1.DisplayMember = "forename";
                comboBox1.ValueMember = "surname";
            }
            finally {
                conn.Close();
            }

您需要创建一个新的数据集,用数据填充它,最后设置组合框的、和属性。代码如下:

using System.Data.OleDb;

            string strCon = Properties.Settings.Default.PID2dbConnectionString;
            OleDbConnection conn = new OleDbConnection(strCon);
            try {
                conn.Open();
                string strSql = "Select forename,surname from customer where customer id ='" + txtName.Text + "'";
                OleDbDataAdapter adapter = new OleDbDataAdapter(new OleDbCommand(strSql, conn);
                DataSet ds = new DataSet();
                adapter.Fill(ds);
                comboBox1.DataSource = ds.Tables[0];
                comboBox1.DisplayMember = "forename";
                comboBox1.ValueMember = "surname";
            }
            finally {
                conn.Close();
            }

假设您有一个包含以下内容的表单:

名为cboName的组合框 名为txtName的文本框 试试这个:

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            LoadCustomerOnCombo();
        }

        private void LoadCustomerOnCombo()
        {
            string strCon = Settings.Default.PID2dbConnectionString;

            try
            {
                using (OleDbConnection conn = new OleDbConnection(strCon))
                {
                    conn.Open();
                    string strSql = "SELECT forename &\" \" & surname AS FullName, surname FROM customer"; //WHERE [customerID] ='" + txtName.Text + "'";
                    OleDbDataAdapter adapter = new OleDbDataAdapter(new OleDbCommand(strSql, conn));
                    DataSet ds = new DataSet();
                    adapter.Fill(ds);
                    cboName.DataSource = ds.Tables[0];
                    cboName.DisplayMember = "FullName";
                    cboName.ValueMember = "surname";
                }     
            }
            catch (Exception ex)
            {
                txtName.Text = ex.Message;
                Console.WriteLine(ex.Message);
            }
        }
    }

如果工作正常,请告诉我当前左侧注释的where是如何的,否则有任何错误,您将在文本框内看到。

假设您有一个包含以下内容的表单:

名为cboName的组合框 名为txtName的文本框 试试这个:

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            LoadCustomerOnCombo();
        }

        private void LoadCustomerOnCombo()
        {
            string strCon = Settings.Default.PID2dbConnectionString;

            try
            {
                using (OleDbConnection conn = new OleDbConnection(strCon))
                {
                    conn.Open();
                    string strSql = "SELECT forename &\" \" & surname AS FullName, surname FROM customer"; //WHERE [customerID] ='" + txtName.Text + "'";
                    OleDbDataAdapter adapter = new OleDbDataAdapter(new OleDbCommand(strSql, conn));
                    DataSet ds = new DataSet();
                    adapter.Fill(ds);
                    cboName.DataSource = ds.Tables[0];
                    cboName.DisplayMember = "FullName";
                    cboName.ValueMember = "surname";
                }     
            }
            catch (Exception ex)
            {
                txtName.Text = ex.Message;
                Console.WriteLine(ex.Message);
            }
        }
    }


如果工作正常,请告诉我现在左边的注释是什么,否则有任何错误,你会在文本框内看到。

我以前看过,我只是想不通,我对COk很陌生,尝试一下这个例子:。如果您有一些错误/问题,请添加一些代码以供审阅;好的,给我一点时间。我将尝试添加另一个示例。我不明白where条款。。。您的列名是CustomerID吗?你试着用字符串搜索吗?哦,天哪,我是个白痴!组合框现在已满,谢谢您的帮助!我现在觉得自己很蠢:我该如何让组合框同时显示名字和姓氏呢?我之前已经看过了,我只是想不通,我对COk很陌生,试试这个例子:。如果您有一些错误/问题,请添加一些代码以供审阅;好的,给我一点时间。我将尝试添加另一个示例。我不明白where条款。。。您的列名是CustomerID吗?你试着用字符串搜索吗?哦,天哪,我是个白痴!组合框现在已满,谢谢您的帮助!我现在觉得自己很愚蠢:我该如何让combobox同时显示名字和姓氏?它仍然没有将数据设置到combox中,并且没有错误消息出现。你的答案值得一次向上投票,但没有说字符串连接是一种非常糟糕的做法,而不是一次向下投票。Draw.如果您确实有一个名为“customer id”的字段,那么您需要在该名称周围加上方括号[customer id]添加方括号无效:/@Steve,我刚刚从问题中复制了select命令。我决定不更改select命令,它仍然没有将数据设置到combox中,并且没有出现错误消息。您的答案值得一次向上投票,但没有说字符串串联是一种非常糟糕的做法,而不是一次向下投票。Draw.如果您确实有一个名为“customer id”的字段,那么您需要在该名称周围加上方括号[customer id]添加方括号无效:/@Steve,我刚刚从问题中复制了select命令。我决定不改变“选择命令”太棒了!谢谢你,我怎样才能让姓氏和名字都出现在组合框中呢?谢谢!帮了我很多忙!伟大的我很高兴你帮了我。始终尝试添加更多数据和一些代码,以便更容易找到正确的解决方案:DWWorks很棒!谢谢你,我怎样才能让姓氏和名字都出现在组合框中呢?谢谢!帮了我很多忙!伟大的我很高兴你帮了我。始终尝试添加更多数据和一些代码,以便更容易找到正确的解决方案:D