web-dev-qa-db-fra.com

Comment lier DataTable à Datagrid

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.

25
Cygu

Dans le fichier cs

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

En fichier xaml

<DataGrid Name="gridEmployees" ItemsSource="{Binding}">
57
Krishan Ahlawat
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;
   }
9
user5340894

En fichier .cs

grid.DataContext = table.DefaultView;

En fichier xaml

<DataGrid Name="grid" ItemsSource="{Binding}">
8
user5855394

Je m'attends, comme Rohit Vats mentionné dans son Commentaire aussi, que vous avez une mauvaise structure dans votre DataTable.

Essayez quelque chose comme ça:

  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.

xaml:

 <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.

1
Marschal

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;
1
Edwards Moses