2011-05-22 119 views
4

string.length減我有這樣的代碼,構建了一個IList<string>爲什麼返回,而不是實際值的數據源

IList<string> databases; 

using (MySqlConnection _conn = Session.Connection) 
using (MySqlCommand _cmd = _conn.CreateCommand("SHOW databases")) 
{ 
    _cmd.Connection.Open (); 
    var _dr = _cmd.ExecuteReader(); 

    databases = new List<string> (_dr.SelectFromReader (reader => 
     reader[ 0 ] is DBNull ? null : reader[ 0 ].ToString ())); 

    _cmd.Connection.Close (); 
} 

dgrid_Main.DataSource = databases; 

按照擴展方法SelectFromReader here的工作。

的問題是,怎麼來dgrid_Main顯示的是每個數據庫的長度...
display length of database names
......而不是名稱?我跑這個測試:

foreach (string db in databases) 
{ 
    // winform treeview control 
    trv_ServerObjects.Nodes.Add (db); 
} 

...我得到以下結果:
display database name

+2

這是因爲它正試圖以顯示預計值的所有公共屬性。強大的唯一公共財產是長度 – 2011-05-22 17:13:20

+1

@亨克 - 確實; iSpelling – 2011-05-22 19:25:07

+0

的危險不錯,儘管沒有編輯窗口。 – 2011-05-22 19:38:56

回答

3

因爲dgrid_Main DataSource屬性將在收集對象的每個公共屬性而不是對象綁定自。長度是字符串對象的一個​​公共屬性。

當您實際遍歷IList時,將獲得數據庫名稱列表。

試試這個..

dgrid_Main.DataSource = databases.ToList().Select(db => new { db }); 
+0

+1:謝謝你的解釋(@Marc Gravell也是)完全有道理。感謝您的提示... – IAbstract 2011-05-23 00:36:57

1

我不知道這是爲什麼發生,但已嘗試使用綁定源?

BindingSource binding1 = new List<string> (_dr.SelectFromReader (reader => 
    reader[ 0 ] is DBNull ? null : reader[ 0 ].ToString ())); 

然後

dgrid_Main.DataSource = binding1 
+1

BindingSource的好主意。 – IAbstract 2011-05-23 00:35:41

相關問題