【问题标题】:How should I cast a DataTable for assignment to DataGrid.ItemsSource?我应该如何转换 DataTable 以分配给 DataGrid.ItemsSource?
【发布时间】:2012-07-24 05:14:26
【问题描述】:

我正在尝试学习 WPF,并尝试使用 MySQL 数据库中的数据填充 WPF DataGrid。相关代码为:

        dataGrid.DataContext = myMySQL.DBDataSet;
        dataGrid.ItemsSource = myMySQL.DBDataSet.Tables[tblName];

dataGrid 是一个 WPF DataGrid 控件。 myMySQL.DBDataSet 是一个 System.Data.DataSet。我在上面的第二行代码中收到以下错误。

"不能将类型'System.Data.DataTable'隐式转换为 'System.Collections.IEnumerable'。存在显式转换(是 你错过了演员表吗?)”

是的,我可能需要演员表。我很高兴听到存在显式转换。但是我如何确定我需要什么演员表? '(System.Collections.IEnumerable)' 显然不起作用。 “ItemsSource”的类型似乎是“System.Windows.Controls.ItemsControl”。但是 cast (System.Windows.Controls.ItemsControl) 也不起作用。我不知道在哪里可以找到有关如何转换此 DataTable 以纠正此错误的解释。你能帮帮我吗?

【问题讨论】:

    标签: mysql wpf data-binding dataset wpfdatagrid


    【解决方案1】:

    尝试将 DataTable 的 DefaultView 分配给 ItemsSource。

    dataGrid.ItemsSource = myMySQL.DBDataSet.Tables[tblName].DefaultView;
    

    【讨论】:

    • 更好...这消除了类型转换错误。我的 DataGrid 显示了正确的行数,但它们是空的。
    • @JNygren 向我展示您定义 DataGrid 的 XAML 文件。
    • 是的,'DefaultView' 设置成功了。不是很直观。非常感谢。
    【解决方案2】:
    private DataTable GetNewStaffCode()
           {
               Mod_Staff stafmodules = new Mod_Staff();
               staffcode = txtStaffCode.Text.ToString();
               DataTable dtstaffcode=stafmodules.GetNewStaffCode(staffcode);
               for (int j = 0; j < dtstaffcode.Rows.Count; j++)
               {
                   staffcode ="ST"+ Convert.ToString(j);
               }
    

    错误信息是:

    Cannot implicitly convert type 'System.Data.DataTable' to 'string'

    还有

    Real_Estate_Management_System.StaffEntry.GetNewStaffCode()': not all code paths return a value D:\Shwe Ain Real Estate Management\Real Estate Management By May Mee Tun\Real_Estate_App\Real_Estate_Management_System\Real_Estate_Management_System\UI\StaffEntry.cs 329 30 Real_Estate_Management_System

               txtStaffCode.Refresh();
           }
    
    public DataTable GetNewStaffCode(string staffcode)
        {
            String query = "Select staff_code from tblStaffType";
            if (CN.State == ConnectionState.Closed) CN.Open();
            SqlCommand cmd = new SqlCommand(query, CN);
            DataTable dt = new DataTable();
            SqlDataAdapter adp = new SqlDataAdapter(cmd);
            adp.Fill(dt);
            return dt;
        }
    

    【讨论】:

      猜你喜欢
      • 2016-05-14
      • 2013-02-03
      • 2011-10-02
      • 2014-01-03
      • 1970-01-01
      • 2015-05-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多