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.

20
demandé sur akjoshi 2013-12-25 11:55:13

6 réponses

dans le fichier cs

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

dans le fichier xaml

<DataGrid Name="gridEmployees" ItemsSource="{Binding}">
46
répondu Krishan Ahlawat 2014-02-22 15:18:53
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;
   }
8
répondu 2015-09-16 06:28:30

In .fichier cs

grid.DataContext = table.DefaultView;

dans le fichier xaml

<DataGrid Name="grid" ItemsSource="{Binding}">
8
répondu user5855394 2016-01-29 05:35:41

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;
2
répondu Edwards Moses 2015-12-01 22:21:35

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.

1
répondu Marschal 2017-05-23 12:26:18

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}" />
-1
répondu user2906151 2013-12-25 08:47:30