如何将DataTable绑定到Datagrid

时间:2013-12-25 07:55:14

标签: c# wpf datagrid datatable

我在将DataTable绑定到DataGrid时遇到问题。我已经搜索过解决方案,但是无法摆脱错误。 使用WindowsForms时绑定工作正常,因此DataTable是正确的。我无法将其绑定到WPF-DataGrid。

  

错误消息: AmbiguousMatchException未处理   资料来源:mscorlib

我已经设置了新项目以消除任何不良链接等。

XAML的代码:

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

我已经尝试过跟随C#-Code:

grid1.ItemsSource = dt.DefaultView;

grid1.DataContext = dt.DefaultView;

grid1.DataContext = dtex;

感谢任何帮助。

7 个答案:

答案 0 :(得分:55)

在cs文件中

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

在xaml文件中

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

答案 1 :(得分:8)

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

答案 2 :(得分:8)

在.cs文件中

grid.DataContext = table.DefaultView;

在xaml文件中

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

答案 3 :(得分:1)

我期待Rohit Vats中提到的CommentDataTable中的结构错误。

尝试这样的事情:

  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;

我在ValueConverter中使用了这个DataTable,它就像一个带有以下绑定的魅力。

XAML:

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

它的作用是,ValueConverter将我的有界数据(在我的情况下,它是List<string[]>)转换为DataTable,如上面的代码显示,并将此DataTable传递给DataGrid。通过指定的数据列,数据网格可以生成所需的列并将其可视化。

简而言之,就我而言,与DataTable的绑定就像魅力一样。

答案 4 :(得分:1)

您可以在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;

答案 5 :(得分:0)

我会这样:

localhost:5000

,然后在两个AsEnumerable()之间执行我想要的任何查询。 如果您不需要查询空间,则可以直接执行以下操作:

grid1.DataContext = dt.AsEnumerable().Where(x => x < 10).AsEnumerable().CopyToDataTable().AsDataView();

答案 6 :(得分:-1)

在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}" />