从数据库将数据插入comboBox

时间:2018-07-17 09:53:15

标签: c#

我想使用类从组合表中的客户表中添加所有ID,这是我的连接类connectionClass,在其中我做了一个从数据库选择数据的功能。 第二个是我的客户表单(这是客户表单编码customerForm),其中我调用了在连接类中创建的函数。 但它只显示客户表单中的最后一个ID,我想在组合框中显示所有ID

3 个答案:

答案 0 :(得分:0)

在select()方法中,您将返回一个字符串,而不是您需要填充的字符串 数据集并将数据绑定到组合框。

        reader = sc.ExecuteReader();
        DataTable dt = new DataTable();
        dt.Columns.Add("customerid", typeof(string));
        dt.Columns.Add("contactname", typeof(string));
        dt.Load(reader);

致谢 钱德拉

答案 1 :(得分:0)

返回string而不是List of strings如下:

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

    public void Fill_Combo()
    {
        Connection2DB cst = new Connection2DB();
        cmbBoxId.Items.AddRange(cst.Select().ToArray());
    }
}

class Connection2DB
{
    public List<string> Select()
    {
        var ids = new List<string>();

        try
        {
            string sqlqry = "select ID from Customer";
            SqlCommand cmds = new SqlCommand(sqlqry, _con);
            SqlDataReader dr = cmds.ExecuteReader();

            while (dr.Read())
            {
                ids.Add(dr["ID"].ToString());
            }
        }
        catch (Exception ex)
        {
            // Handle exception here
        }
        return ids;
    }
}

答案 2 :(得分:0)

  

此函数仅返回“客户”表中的ID。我想使用相同的方法从客户表中获取多个数据。您能帮我吗?

通常,这不是本网站的工作方式。首先,您应该问一个特定的问题,并展示您所做的事情。那我们可以为您服务。

在这里,我将尝试为您提供两种使用数据库的常规解决方案。

解决方案1:

让我们说您想将从数据库检索到的所有内容显示到Windows窗体中。

首先,创建DataGridView对象,我们将其称为dataGridView1。您可以使用设计器将其创建为其他任何控件。然后使用以下代码:

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

        dataGridView1.DataSource = GetData();
    }

    public DataTable GetData()
    {
        string ConStr = " your connection string ";  // Write here your connection string

        string query = @"SELECT * FROM Customer";   // or write your specific query

        DataTable dataTable = new DataTable();

        SqlConnection conn = new SqlConnection(ConStr);
        SqlCommand cmd = new SqlCommand(query, conn);
        SqlDataAdapter da = null;
        try
        {
            conn.Open();
            // create data adapter
            da = new SqlDataAdapter(cmd);
            // this will query your database and return the result to your datatable
            da.Fill(dataTable);
        }
        catch (Exception ex)
        {
            MessageBox.Show($"Cannot read database: {ex.Message}");
        }
        finally
        {
            conn.Close();

            if (da != null)
                da.Dispose();
        }
        return dataTable;
    }
    public void FillDataGrid()
    {
        Connection2DB cst = new Connection2DB();
        dataGridView1.DataSource = cst.GetData();
    }
}

解决方案2:

比方说,您要从数据库表中提取3列:ID (INT)Name (VARCHAR(100))Value (VARCHAR(MAX)

首先,创建一个类:

public class Customer
{
    public int ID { get; set; }
    public string Nmae { get; set; }
    public string Value { get; set; }
}

创建返回客户列表的函数:

public List<Customer> GetCustomers()
{
    var customers = new List<Customer>();

    try
    {
        string sqlqry = "SELECT ID, Name, Value FROM Customer";
        SqlCommand cmds = new SqlCommand(sqlqry, _con); // here _con is your predefined SqlConnection object
        SqlDataReader dr = cmds.ExecuteReader();

        while (dr.Read())
        {
            customers.Add(new Customer
            {
                ID = (int)dr["ID"],
                Nmae = dr["Name"].ToString(),
                Value = dr["Value"].ToString(),
            });
        }
    }
    catch (Exception ex)
    {
        // Handle exception here
    }
    return customers;
}

然后,您可以根据需要使用此数据。例如,要用ID填充ComboBox,可以使用以下代码:

public void Fill_Combo()
{
    var customers = GetCustomers();
    var ids = customers.Select(x => x.ID.ToString());
    cmbBoxId.Items.AddRange(ids.ToArray());
}