How to bind DataTable to Datagrid

I have a problem binding a DataTable to a DataGrid. I have already searched for solutions but just can't get rid of the error. The binding works fine when using WindowsForms, so the DataTable is correct. I just can't bind it to a WPF-DataGrid.

Error message: AmbiguousMatchException was unhandled
Source: mscorlib

I have already set up new project to get rid of any bad links, etc.

XAML-Code:

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

I have already tried following C#-Code behind:

grid1.ItemsSource = dt.DefaultView;

or

grid1.DataContext = dt.DefaultView;

or

grid1.DataContext = dtex;

Any help is appreciated.

2

7 Answers

In cs file

DataTable employeeData = CreateDataTable();
gridEmployees.DataContext = employeeData.DefaultView;

In xaml file

<DataGrid Name="gridEmployees" ItemsSource="{Binding}">
1
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; }
3

In .cs file

grid.DataContext = table.DefaultView;

In xaml file

<DataGrid Name="grid" ItemsSource="{Binding}">
0

You could use DataGrid in WPF

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;
2

I'm expecting, as Rohit Vats mentioned in his Comment too, that you have a wrong structure in your DataTable.

Try something like this:

 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;

I have used this DataTable in a ValueConverter and it works like a charm with the following binding.

xaml:

 <DataGrid AutoGenerateColumns="True" ItemsSource="{Binding Path=FileContent, Converter={StaticResource dataGridConverter}}" />

So what it does, the ValueConverter transforms my bounded data (what ever it is, in my case it's a List<string[]>) into a DataTable, as the code above shows, and passes this DataTable to the DataGrid. With specified data columns the data grid can generate the needed columns and visualize them.

To say it in a nutshell, in my case the binding to a DataTable works like a charm.

2

I'd do it this way:

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

and do whatever query i want between the two AsEnumerable(). If you don't need space for query, you can just do directly this:

grid1.DataContext = dt.AsDataView();

In cs file:

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

In Xaml file:

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

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like