为什么返回,而不是实际值的数据源

问题描述:

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

因为dgrid_Main DataSource属性将在收集对象的每个公共属性而不是对象绑定自。长度是字符串对象的一个​​公共属性。

当您实际遍历IList时,将获得数据库名称列表。

试试这个..

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

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

我不知道这是为什么发生,但已尝试使用绑定源?

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