获得价值并为组合框带来价值

时间:2013-04-01 08:56:20

标签: c# winforms combobox

我是winforms的新手,我正在使用一个组合框。我想学习如何从数据库加载到控件(Combobox)以及如何将值从Control(组合框)保存到数据库字段。

下面我需要一些关于来自Combobox的进程获取的帮助,并将/ select值放到组合框中......但是不知道怎么做......

下面我获取列表中的所有行并绑定到组合框。这很好,但喜欢做一些我正在努力的行动。

有人可以建议如何做这些动作吗?

  1. 我想在comboboxList中“添加”一个空值,这样他们也可以在comboboxlist中选择一个空值。

  2. 如何在从DB到Control时选择组合框中的值..我这样做 comboboxAccount.SeletedText = _account.Number,但它没有选择。

  3. 现在它在组合框中显示“数字”,但我想显示数字+“ - ”说明。这该怎么做?现在它显示在例如4000但我喜欢显示“4000 - Description1”

  4. 我喜欢将Account.Id存储到数据库而不是Account.Number,但我怎么能这样做,因为组合框显示数字...所以SelectedText不是我想要的。

  5. 代码:

    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)
    

2 个答案:

答案 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;