Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在WinForms列表框中显示多个访问数据库列?_C#_Winforms_Listbox - Fatal编程技术网

C# 如何在WinForms列表框中显示多个访问数据库列?

C# 如何在WinForms列表框中显示多个访问数据库列?,c#,winforms,listbox,C#,Winforms,Listbox,我有一个简单的access数据库,它有一个“项目ID”和一个“项目名称”。下面是一个例子 一把剑 2斧头 3猫 当尝试使用查询将其放入我的列表框时,它会显示“System.Data.DataRow”。 我已经找到了单独显示“项目ID”或“项目名称”的方法,但不能像我所希望的那样一起显示 如果有人能告诉我如何让它显示“一把剑”,那将是伟大的,因为我已经寻找了几个小时的答案了 private void RunQuery() { errorMsg = ""; q = SearchBox

我有一个简单的access数据库,它有一个“项目ID”和一个“项目名称”。下面是一个例子

一把剑

2斧头

3猫

当尝试使用查询将其放入我的列表框时,它会显示“System.Data.DataRow”。 我已经找到了单独显示“项目ID”或“项目名称”的方法,但不能像我所希望的那样一起显示

如果有人能告诉我如何让它显示“一把剑”,那将是伟大的,因为我已经寻找了几个小时的答案了

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列中同时显示这两个。