我在将DataTable
绑定到DataGrid
时遇到问题。我已经搜索过解决方案,但是无法摆脱错误。 使用WindowsForms时绑定工作正常,因此DataTable
是正确的。我无法将其绑定到WPF-DataGrid。
错误消息: AmbiguousMatchException未处理 资料来源:mscorlib
我已经设置了新项目以消除任何不良链接等。
XAML的代码:
<DataGrid x:Name="grid1" Margin="10" ItemsSource="{Binding}"
AutoGenerateColumns="True"></DataGrid>
我已经尝试过跟随C#-Code:
grid1.ItemsSource = dt.DefaultView;
或
grid1.DataContext = dt.DefaultView;
或
grid1.DataContext = dtex;
感谢任何帮助。
答案 0 :(得分:55)
在cs文件中
DataTable employeeData = CreateDataTable();
gridEmployees.DataContext = employeeData.DefaultView;
在xaml文件中
<DataGrid Name="gridEmployees" ItemsSource="{Binding}">
答案 1 :(得分:8)
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;
}
答案 2 :(得分:8)
在.cs文件中
grid.DataContext = table.DefaultView;
在xaml文件中
<DataGrid Name="grid" ItemsSource="{Binding}">
答案 3 :(得分:1)
我期待Rohit Vats中提到的Comment,DataTable
中的结构错误。
var t = new DataTable();
// create column header
foreach ( string s in identifiders ) {
t.Columns.Add(new DataColumn(s)); // <<=== i'm expecting you don't have defined any DataColumns, haven't you?
}
// Add data to DataTable
for ( int lineNumber = identifierLineNumber; lineNumber < lineCount; lineNumber++ ) {
DataRow newRow = t.NewRow();
for ( int column = 0; column < identifierCount; column++ ) {
newRow[column] = fileContent.ElementAt(lineNumber)[column];
}
t.Rows.Add(newRow);
}
return t.DefaultView;
我在ValueConverter
中使用了这个DataTable,它就像一个带有以下绑定的魅力。
<DataGrid AutoGenerateColumns="True" ItemsSource="{Binding Path=FileContent, Converter={StaticResource dataGridConverter}}" />
它的作用是,ValueConverter
将我的有界数据(在我的情况下,它是List<string[]>
)转换为DataTable
,如上面的代码显示,并将此DataTable
传递给DataGrid
。通过指定的数据列,数据网格可以生成所需的列并将其可视化。
简而言之,就我而言,与DataTable
的绑定就像魅力一样。
答案 4 :(得分:1)
您可以在WPF中使用 DataGrid
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;
答案 5 :(得分:0)
我会这样:
localhost:5000
,然后在两个AsEnumerable()之间执行我想要的任何查询。 如果您不需要查询空间,则可以直接执行以下操作:
grid1.DataContext = dt.AsEnumerable().Where(x => x < 10).AsEnumerable().CopyToDataTable().AsDataView();
答案 6 :(得分:-1)
在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}" />