如何在WinForms ListBox中显示多个Access数据库列?

时间:2016-06-02 05:38:54

标签: c# winforms listbox

我有一个简单的访问数据库,其中包含“ITEM ID”和“ITEM NAME”。以下是一个例子。

1剑

2 Ax

3只猫

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

如果有人能告诉我如何让它出现“1 Sword”,那将是很棒的,因为我现在一直在寻找答案。

{{1}}

现在我正在使用一个查询框调用上面的内容,希望能将结果显示在listBox上。

我也在Visual Studio 2015中使用WinForms(必需)。我也不想使用除listBox之外的任何东西。除了这个问题,它有我想要的外观,并做我需要的一切。

2 个答案:

答案 0 :(得分:2)

试试这个:

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

答案 1 :(得分:0)

ListBox控件不支持多列显示。请尝试使用ListView控件并添加子项