Как привязать DataTable к Datagrid

У меня проблема с привязкой DataTable к DataGrid. Я уже искал решения, но просто не могу избавиться от ошибки. Связывание отлично работает при использовании WindowsForms, поэтому DataTable верен. Я просто не могу привязать его к WPF-DataGrid.

Сообщение об ошибке: Нарушение AmbiguousMatchException было необработанным
Источник: mscorlib

Я уже создал новый проект, чтобы избавиться от любых плохих ссылок и т.д.

XAML-код:

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

Я уже пробовал следующий С# -код позади:

grid1.ItemsSource = dt.DefaultView;

или

grid1.DataContext = dt.DefaultView;

или

grid1.DataContext = dtex;

Любая помощь приветствуется.

Ответы

Ответ 1

В файле cs

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

В файле xaml

<DataGrid Name="gridEmployees" ItemsSource="{Binding}">

Ответ 2

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;
   }

Ответ 3

В файле .cs

grid.DataContext = table.DefaultView;

В файле xaml

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

Ответ 4

Я ожидаю, что 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 преобразует мои ограниченные данные (что бы это ни было, в моем случае это a List<string[]>) в DataTable, как показывает вышеприведенный код, и передает этот DataTable в DataGrid. С указанными столбцами данных сетка данных может генерировать необходимые столбцы и визуализировать их.

Чтобы сказать это в двух словах, в моем случае привязка к DataTable работает как шарм.

Ответ 5

Вы можете использовать DataGrid в 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;

Ответ 6

В файле 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;

    }

В файле Xaml:

<DataGrid x:Name="grid1"
          Margin="10"
          AutoGenerateColumns="True"
          ItemsSource="{Binding Path=DataTable, Mode=TwoWay}" />