Почему String.Length возвращается вместо фактического значения в DataSource - PullRequest
4 голосов
/ 22 мая 2011

У меня есть этот код, который создает 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 здесь .

Вопрос в том, почему dgrid_Main отображает длину каждой базы данных ...
display length of database names
... вместо имени? Я провел этот тест:

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

... Я получаю следующий результат:
display database name

Ответы [ 2 ]

3 голосов
/ 22 мая 2011

Поскольку свойство DataSource в dgrid_Main будет связывать каждое открытое свойство объекта в коллекции, а не сам объект. И Length является одним открытым свойством строкового объекта.

Когда вы на самом деле перебираете IList, вы получаете список имен баз данных.

Попробуйте это ..

dgrid_Main.DataSource = databases.ToList().Select(db => new { db });
1 голос
/ 22 мая 2011

Я не знаю, почему это происходит, но пытался использовать источник привязки?

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

, а затем

dgrid_Main.DataSource = binding1
...