C# 向组合框添加数据(未绑定数据)

C# 向组合框添加数据(未绑定数据),c#,user-interface,C#,User Interface,我希望向comboboxlist中添加数据,但我不确定这样做的正确方法。数据来自原始SQL语句 我直接从数据库中查看了绑定数据,但不清楚所有这些绑定和数据集对我来说是如何工作的,所以我决定跳过这一步,自己(在您的帮助下)将数据插入combox 我在网上看到的代码如下所示: public partial class Form1 : Form { // Content item for the combo box private class Item { public

我希望向comboboxlist中添加数据,但我不确定这样做的正确方法。数据来自原始SQL语句

我直接从数据库中查看了绑定数据,但不清楚所有这些绑定和数据集对我来说是如何工作的,所以我决定跳过这一步,自己(在您的帮助下)将数据插入combox

我在网上看到的代码如下所示:

public partial class Form1 : Form {
    // Content item for the combo box
    private class Item {
        public string Name;
        public int Value;
        public Item(string name, int value) {
            Name = name; Value = value;
        }
        public override string ToString() {
            // Generates the text shown in the combo box
            return Name;
        }
    }
    public Form1() {
        InitializeComponent();
        // Put some stuff in the combo box
        comboBox1.Items.Add(new Item("Blue", 1));
        comboBox1.Items.Add(new Item("Red", 2));
        comboBox1.Items.Add(new Item("Nobugz", 666));
    }

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) {
        // Display the Value property
        Item itm = (Item)comboBox1.SelectedItem;
        Console.WriteLine("{0}, {1}", itm.Name, itm.Value);
    }
}
您真的需要创建一个新类来向组合框添加数据吗? 此外,使用上述技术,我的代码如下所示:

    while (rdata.Read()){
        String Name = (String)rdata["vetName"];
        Name = Name.Trim();
        String Surname = (String)rdata["vetSurname"];
        Surname = Surname.Trim();

        String id = rdata["vetID"].ToString().Trim();

        MessageBox.Show("ID " + id);

        int value1 = Convert.ToInt32(id);
        MessageBox.Show("value1 " + value1);

        String display = (String)Name + " " + Surname;

        editVetComboBox.Items.Add(new Item(display, 2));
    }
问题是,虽然组合框中填充了名字和姓氏,但没有添加值(ID)。

有什么想法吗

非常感谢,,
Richard

不,您不必创建新类来向组合框添加数据,只要添加字符串即可。上课是为了方便,而且在这里似乎很方便——你为什么要避免上课?(也许我不太明白你的问题…)


如果您要做的只是执行字符串操作,并始终在类上使用
ToString()
,而不是访问单个属性,那么将其格式化为字符串并使用它就没有意义了。

我可以看到代码中的值始终是2。这可能是您遇到的问题

另外,尝试稍微简化代码:

while (rdata.Read())
{
    string name = (string)rdata["vetName"];
    string surname = (string)rdata["vetSurname"];
    int id = (int)rdata["vetID"];
    string display = name.Trim() + " " + surname.Trim();
    editVetComboBox.Items.Add(new Item(display, id));
}

假设vetID是
整数
,并且所有列出的字段在数据库中都不可为空。

不,您不必创建自己的类……但它确实对您所做的事情有意义。在应用程序中,最好使用类类型表示数据库实体。重写实体类的ToString()方法。接下来,将这些类类型直接插入组合框。组合框将对实体调用ToString()以显示文本

下面是它的样子:

public class Vet
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string SurName { get; set; }

    public Vet()
    {
        // default constructor
    }

    public Vet( IDataRecord record )
    {
        ID = (int) record["vetid"];
        Name = (string) record["vetname"];
        SurName = (string) record["vetsurname"];
    }

    public override string ToString()
    {
        return Name + " " + SurName;
    }
}
接下来,将实例直接添加到组合框中:

comboBox.Items.Clear();
while( rdata.Read() )
{
   comboBox.Items.Add( new Vet( rdata ) );
}
资料来源:

ComboBox是最常见的GUI元素之一。它用于为用户提供从列表中选择项目或输入新文本的便利。在这里,我将使用Microsoft Visual Studio.Net 2005向您展示C#中ComboBox的一些常见和有用的功能

最简单的组合框:

myComboBox.DropDownStyle = ComboBoxStyle.DropDown;
在最简单的情况下,我们在列表中添加一些字符串,如下所示-

myComboBox.Items.Add("Bangladesh");
myComboBox.Items.Add("India");
myComboBox.Items.Add("Pakistan");
myComboBox.Items.Add("Srilanka");
myComboBox.Items.Add("Maldives");
myComboBox.Items.Add("Nepal");
myComboBox.Items.Add("Bhutan");
排序列表:

