我希望将数据添加到comboboxlist中,但不确定执行此操作的正确方法。数据来自原始SQL语句。
我直接从数据库中查看了绑定数据,但不清楚所有这些绑定和数据集对我来说是如何工作的,所以我决定跳过这一步,自己将数据插入到组合框中(在您的帮助下)。
我在网上看到的代码如下:
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
来源:http://tipsntricksbd.blogspot.com/2007/12/combobox-is-one-of-most-common-gui.html
ComboBox是最常见的GUI元素之一。它用于为用户提供从列表中选择项目或输入新文本的便利。在这里,我将使用MicrosoftVisualStudio.Net 2005向您展示C#中ComboBox的一些常见和有用的功能。
最简单的组合框:
在最简单的情况下,我们在列表中添加一些字符串,如下所示-
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.Sorted = true;
DropDownStyle:
在组合框中,用户可以输入文本,也可以只从列表中选择一个项目。所以开发者应该设置自己的风格。有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.AutoCompleteSource = AutoCompleteSource.ListItems;
myComboBox.AutoCompleteMode = AutoCompleteMode.Suggest;
技巧:
可能存在用户选择一些可读文本的情况,但对于程序员来说,相应的值(而不是所选择的文本)是重要的。例如,在数据库项目中,StudentID对程序员来说比StudentName更重要。因此,如果我们可以在组合框中添加(Name,Value)组合,并且在选择Name时,我们可以很容易地获得相应的值,那就太好了。
我们可以通过添加一个包含Name和Value的对象来实现。
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。这可能是你的问题。
此外,尝试稍微简化您的代码:
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是integer
,并且数据库中列出的所有字段都不可为null。
不,您不必创建一个新的类来将数据添加到组合框中,如果需要,只需添加字符串即可。上课是为了方便,在这里它们看起来当然很方便——你为什么要避开它们?(也许我不太理解你的问题…)
如果你要做的只是执行字符串操作,并一直在类上使用ToString()
,而不是访问单个属性,那么使用它是没有意义的——只需将其格式化为字符串并使用它。
不,您不必创建自己的类。。。但这确实对你正在做的事情有意义。在应用程序中,最好使用类类型来表示数据库实体。重写实体类的ToString()方法。接下来,将这些类类型直接插入到组合框中。ComboBox将在实体上调用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 ) );
}