web-dev-qa-db-ja.com

DataTableをDatagridにバインドする方法

DataTableDataGridにバインドする際に問題があります。私はすでに解決策を探しましたが、エラーを取り除くことはできません。 WindowsFormsを使用する場合、バインディングは正常に機能するため、DataTableは正しいです。WPF-DataGridにバインドできません。

エラーメッセージ: AmbiguousMatchExceptionは処理されませんでした
出典:mscorlib

悪いリンクなどを取り除くために、すでに新しいプロジェクトをセットアップしています。

XAML-Code:

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

私はすでに次のC#-Codeを試しました:

grid1.ItemsSource = dt.DefaultView;

または

grid1.DataContext = dt.DefaultView;

または

grid1.DataContext = dtex;

どんな助けも大歓迎です。

25
Cygu

Csファイル内

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

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

。csファイル内

grid.DataContext = table.DefaultView;

xamlファイル内

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

Rohit Vats 彼の Comment でも言及されているように、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;

私はこのDataTableをValueConverterで使用しましたが、次のバインディングでチャームのように機能します。

xaml:

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

そのため、ValueConverterはバウンドデータを変換します(それが何であれ、私の場合はList<string[]>)を上記のコードに示すようにDataTableに追加し、このDataTableDataGridに渡します。指定されたデータ列を使用して、データグリッドは必要な列を生成して視覚化できます。

簡単に言うと、私の場合、DataTableへのバインドは魅力のように機能します。

1
Marschal

WPFでDataGridを使用できます

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