C# 如何将DataTable绑定到Datagrid

C# 如何将DataTable绑定到Datagrid,c#,wpf,datagrid,datatable,C#,Wpf,Datagrid,Datatable,将数据表绑定到数据网格时出现问题。我已经在寻找解决方案,但就是无法摆脱这个错误。使用WindowsForms时绑定工作正常,因此DataTable是正确的。我就是不能将它绑定到WPF数据网格 错误消息:未处理含糊不清的MatchException 资料来源:mscorlib 我已经建立了新的项目,以摆脱任何坏链接等 XAML代码: <DataGrid x:Name="grid1" Margin="10" ItemsSource="{Binding}" AutoGene

数据表
绑定到
数据网格
时出现问题。我已经在寻找解决方案,但就是无法摆脱这个错误。使用WindowsForms时绑定工作正常,因此
DataTable
是正确的。我就是不能将它绑定到WPF数据网格

错误消息:未处理含糊不清的MatchException
资料来源:mscorlib

我已经建立了新的项目,以摆脱任何坏链接等

XAML代码:

<DataGrid x:Name="grid1" Margin="10" ItemsSource="{Binding}" 
          AutoGenerateColumns="True"></DataGrid>
grid1.ItemsSource = dt.DefaultView;

感谢您的帮助。

在cs文件中:

    private DataTable _dataTable;

    public DataTable DataTable
    {
        get { return _dataTable; }
        set { _dataTable = value; }
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        this._dataTable = new DataTable("table");

        this._dataTable.Columns.Add("col0");
        this._dataTable.Columns.Add("col1");
        this._dataTable.Columns.Add("col2");

        this._dataTable.Rows.Add("data00", "data01", "data02");
        this._dataTable.Rows.Add("data10", "data11", "data22");
        this._dataTable.Rows.Add("data20", "data21", "data22");

        this.grid1.DataContext = this;

    }
在Xaml文件中:

<DataGrid x:Name="grid1"
          Margin="10"
          AutoGenerateColumns="True"
          ItemsSource="{Binding Path=DataTable, Mode=TwoWay}" />

在cs文件中

DataTable employeeData = CreateDataTable();
gridEmployees.DataContext = employeeData.DefaultView;
在xaml文件中

<DataGrid Name="gridEmployees" ItemsSource="{Binding}">

正如他在书中也提到的那样,我希望您的
数据表中有一个错误的结构

试着这样做: 因此,正如上面的代码所示,
ValueConverter
将我的有界数据(无论它是什么,在我的例子中它是一个
列表
)转换成
数据表
,并将该
数据表
传递到
数据网格
。使用指定的数据列,数据网格可以生成所需的列并将其可视化


简而言之,在我的例子中,绑定到
DataTable
的工作非常有魅力。

您可以在WPF中使用DataGrid

using (SqlCeConnection con = new SqlCeConnection())
   {
   con.ConnectionString = connectionString;
   con.Open();
   SqlCeCommand com = new SqlCeCommand("SELECT S_no,Name,Father_Name")
   SqlCeDataAdapter sda = new SqlCeDataAdapter(com);
   System.Data.DataTable dt = new System.Data.DataTable();
   sda.Fill(dt);
   dataGrid1.ItemsSource = dt.DefaultView;
   dataGrid1.AutoGenerateColumns = true;
   dataGrid1.CanUserAddRows = false;
   }
SqlDataAdapter da = new SqlDataAdapter("Select * from Table",con);
DataTable dt = new DataTable("Call Reciept");
da.Fill(dt);
DataGrid dg = new DataGrid();
dg.ItemsSource = dt.DefaultView;

.cs文件中的

grid.DataContext = table.DefaultView;
<DataGrid Name="grid" ItemsSource="{Binding}">
在xaml文件中

grid.DataContext = table.DefaultView;
<DataGrid Name="grid" ItemsSource="{Binding}">

我会这样做:

grid1.DataContext = dt.AsEnumerable().Where(x => x < 10).AsEnumerable().CopyToDataTable().AsDataView();

显示您的
数据表
结构。此外,如果您是从代码隐藏进行设置,则不需要在xaml中设置
ItemsSource
。由于我使用表中的值进行计算,所以表中填充了。导出方法也可以很好地工作。它只是WPFDataGrid的绑定。这相当于OP发布的问题。问题是他绑定到的DataTable中的某个地方。我在一个单独的类中有一个返回DataTable的方法<代码>表1=myClassInstance.myMethod()消息框显示table1有4列和几行。然后我想将表1绑定到WPF中的数据网格。在有人想出一种更优雅的(语法糖,有人吗?)方法将expando对象绑定到PODG(普通数据网格)之前,我将使用数据表方法。易于设置,易于数据绑定。据我所知,.NET4.0中没有比这更优雅的解决方案可以将可伸缩列DataTable绑定到DataGrid。web上有足够多的示例绑定固定列表。也许Microsoft会在以后的版本中提供一种方法。请您详细说明您的答案,并添加关于您提供的解决方案的更多描述,方法是添加dataGrid1。AutoGeberateColumns=true;我们将在datagrid上获取o/p,否则它将不显示o/p AutoGenerateColumns的默认值为true。因此,这一行并不是真的需要。这似乎在WPF中对我有效-问题是,为什么Visual studio在执行此操作时不为我自动调整XAML?第一句话说:“我在将
数据表
绑定到
数据网格
”他确实使用了数据网格,正如您从OPs问题中可以看出的,那么这句话的意思是什么呢?我的DataGrid没有ItemsSource,只有DataContext。我该怎么办?
<DataGrid Name="grid" ItemsSource="{Binding}">
grid1.DataContext = dt.AsEnumerable().Where(x => x < 10).AsEnumerable().CopyToDataTable().AsDataView();
grid1.DataContext = dt.AsDataView();