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();