【问题标题】:How to set first index as blank in combobox如何在组合框中将第一个索引设置为空白
【发布时间】:2013-08-08 21:32:47
【问题描述】:

我有一个与数据源绑定的组合框。在这个组合框中,我必须在索引 0 处添加一个空白字段。

我已经编写了以下代码来获取记录。

 public List<TBASubType> GetSubType(int typ)
        {
            using (var tr = session.BeginTransaction())
            {
                try
                {
                    List<TBASubType> lstSubTypes = (from sbt in session.Query<TBASubType>()
                                                    where sbt.FType == typ
                                                    select sbt).ToList();


                    tr.Commit();
                    return lstSubTypes;
                }
                catch (Exception ex)
                {
                    CusException cex = new CusException(ex);
                    cex.Write();
                    return null;
                }
            }
        }

在此之后,它与带有数据绑定源的组合框绑定,如下代码。

M3.CM.BAL.CM CMobj = new M3.CM.BAL.CM(wSession.CreateSession());
                lstSubTypes = CMobj.GetSubType(type);
                this.tBASubTypeBindingSource.DataSource = lstSubTypes;

【问题讨论】:

  • 在绑定源中包含一个空字符串记录?

标签: c# winforms combobox


【解决方案1】:

创建组合框后,我将这些行添加到 Load() 方法的末尾:

private void xyz_Load(object sender, EventArgs e)
{
    this.xyzTableAdapter.Fill(this.DataSet.xyz);
    this.comboBoxXYZ.SelectedIndex = -1;
}

将 xyz 替换为您为控件指定的名称

【讨论】:

    【解决方案2】:
            cboCustomers.Items.Add(""); // Just add a blank item first
    
            // Then load the records from the database
            try
            {
                OleDbConnection con = new OleDbConnection(strDBConnection);
                OleDbCommand cmd = new OleDbCommand();
                con.Open();
                cmd.Connection = con;
                cmd.CommandText = "SELECT * FROM Customers";
                OleDbDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    cboCustomers.Items.Add(dr["Name"]);
                }
                con.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
    

    【讨论】:

      【解决方案3】:

      如果您一开始只想不选择任何内容,可以使用

      comboBox1.SelectedIndex=-1;
      

      【讨论】:

      • 不,我想在组合框中添加一个空白行。
      【解决方案4】:

      因此,当您绑定到 DataSource 时,您无法修改 Items,那么添加空白行的唯一选项就是修改您的数据源。创建一些空对象并将其添加到数据源。例如。如果您有一些绑定到组合框的Person 实体列表:

      var people = Builder<Person>.CreateListOfSize(10).Build().ToList();
      people.Insert(0, new Person { Name = "" });
      comboBox1.DisplayMember = "Name";
      comboBox1.DataSource = people;
      

      你可以在你的类中定义静态属性Empty

      public static readonly Person Empty = new Person { Name = "" };
      

      并用它来插入默认的空白项:

      people.Insert(0, Person.Empty);
      

      这也将允许检查所选项目是否为默认项目:

      private void comboBox_SelectedIndexChanged(object sender, EventArgs e)
      {
          Person person = (Person)comboBox.SelectedItem;
          if (person == Person.Empty)
              MessageBox.Show("Default item selected!");
      }    
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-04
        相关资源
        最近更新 更多