从数据表中填充ComboBox数据源

本文关键字:ComboBox 数据源 填充 数据表 | 更新日期: 2023-09-27 17:53:52

当在返回字符串的字段上使用以下代码时,它工作得很好,但是当字段的类型是long或Double时,我得到错误:

  1. 无法强制转换系统类型的对象。
  2. 无法强制转换系统类型的对象。键入'System.String'。

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的数据源,这就是为什么我不只是从GetValues返回列表或数组

也考虑是简单地做一个循环的数据表的数据行返回填充组合框也许这是最好的?

例如:

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]);
}

从数据表中填充ComboBox数据源

使用。tostring()方法将字段强制转换为string。