使用数据填充ComboBox

时间:2012-08-10 09:49:24

标签: c#

我想在选择单选选项后在组合框内显示数据库中的项目。当我尝试这个时,组合框中没有显示任何内容。请帮助

private void chkDetailsButton_Click(object sender, EventArgs e)
{
    if (radioButtonA.Checked)
    {
        OleDbConnection connect = db.dbConnect();

        try
        {
            connect.Open();
            MessageBox.Show("Opened");
            OleDbCommand command = new OleDbCommand();
            command.Connection = connect;

            command.CommandText = "Select * from Categories";
            DataTable dt = new DataTable();

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                cmbDisplay.Items.Add(dt.Rows[i]["SeatNo"]);
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Exception in Database" + ex);
        }
        finally
        {
            connect.Close();
        }
    }
}

6 个答案:

答案 0 :(得分:4)

您的try块应类似于以下内容:

    try
    {
        connect.Open();
        MessageBox.Show("Opened");
        OleDbCommand command = new OleDbCommand();
        command.Connection = connect;

        command.CommandText = "Select * from Categories";
        DataTable dt = new DataTable();

        //Put some data in the datatable!!
        using(OleDbDataReader reader = command.ExecuteReader())
        {
            dt.Load(reader);
        }

        for (int i = 0; i < dt.Rows.Count; i++)
        {
            cmbDisplay.Items.Add(dt.Rows[i]["SeatNo"]);
        }
    }

您需要使用数据填充DataTable!

您可能还会考虑以下事项:

        using(OleDbDataReader reader = command.ExecuteReader())
        {
            while(reader.Read())
            {
                cmbDisplay.Items.Add(reader.GetValue(reader.GetOrdinal("SeatNo"));
            }
        }

这样你甚至不需要使用DataTable;对于大型数据集,这是一种更有效的方法。

另外,您可以考虑使用Using

    using(OleDbConnection connect = db.dbConnect())
    {
        try
        {
            connect.Open();
            //MessageBox.Show("Opened");
            using(OleDbCommand command = new OleDbCommand())
            {
                command.Connection = connect;
                command.CommandText = "SELECT * FROM Categories";
                using(IDataReader reader = command.ExecuteReader())
                {
                    while(reader.Read())
                    {
                            cmbDisplay.Items.Add(reader.GetValue(reader.GetOrdinal("SeatNo"));
                    }
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("An erorr occured:" + ex);
        }        
    }

这将确保处理您的连接,命令和读取器对象。如果您打算保留连接的实例,这是不合适的,因为一旦您的代码离开using语句,它将被关闭并处理。

答案 1 :(得分:3)

缺少使用数据填充DataTable dt,这些数据由sql命令返回。

答案 2 :(得分:1)

尝试使用此代码 - 在您的示例中,您不会将表与数据绑定,而是创建表的新实例。

$ private void chkDetailsButton_Click(object sender, EventArgs e) 
{
 if (radioButtonA.Checked)
        {
            OleDbConnection connect = db.dbConnect();

            try
            {
                connect.Open();
                MessageBox.Show("Opened");
                OleDbCommand command = new OleDbCommand();
                command.Connection = connect;

                command.CommandText = "Select * from Categories";
                OleDbDataReader myReader = command.ExecuteReader();
                while (myReader.Read()) 
                {
                    cmbDisplay.Items.Add(myReader["SeatNo"]);
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show("Exception in Database" + ex);
            }
            finally
            {
                connect.Close();
            }
        }
    }

答案 3 :(得分:0)

我无法相信这一点。 :d

您何时使用来自数据库的数据填充DataTable?

之间没有任何内容

DataTable dt = new DataTable();

for (int i = 0; i < dt.Rows.Count; i++)

答案 4 :(得分:0)

你可以用数据表填充组合框:

SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=Test;Integrated Security=True");
            SqlDataAdapter da = new SqlDataAdapter("select * from Books",con);
            DataTable dt = new DataTable();
            da.Fill(dt);
            comboBox1.DisplayMember = "Name";
            comboBox1.ValueMember = "ID";
            comboBox1.DataSource = dt;

答案 5 :(得分:0)

在尝试使用

之前,您没有在数据集中填充数据
     if(radio.checked) 
     {
      try 
        { 
         connect.Open();
         MessageBox.Show("Opened");
         OleDbCommand command = new OleDbCommand();
         command.Connection = connect;
         command.CommandText = "Select * from Categories";

         OleDbDataAdapter db = new OleDbDataAdapter();
         DataSet ds = new DataSet();
         db.SelectCommand = command;
         db.Fill(ds);
         for(int i=0;i<ds.Tables[0].Rows.Count;i++)
         {
           cmbDisplay.Items.Add(ds.Tables[0].Rows[i][0].ToString());      

          }
        cmDisplay.DataBind();

        }
        catch (Exception ex)
        {
            MessageBox.Show("Exception in Database" + ex);
        }
        finally
        {
            connect.Close();
        }
    }