Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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# 获取列表框中列表的所有项目_C#_List_Listbox - Fatal编程技术网

C# 获取列表框中列表的所有项目

C# 获取列表框中列表的所有项目,c#,list,listbox,C#,List,Listbox,我希望你能帮我解决这个问题 我不能把啤酒放在列表框里。当我尝试这样做时,我会在列表框中看到: 我不知道如何在列表框中获取此对象 我已使用以下代码进行了尝试: 在这里,我要求数据库从beertable中选择所有特征 public List <Beer> ReadBeers() { string query = "SELECT * FROM beer"; MySqlCommand cmd = new MySqlCommand(query, conn); List

我希望你能帮我解决这个问题

我不能把啤酒放在列表框里。当我尝试这样做时,我会在列表框中看到:

我不知道如何在列表框中获取此对象

我已使用以下代码进行了尝试: 在这里,我要求数据库从beertable中选择所有特征

public List <Beer> ReadBeers()
{
    string query = "SELECT * FROM beer";
    MySqlCommand cmd = new MySqlCommand(query, conn);
    List<Beer> beerList = new List <Beer>();

    using (MySqlDataReader reader = cmd.ExecuteReader())
    {
        while (reader.Read())
        {
            string name = reader.GetString(1);
            string brand = reader.GetString(2);
            int dato = reader.GetInt32(3);
            int beerType = reader.GetInt32(4);
            Beer myBeer = new Beer(name, brand, dato, beerType);
            beerList.Add(myBeer);
            Console.WriteLine();
        }
    }
    return beerList;
}    

}

您需要将
列表
作为
数据源
绑定到
列表框
,并设置正确的
数据文本字段
属性。确保值或文本字段中使用的类变量标记为
Public

beerlistBox.DataSource = dbbeer.ReadBeers();
beerlistBox.DataTextField = "name"; // This should be beer's name property 
beerlistBox.DataBind();

您需要将
列表
作为
数据源
绑定到
列表框
,并设置正确的
数据文本字段
属性。确保值或文本字段中使用的类变量标记为
Public

beerlistBox.DataSource = dbbeer.ReadBeers();
beerlistBox.DataTextField = "name"; // This should be beer's name property 
beerlistBox.DataBind();

您正在添加对象本身,因此将调用基类的
ToString()
方法(.NET中的每个对象继承
对象类
包括您的啤酒类),该方法将返回projectname.classname。您需要使用啤酒类的属性:
name

修正该行:
beerlistBox.Items.Add(beer.name)


您正在添加对象本身,因此将调用基类的
ToString()
方法(.NET中的每个对象继承
对象类
包括您的啤酒类),该方法将返回projectname.classname。您需要使用啤酒类的属性:
name

修正该行:
beerlistBox.Items.Add(beer.name)


当您调试应用程序时,逐步通过while循环,您会得到读取器对象的哪些值。。另外,我建议通过名称而不是索引位置来访问读卡器字段,我可以用哪种方式来访问?另外,不要在查询中使用
*
。在大多数情况下,这将导致您绕过索引,或者使用索引查找,而不是仅使用索引中的数据(如果可用)(这也会导致检索您永远不会使用的列)。最后,由于您是通过索引进行检索,如果重新排列列会发生什么情况?reader[“fieldname”].ToString()或在适当的情况下使用强制转换将数据库中的fieldname替换为实际的数据库列名当您调试应用程序时,通过while循环,您为reader对象获得了哪些值。。另外,我建议通过名称而不是索引位置来访问读卡器字段,我可以用哪种方式来访问?另外,不要在查询中使用
*
。在大多数情况下,这将导致您绕过索引,或者使用索引查找,而不是仅使用索引中的数据(如果可用)(这也会导致检索您永远不会使用的列)。最后,因为您是通过索引进行检索,如果列被重新排列会发生什么?reader[“fieldname”]。ToString()或在适当的情况下使用casting在您的databaseDataTextField中用实际的数据库列名替换fieldname在我尝试执行您的建议时不会出现。您没有给我们Beer类定义,所以我猜name属性叫做“name”。将其更改为beer的name属性。我将添加beer类,也许你可以改进你的答案。我编辑了我的答案。你需要公开你的DataTextField和DataValueField属性。当我尝试执行你的建议时,DataTextField不会出现。你没有给我们Beer类定义,所以我只是猜测name属性名为“name”。将其更改为beer的name属性。我将添加beer类,也许你可以改进你的答案。我编辑了我的答案。您需要公开DataTextField和DataValueField属性。
beerlistBox.DataSource = dbbeer.ReadBeers();
beerlistBox.DataTextField = "name"; // This should be beer's name property 
beerlistBox.DataBind();
private void fillListbox_Click(object sender, EventArgs e)
{
    beerlistBox.Items.Clear();
    dbbeer.DatabaseConnect();
    List<Beer> beerList = dbbeer.ReadBeers();
    foreach (Beer beer in beerList)
    {
        beerlistBox.Items.Add(beer.name); // use the property "name"
    }
    dbbeer.DatabaseDisconnect();
}
class Beer

{
    public string name;
    public string brand;
    public int dato;
    public int beertype;

    // the rest of all methods and constructors
    // ...

    // overide the base class (object class) ToString() method
    public override string ToString()
    {
        return this.name;
    }

}