2010-11-23 66 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