添加“ALL”选项作为Combobox的第一选择
问题描述:
我需要添加ALL选项作为组合框的首选。我已经尝试了下面的代码,但所有不是加上,我必须改变什么才能添加?添加“ALL”选项作为Combobox的第一选择
string query = "select [empname] from [server].[dbo].[table]";
SqlDataAdapter da = new SqlDataAdapter(query, conn);
conn.Open();
DataSet ds = new DataSet();
da.Fill(ds, "tables");
cbotables.DisplayMember = "empname";
cbotables.Items.Insert(0, "All");
cbotables.DataSource = ds.Tables["tables"];
编辑
我只是意识到一些事情并没有在我的代码显示...我的连接字符串上述声明的,组合框显示的,他们应该从数据库的内容,只是没有添加了所有选项。
答
也许最简单的方法是将插入一行到DataTable
承担其唯一的作用是成为DataSource
:
// fill the datatable
dt.Load(cmd.ExecuteReader());
var dr = dt.NewRow();
dr["Id"] = -1;
dr["Name"] = "All";
dt.Rows.InsertAt(dr, 0);
cboEmp.DisplayMember = "Name";
cboEmp.ValueMember = "Id";
cboEmp.DataSource = dt;
它更常见的是与这些一个ValueMember
所以你可以告诉是什么选择,因此“Id”列。如果DataTable
有其他目的,您可能不想向其添加虚假数据。对于这一点,你可以将数据传输到一个匿名的列表:
dt.Load(cmd.ExecuteReader());
// xfer data to anon collection
var myDS = dt.AsEnumerable()
.Select(q => new {Name = q.Field<String>("Name"),
Value = q.Field<Int32>("Id") }
)
.ToList();
// add ALL with fake id
myDS.Insert(0, new { Name = "ALL", Value = -1 });
cboEmp.DisplayMember = "Name";
cboEmp.ValueMember = "Value";
cboEmp.DataSource = myDS;
无论哪种方式,得到了相同的结果:
如果你真的不需要的Id
,你不需要一个匿名类型并可以只选择名称和List<string>
你不能使用数据源和东西在'Items'手动 – Plutonix
@Pututix - 有没有一个“创可贴”呢? I.E.应该将项目添加到数据表中,然后将所有项添加到数据表中,还是可以将项目插入到新SQL表中并在该列表顶部插入ALL,然后从新创建的表中抽取数据? –
*通常*与你想要一个值成员的数据源(如Emp Id)。既然你只是在名字后面,为什么要使用数据源呢?使用addrange和一个linq 1班轮将名称添加到项目集合 – Plutonix