从数据表中填充行后将其添加到WinForms组合框中

问题描述 投票:0回答:2

我正在使用以下代码从数据表填充组合框:

public void PopulateCategoryCbo()
{
    string connString = string.Format(<connectionString>);
    NpgsqlConnection conn = new NpgsqlConnection(connString);
    conn.Open();

    string query = "SELECT id, category FROM categories ORDER BY category";
    NpgsqlCommand cmd = new NpgsqlCommand(query, conn);

    NpgsqlDataReader reader;
    reader = cmd.ExecuteReader();

    DataTable dt = new DataTable();
    //DataRow row = dt.NewRow();
    //row["id"] = 0;
    //row["category"] = "All Categories";
    //dt.Rows.InsertAt(row, 0);

    dt.Columns.Add("id", typeof(string));
    dt.Columns.Add("category", typeof(string));
    dt.Load(reader);

    cboSelectCategory.ValueMember = "id";
    cboSelectCategory.DisplayMember = "category";
    cboSelectCategory.DataSource = dt;

    conn.Close();
}

[四行注释是我试图在数据表的顶部添加索引为0的“所有类别”行。我按照this SO question and answer编写了该代码。

但是,当我运行该解决方案时,它在row["id"] = 0;行处中断,并显示消息,'列“ id”不属于表。'

我尝试使用0和1,认为它们将引用列的索引值,但是我得到了消息'列0不属于表。

我不明白为什么这不起作用。当我搜索此问题时,我看到了很多类似的解决方案。

c# winforms datatable combobox datarow
2个回答
0
投票

您正在向dt添加一行,这是一个没有列的新DataTable。如果要填充数据表,请查看DbDataAdapter.Fill而不是DbDataReader。填写数据表,然后添加您的行。


0
投票

不是原始问题的答案,但是使用下面的方法,您将消除主要问题。

© www.soinside.com 2019 - 2024. All rights reserved.