【发布时间】:2020-03-18 20:52:11
【问题描述】:
我正在使用以下代码从数据表中填充一个组合框:
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 不属于表。”
我不明白为什么这不起作用。当我在谷歌上搜索这个问题时,我看到了很多类似的解决方案。
【问题讨论】:
-
在您的
dt.Load(reader);行之后运行您的注释代码。 -
@LarsTech - 将代码移到
dt.Load(reader);之后就可以了。再次感谢!
标签: c# winforms datatable combobox datarow