组合框中的两个字段值displaymember和datatable c#



我想将两个字段绑定在一起,并在组合框中显示。

我有名字和姓氏在我的数据库,如何在组合框中显示全名?

我尝试了这个代码,但是我得到了一些错误:

OracleDataAdapter names= new OracleDataAdapter("SELECT first, last FROM person", conn);
DataTable dt = new DataTable();
names.Fill(dt);
dt.Columns.Add("FullName", typeof(string), "first' : ' last"); //<-- error's here
cmbCBox.DisplayMember = "FullName";
cmbBox.DataSource = dt;
conn.Close();

错误是:

':'操作符后缺少操作数。

如果你想创建这样的格式:

Donald : Duck

则表达式为:

dt.Columns.Add("full", typeof(string), "first + ' : ' + last");

示例代码:

System.Data.DataTable dt = new System.Data.DataTable();
dt.Columns.Add("first", typeof(string));
dt.Columns.Add("last", typeof(string));
dt.Columns.Add("full", typeof(string), "first + ' : ' + last");
System.Data.DataRow row = dt.NewRow();
row["first"] = "Donald";
row["last"] = "Duck";
dt.Rows.Add(row);

请数据库引擎为您创建FullName

// Oracle operator to concatenate strings is || 
string query = @"SELECT first || ' ' || last as FullName FROM person";
OracleDataAdapter names= new OracleDataAdapter(query, conn);
...
cmbCBox.DisplayMember = "FullName";

这种方法将只返回FullName作为first和last字段的组合。当然,如果需要的话,没有什么可以阻止您添加其他字段。例如,您可能需要PersonID(或person表上的任何主键)用于组合的ValueMember。通过这种方式,您可以读取SelectedValue以恢复属于所选FullName的Person记录。

最后一点。我认为,使用DataTable表达式构建客户端FullName对于许多场景来说都是一个很好的选择,但在这种情况下,数据库引擎可以更快地完成它。我建议用秒表做一个简单的检查,以验证差异

最新更新