Comment lier DataTable à Datagrid
j'ai un problème en liant un DataTable
à un DataGrid
. J'ai déjà cherché des solutions mais je ne peux pas me débarrasser de l'erreur. la reliure fonctionne très bien avec les formes de fenêtre, donc le DataTable
est correct. Je ne peux pas le lier à un WPF-DataGrid.
message d'erreur: AmbiguousMatchException was unhandled
Source: mscorlib
j'ai déjà mis en place un nouveau projet pour se débarrasser de tout mauvais liens, etc.
XAML-Code:
<DataGrid x:Name="grid1" Margin="10" ItemsSource="{Binding}"
AutoGenerateColumns="True"></DataGrid>
j'ai déjà essayé le code C suivant derrière:
grid1.ItemsSource = dt.DefaultView;
ou
grid1.DataContext = dt.DefaultView;
ou
grid1.DataContext = dtex;
Toute aide est appréciée.
6 réponses
dans le fichier cs
DataTable employeeData = CreateDataTable();
gridEmployees.DataContext = employeeData.DefaultView;
dans le fichier xaml
<DataGrid Name="gridEmployees" ItemsSource="{Binding}">
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;
}
In .fichier cs
grid.DataContext = table.DefaultView;
dans le fichier xaml
<DataGrid Name="grid" ItemsSource="{Binding}">
vous pouvez utiliser DataGrid dans 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;
j'attends, comme Rohit Cuves a mentionné dans son Commentaire trop, que vous avez une mauvaise structure dans votre DataTable
.
Essayez quelque chose comme ceci:
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;
j'ai utilisé ce datable dans un ValueConverter
et il fonctionne comme un charme avec la reliure suivante.
xaml:
<DataGrid AutoGenerateColumns="True" ItemsSource="{Binding Path=FileContent, Converter={StaticResource dataGridConverter}}" />
Donc, ce qu'il fait, le ValueConverter
transforme mes données limitées (quel qu'il soit, dans mon cas c'est un List<string[]>
) en un DataTable
, comme le code ci-dessus le montre, et passe ce DataTable
au DataGrid
. Avec les colonnes de données spécifiées la grille de données peut générer les colonnes nécessaires et les visualiser.
Pour le dire en un mot, dans mon cas, la liaison à un DataTable
fonctionne comme un charme.
dans le fichier 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;
}
dans le fichier Xaml:
<DataGrid x:Name="grid1"
Margin="10"
AutoGenerateColumns="True"
ItemsSource="{Binding Path=DataTable, Mode=TwoWay}" />