J'ai un problème pour relier un DataTable
à un DataGrid
. J'ai déjà cherché des solutions, mais je ne peux tout simplement pas me débarrasser de l'erreur. La liaison fonctionne correctement avec WindowsForms, donc le DataTable
est correct. Je ne peux tout simplement pas le lier à un WPF-DataGrid.
Message d'erreur: AmbiguousMatchException n'a pas été géré
Source: mscorlib
J'ai déjà mis en place un nouveau projet pour me débarrasser de tout mauvais lien, etc.
Code XAML:
<DataGrid x:Name="grid1" Margin="10" ItemsSource="{Binding}"
AutoGenerateColumns="True"></DataGrid>
J'ai déjà essayé de suivre C # -Code derrière:
grid1.ItemsSource = dt.DefaultView;
ou
grid1.DataContext = dt.DefaultView;
ou
grid1.DataContext = dtex;
Toute aide est appréciée.
Dans le fichier cs
DataTable employeeData = CreateDataTable();
gridEmployees.DataContext = employeeData.DefaultView;
En 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;
}
En fichier .cs
grid.DataContext = table.DefaultView;
En fichier xaml
<DataGrid Name="grid" ItemsSource="{Binding}">
Je m'attends, comme Rohit Vats mentionné dans son Commentaire aussi, que vous avez une mauvaise structure dans votre 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;
J'ai utilisé cette table de données dans un ValueConverter
et cela fonctionne comme un charme avec la liaison suivante.
<DataGrid AutoGenerateColumns="True" ItemsSource="{Binding Path=FileContent, Converter={StaticResource dataGridConverter}}" />
Donc, ce qu’il fait, le ValueConverter
transforme mes données liées (quoi qu’il en soit, dans mon cas c’est un List<string[]>
) dans un DataTable
, comme le montre le code ci-dessus, et transmet ce DataTable
au DataGrid
. Avec des colonnes de données spécifiées, la grille de données peut générer les colonnes nécessaires et les visualiser.
Pour résumer, dans mon cas, la liaison à un DataTable
fonctionne comme un charme.
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;