我是winforms的新手,我正在使用一个组合框。我想学习如何从数据库加载到控件(Combobox)以及如何将值从Control(组合框)保存到数据库字段。
下面我需要一些关于来自Combobox的进程获取的帮助,并将/ select值放到组合框中......但是不知道怎么做......
下面我获取列表中的所有行并绑定到组合框。这很好,但喜欢做一些我正在努力的行动。
有人可以建议如何做这些动作吗?
我想在comboboxList中“添加”一个空值,这样他们也可以在comboboxlist中选择一个空值。
如何在从DB到Control时选择组合框中的值..我这样做 comboboxAccount.SeletedText = _account.Number,但它没有选择。
现在它在组合框中显示“数字”,但我想显示数字+“ - ”说明。这该怎么做?现在它显示在例如4000但我喜欢显示“4000 - Description1”
我喜欢将Account.Id存储到数据库而不是Account.Number,但我怎么能这样做,因为组合框显示数字...所以SelectedText不是我想要的。
代码:
public class Account
{
public Int32 Id { get; set; } e.g. 1
public string Number{ get; set; } e.g. 4000 (alpha-numeric)
public string Description1 { get; set; } e.g. Customer
public string Description2 {get; set;} e.g. VAT account
public string Language {get; set;} e.g. EN
}
//returns all rows
IList<Account> _account = new List<Account>(Account_repository.GetAll());
comboboxAccount.DataSource = account;
comboboxAccount.DisplayMember = "Number";
comboboxAccount.Add(??); (see point 1)
//saving to database
Client _client = new Client();
_client.Account = comboboxAccount.??; (see point 4)
答案 0 :(得分:1)
首先,我认为你应该使用类似字典或列表的内容&gt;或DataTable。
1)您应该在列表中插入空值,然后将其绑定到组合框
_account.Insert(0, "Empty");
2)同时定义你的ValueMember(你应该有一个List或一个DataTable):
如果您有DataTabele:
comboboxAccount.ValueMember = "columnID";
comboboxAccount.DisplayMember = "columnValue";
comboboxAccount.DataSource = yourDataTable;
combobox.SelectedIndex = 0; //your empty value
3)您应该在类中创建另一个属性并将其用作DisplayMember;
string NumberDescription{ get; set; };
comboboxAccount.DisplayMember = "NumberDescription";
4)如果要存储所选值的ID,则应使用先前定义的ValueMember(列ID):
int value = Convert.ToInt32(cbomboboxAccount.SelectedValue);
// if you want to save the text of the value selected in the combobox:
string strValue = comboboxAccount.Text;
答案 1 :(得分:1)
1)我想在comboboxList的“顶部”添加一个空值,以便它们可以 还要在comboboxlist中选择一个空值。
如果设置了DataSource属性,则永远不能将项直接添加到comobbox项。 因此,在将其设置为DataSource之前,应使用empyt / dummy对象更新列表(数据源)。 您可能必须找到一种方法来描述您当前的对象是虚拟对象。
示例,您可以引入一个EmptyItem属性,并在保存之前处理/过滤它:
public class Account
{
public Account(bool isEmptyItem =false)
{
this.EmptyItem = isEmptyItem;
}
public Int32 Id { get; set; }
public string Number { get; set; }
public string Description1 { get; set; }
public string Description2 { get; set; }
public string Language { get; set; }
public bool EmptyItem { get; private set; }
}
IList<Account> _account = new List<Account>();
_account.Add(new Account(true))
_account.AddRange(Account_repository.GetAll());
2)*当从DB到Control时,如何在组合框中选择一个值..我正在做这个comboboxAccount.SeletedText = _account.Number,但它没有选择。*
由于comboBox绑定到对象,因此您无法设置其SelectedText
而应使用SelectedItem
示例://您需要编写逻辑以了解如何获取此项目。
this.comboboxAccount.SelectedItem = this.comboboxAccount.Items[1];
3)现在它在组合框中显示“数字”,但我想显示数字+“ - ” 描述。这该怎么做?现在它显示在例如4000但我喜欢 显示“4000 - Description1”
您可能需要公开另一个说法DisplayText
并将其绑定到组合框的DisplayMember
。
示例强>:
public class Account
{
public string Number { get; set; }
public string Description1 { get; set; }
public bool EmptyItem { get; private set; }
public string DisplayText
{
get{return this.Number + "-" + this.Description1}
}
}
this.comboboxAccount.DisplayMember = "DisplayText";
4)我喜欢将Account.Id存储到数据库而不是 Account.Number,但是我怎么能这样做,因为组合框正在显示 数字...所以SelectedText不是我想要的。
您应该使用SelectedItem
,因为您已绑定了一个对象
var account = this.comboboxAccount.SelectedItem as Account;
var accountID = account.Id;