C# 如何在WinForms列表框中显示多个访问数据库列?
我有一个简单的access数据库,它有一个“项目ID”和一个“项目名称”。下面是一个例子 一把剑 2斧头 3猫 当尝试使用查询将其放入我的列表框时,它会显示“System.Data.DataRow”。 我已经找到了单独显示“项目ID”或“项目名称”的方法,但不能像我所希望的那样一起显示 如果有人能告诉我如何让它显示“一把剑”,那将是伟大的,因为我已经寻找了几个小时的答案了C# 如何在WinForms列表框中显示多个访问数据库列?,c#,winforms,listbox,C#,Winforms,Listbox,我有一个简单的access数据库,它有一个“项目ID”和一个“项目名称”。下面是一个例子 一把剑 2斧头 3猫 当尝试使用查询将其放入我的列表框时,它会显示“System.Data.DataRow”。 我已经找到了单独显示“项目ID”或“项目名称”的方法,但不能像我所希望的那样一起显示 如果有人能告诉我如何让它显示“一把剑”,那将是伟大的,因为我已经寻找了几个小时的答案了 private void RunQuery() { errorMsg = ""; q = SearchBox
private void RunQuery()
{
errorMsg = "";
q = SearchBoxItemsAll.Text;
try
{
OleDbCommand cmd = new OleDbCommand(q, conn);
OleDbDataAdapter a = new OleDbDataAdapter(cmd);
DataTable dt = new DataTable();
a.SelectCommand = cmd;
a.Fill(dt);
a.Dispose();
listBox1.DataSource = dt;
catch (Exception ex)
{}
}
现在我使用一个查询框来调用上面的函数,希望它能将结果显示在列表框中
我还在visual studio 2015中使用WinForms(必选)。我也不想使用列表框以外的任何东西。除此之外,它还有我想要的外观,可以满足我的所有需求。试试这个:
private void RunQuery()
{
errorMsg = "";
q = SearchBoxItemsAll.Text;
try
{
OleDbCommand cmd = new OleDbCommand(q, conn);
OleDbDataAdapter a = new OleDbDataAdapter(cmd);
DataTable dt = new DataTable();
a.SelectCommand = cmd;
a.Fill(dt);
a.Dispose();
foreach(var v in dt.Rows)
{
listBox1.Items.Add(v[0].ToString()+" "+v[1].ToString());
}
}
catch (Exception ex)
{}
}
更好的方法是指定DisplayMember和ValueMember并更改SQL:
private void RunQuery()
{
errorMsg = "";
//q = SearchBoxItemsAll.Text;
//Concatenate the ID and the Name in the SQL Query
q = "SELECT [ITEM ID] , ([ITEM ID] +' '+ [ITEM NAME]) AS [ITEM NAME] FROM ITEMS";
try
{
OleDbCommand cmd = new OleDbCommand(q, conn);
OleDbDataAdapter a = new OleDbDataAdapter(cmd);
DataTable dt = new DataTable();
a.SelectCommand = cmd;
a.Fill(dt);
a.Dispose();
listBox1.DisplayMember = "ITEM_NAME";
listBox1.ValueMember = "ITEM_ID";
listBox1.DataSource = dt;
}
catch (Exception ex)
{}
}
试试这个:
private void RunQuery()
{
errorMsg = "";
q = SearchBoxItemsAll.Text;
try
{
OleDbCommand cmd = new OleDbCommand(q, conn);
OleDbDataAdapter a = new OleDbDataAdapter(cmd);
DataTable dt = new DataTable();
a.SelectCommand = cmd;
a.Fill(dt);
a.Dispose();
foreach(var v in dt.Rows)
{
listBox1.Items.Add(v[0].ToString()+" "+v[1].ToString());
}
}
catch (Exception ex)
{}
}
更好的方法是指定DisplayMember和ValueMember并更改SQL:
private void RunQuery()
{
errorMsg = "";
//q = SearchBoxItemsAll.Text;
//Concatenate the ID and the Name in the SQL Query
q = "SELECT [ITEM ID] , ([ITEM ID] +' '+ [ITEM NAME]) AS [ITEM NAME] FROM ITEMS";
try
{
OleDbCommand cmd = new OleDbCommand(q, conn);
OleDbDataAdapter a = new OleDbDataAdapter(cmd);
DataTable dt = new DataTable();
a.SelectCommand = cmd;
a.Fill(dt);
a.Dispose();
listBox1.DisplayMember = "ITEM_NAME";
listBox1.ValueMember = "ITEM_ID";
listBox1.DataSource = dt;
}
catch (Exception ex)
{}
}
ListBox控件不支持多列显示。请改用ListView控件并添加子项ListBox控件不支持多列显示。改用ListView控件并添加子项什么是“项目ID”和“项目名称”的列名?在您的查询ITEMID(columnname)+''+ITEMNAME(columnname)中执行此操作作为ITEM现在它们在数据库中被命名为ITEM ID和ITEM NAME“ITEM ID”和“ITEM NAME”的列名是什么?在您的查询ITEMID(columnname)+''+ITEMNAME(columnname)中执行此操作作为ITEM现在它们在数据库中被命名为ITEM ID和ITEM NAME我确实尝试过,但是在使用SELECT*FROM ITEMS时它仍然不显示ITEM ID,因为查询只显示ITEM NAME将sql代码更改为
SELECT[ITEM ID],([ITEM ID]+''+[ITEM NAME]),如下所示[项目名称]FROM ITEMS
出现错误“提供商无法确定双精度值。例如,行刚刚创建,双精度列的默认值不可用,消费者尚未设置新的双精度值。”请稍候,我将查看您的更改,看看是否更改。编辑:是的,仍然相同message@YuriSuzumiya我能推荐你吗不要在列名中使用空格。当你说提供者无法确定双精度值时
-为什么要使用双精度数据类型,只需为项目ID列使用整数数据类型我使用的是整数,我不知道它为什么会抱怨双精度值,我确实尝试过,但是在使用SE时它仍然不会显示项目ID从项中选择*因为查询仅显示项名称将sql代码更改为SELECT[ITEM ID],([ITEM ID]+''+[ITEM NAME])作为[ITEM NAME]FROM ITEMS
出现错误“提供商无法确定双精度值。例如,行刚刚创建,双精度列的默认值不可用,消费者尚未设置新的双精度值。”请稍候,我将查看您的更改,看看是否更改。编辑:是的,仍然相同message@YuriSuzumiya我能推荐你吗不要在列名中使用空格。当你说,提供者无法确定双精度值时
-为什么要使用双精度数据类型,只需在Item\u ID列中使用整数数据类型我使用的是整数,我不知道为什么它会抱怨双精度显示我从不希望在1列中同时显示多列我从来没有想要多列显示,我想在1列中同时显示这两个。