从DataTable填充ComboBox DataSource

时间:2014-03-26 17:10:01

标签: c# linq casting combobox datatable

在返回字符串的字段上使用以下代码时,它工作正常,但当字段为long或Double类型时,我会收到错误:

  1. 无法将类型为“System.Int64”的对象强制转换为“System.String”。
  2. 无法将“System.Double”类型的对象强制转换为“System.String”。
  3. 分别

    string f = cb.Name.Substring(2, cb.Name.Length - 2);
    cb.DataSource = SQLite.GetValues(f).AsEnumerable()
        .Select<System.Data.DataRow, String>(x => x.Field<string>(f))
        .ToArray(); 
    

    在上面的SQLite.GetValues中返回一个数据表。我试图用作组合框的数据源。

    我可以对这一个Linq声明进行任何小改动以使其有效吗?

    当我将代码行.Select<System.Data.DataRow, String>(x => x.Field<string>(f))更改为.Select<System.Data.DataRow, Int64>(x => x.Field<Int64>(f)).Select<System.Data.DataRow, Double>(x => x.Field<Double>(f))时,它适用于这些字段,但不适用于其他字段。

    如果没有使用if语句首先检查字段,那么运行相应的代码行是否有其他方法?

    方法GetValues也用于填充DataGridView的DataSource,它将包含所有列,这就是我不仅仅从GetValues返回List或数组的原因

    另外考虑的是简单地在DataTable的DataRows上做一个循环返回来填充ComboBox也许这是最好的?

    例如:

    string f = cb.Name.Substring(2, cb.Name.Length - 2);
    DataTable dt = new DataTable();
    dt = SQLite.GetValues(f,false);
    foreach (DataRow dr in dt.Rows)
    {
        cb.Items.Add(dr[f]);
    }
    

1 个答案:

答案 0 :(得分:1)

要在字符串中强制转换字段,请使用方法.ToString()。