为什么返回String.Length而不是DataSource中的实际值

时间:2011-05-22 17:03:34

标签: c# datagridview datasource ilist

我有这个代码构建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 个答案:

答案 0 :(得分:3)

因为dgrid_Main上的DataSource属性将绑定集合中对象的每个公共属性,而不是它自己的对象。而Length是字符串对象的一个​​公共属性。

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

试试这个..

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

答案 1 :(得分:1)

我不知道为什么会这样,但是试图使用绑定源?

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

然后

dgrid_Main.DataSource = binding1