myComboBox.DropDownStyle = ComboBoxStyle.DropDown;
通常,用户希望选项按排序顺序显示。为此,我们必须添加一行代码-

myComboBox.Sorted = true;
下拉式:

myComboBox.DropDownStyle = ComboBoxStyle.DropDown;
在ComboBox中,用户可以输入文本,也可以从列表中选择一项。因此开发人员应该设置它的样式。有3个可用选项:

ComboBoxStyle.DropDownList: User can just select one item from a list.
ComboBoxStyle.DropDown: User can either type a text or select an item from list.
ComboBoxStyle.Simple: User can only type a text in text box. Item list is not shown.
示例:

myComboBox.DropDownStyle = ComboBoxStyle.DropDown;
建议/词典:

myComboBox.DropDownStyle = ComboBoxStyle.DropDown;
当用户输入文本时,如果在键入时组合框下方显示一些建议,他/她会感到高兴。对于这个功能,我们需要写几行代码-

myComboBox.AutoCompleteSource = AutoCompleteSource.ListItems;
myComboBox.AutoCompleteMode = AutoCompleteMode.Suggest;
技巧:

myComboBox.DropDownStyle = ComboBoxStyle.DropDown;
用户可能会选择一些可读文本,但对于程序员来说,相应的值(而不是所选文本)很重要。例如,在数据库项目中,对于程序员来说,StudentID比StudentName更重要。所以,如果我们可以在组合框中添加(名称、值)组合,并且在选择名称时,我们可以轻松地获得相应的值,那就太好了

我们可以通过添加一个包含名称和值的对象来实现

class ComboBoxItem
{
public string Name;
public int Value;
public ComboBoxItem(string Name, int Value)
{
this.Name = Name;
this.Value = Value;
}
}


myComboBox.Items.Add(new ComboBoxItem("Ashis Saha",1));
myComboBox.Items.Add(new ComboBoxItem("Subrata Roy", 2));
myComboBox.Items.Add(new ComboBoxItem("Aminul Islam", 3));
myComboBox.Items.Add(new ComboBoxItem("Shakibul Alam", 4));
myComboBox.Items.Add(new ComboBoxItem("Tanvir Ahmed", 5));
但是如果您现在看到ComboBox列表,您会注意到所有项都是相同的,它们是这些对象的类名。事实上,这些项只是这些对象的ToString()函数的输出。因此,如果我们简单地重写ToString()函数,使其按照预期的方式运行,那么我们就完成了

class ComboBoxItem
{
public string Name;
public int Value;
public ComboBoxItem(string Name, int Value)
{
this.Name = Name;
this.Value = Value;
}

// override ToString() function
public override string ToString()
{
return this.Name;
}
}
您可以通过以下方式获取所选值-

int selectedValue = ((ComboBoxItem)myComboBox.SelectedItem).Value;

从你的代码看来,这个值总是2。这是一个打字错误吗?作为旁注,回答这样一个问题通常很方便,因为有一个关于代码在运行时的行为的信息(就像我要调试它一样)。您有多个消息框和
控制台。WriteLine
为您提供此类信息,但您没有提供给我们。如果代码中有注释,比如
//这里我有正确的值6
//由于某种原因,这里的值是1243
嗨,Alex,是的,我把值2放在那里只是为了测试,但没有添加值。我想
字符串名称=rdata[“vetName”]。ToString().Trim()更具可读性。但仅仅是说,它是一个+1…@Andre
rdata[“vetName”]
如果它不是可为空的字段,那么里面就已经有string对象了。如果它可以为null,那么您需要将rdata[“vetName”]作为字符串来执行。
。我可以很好地将数据取出,因为它不能为null。只是将项目添加到组合框的过程看起来像是一项任务……@DevilCode-我尝试了将项目添加到组合框的代码。对于我来说,我可以在comboBox1\u SelectedIndexChanged事件中看到值。代码中一定没有显示其他内容。此ID将是一个INT。但是如何将其分配给组合框函数只返回一个字符串(名称+姓氏)。在这种情况下,ToString()的重写在这种情况下有何作用?是否在强制转换var=(string)记录[“vetNames”]期间调用它;好的,也许问这个问题的更好方法是,我想添加字符串“Hello World”,关联值为“200”,以显示在组合框中。最简单的方法是:combobox.Items.Add(“helloworld”,200);将对象添加到组合框中时,组合框将对每个项目调用ToString(),以获取显示文本。在类类型中,您可以让ToString()返回您想要的任何内容。在这里,我有它返回'姓名+姓氏'。如果希望它返回其他内容,只需在return语句o中指定它