C# 向组合框添加数据(未绑定数据)
我希望向comboboxlist中添加数据,但我不确定这样做的正确方法。数据来自原始SQL语句 我直接从数据库中查看了绑定数据,但不清楚所有这些绑定和数据集对我来说是如何工作的,所以我决定跳过这一步,自己(在您的帮助下)将数据插入combox 我在网上看到的代码如下所示: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
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…@Andrerdata[“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中指定它