2010-11-23 112 views
0

我已经创建了一个将约束所有与主键的表在下拉这样方法是故障

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(); 
       } 
      } 
     } 

但不是结合与主键是让这样的事情在该表的方法dropdown

System.Data.DataRowView 
System.Data.DataRowView...and so on 

你能指出我出错的地方吗?

+0

`cmbResults.DisplayMember =“NAME”;`列名是`“NAME”` – FosterZ 2010-11-23 11:44:59

回答

4

不应该将DisplayMember是 “TABLE_NAME”

+0

除非数据绑定支持访问绑定对象的索引器,否则我怀疑这会起作用。就我所知,DisplayMember应该是DataRowView类的物理属性的字符串名称。 – 2010-11-23 11:46:12

2

DataRowView上没有名为“NAME”的房产。 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将处理列名:你确定这条线的

http://www.akadia.com/services/dotnet_databinding.html