【问题标题】:How to show multiple Access database columns in a WinForms ListBox?如何在 WinForms 列表框中显示多个 Access 数据库列?
【发布时间】:2016-06-02 05:38:54
【问题描述】:

我有一个简单的访问数据库,它有一个“ITEM ID”和一个“ITEM NAME”。下面是一个例子。

1 剑

2 斧

3 猫

当尝试使用查询将其放入我的列表框中时,它会显示“System.Data.DataRow”。 我找到了单独显示“ITEM ID”或“ITEM NAME”的方法,但没有按照我的意愿一起显示。

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

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(必需)。我也不想使用列表框以外的任何东西。除了这个问题之外,它还具有我想要的外观并且可以满足我的一切需求。

【问题讨论】:

  • “ITEM ID”和“ITEM NAME”的列名是什么?在您的查询中执行此操作 ITEMID(columnname) + ' ' + ITEMNAME(columnname) AS ITEM
  • 现在它们在数据库中被命名为 ITEM ID 和 ITEM NAME

标签: c# winforms listbox


【解决方案1】:

试试这个:

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)
    {}
}

【讨论】:

  • 我确实尝试过,但是当使用 SELECT * FROM ITEMS 时它仍然不显示项目 ID,因为查询只显示项目名称
  • 修改sql代码为SELECT [ITEM ID] , ([ITEM ID] +' '+ [ITEM NAME]) AS [ITEM NAME] FROM ITEMS
  • 出现错误“提供程序无法确定 Double 值。例如,该行刚刚创建,Double 列的默认值不可用,消费者尚未设置新的 Double 值。等等看你的改变,看看它是否改变。编辑:是的仍然是相同的消息
  • @YuriSuzumiya 我可以建议你不要在列名中使用空格。当你说The provider could not determine the Double value - 为什么要使用 Double 数据类型,只需对 Item_ID 列使用 Integer 数据类型
  • 我使用的是整数,我不知道为什么它抱怨双精度
【解决方案2】:

ListBox 控件不支持多列显示。改用 ListView 控件并添加子项

【讨论】:

  • 我从不想要多列显示,我想在现在工作的 1 列中同时显示。
猜你喜欢
  • 2014-07-01
  • 1970-01-01
  • 2020-08-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-13
  • 2013-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多