我创建了一个方法,可以将所有表与主键绑定在一个下拉列表中,如下所示
public void PrimaryKeyTable()
{
SqlConnection sConnection = new SqlConnection("Server=192.168.10.3;DataBase=GoalPlanNew;User Id=gp;Password=gp");
//To Open the connection.
sConnection.Open();
string selectPrimaryKeys = @"SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE = 'PRIMARY KEY'
ORDER BY TABLE_NAME";
SqlCommand sCommand = new SqlCommand(selectPrimaryKeys, sConnection);
try
{
DataSet dsListOfPrimaryKeys = new DataSet("INFORMATION_SCHEMA.TABLE_CONSTRAINTS");
SqlDataAdapter dass = new SqlDataAdapter(selectPrimaryKeys, sConnection);
dass.TableMappings.Add("Table", "INFORMATION_SCHEMA.TABLE_CONSTRAINTS");
dass.Fill(dsListOfPrimaryKeys);
DataViewManager dsvaa = dsListOfPrimaryKeys.DefaultViewManager;
cmbResults.DataSource = dsListOfPrimaryKeys.Tables["INFORMATION_SCHEMA.TABLE_CONSTRAINTS"];
cmbResults.DisplayMember = "NAME";
cmbResults.ValueMember = ("");
}
catch (Exception ex)
{
//All the exceptions are handled and written in the EventLog.
EventLog log = new EventLog("Application");
log.Source = "MFDBAnalyser";
log.WriteEntry(ex.Message);
}
finally
{
if (sConnection.State != ConnectionState.Closed)
{
sConnection.Close();
}
}
}
但不是用主键绑定表,而是在下拉列表中给出类似的内容
System.Data.DataRowView
System.Data.DataRowView...and so on
你能指出我出错的地方吗?
答案 0 :(得分:4)
DisplayMember不应该是“TABLE_NAME”
答案 1 :(得分:2)
名为“NAME”的 DataRowView
上没有属性。 DisplayMember
属性在要绑定的对象上采用属性的字符串名称,并使用反射来获取实际值。您尝试做的是提供“NAME”作为返回列的名称,如果您将其编入索引,则会显示在DataRowView
中。
遗憾的是不行。工作边界列表的一个例子:
http://msdn.microsoft.com/en-us/library/system.windows.forms.listcontrol.displaymember.aspx
我不确定你是否可以绑定你的 DataRowView
而不将它包装在另一个类中,这本身并不是一个繁重的解决方案。
当无法解析DisplayMember
时,它默认在绑定对象上运行ToString()
:DataRowView.ToString()
返回类型名称,因为它不会覆盖ToString()
- 这就是你的情况正在发生的事情。
更新:道歉,它也适用于数据表的列名。目前我找不到任何相关文档,但如果您将DisplayMember
设置为“TABLE_NAME”,它也会有效。我的解释讨论了类属性,这是绑定对象的情况,但它也可以采用索引器值,但我不知道它是如何工作的。
更新2:这是一个很好的概述,CurrencyManager
将处理列名称: