如何将数据集中的所有表绑定到数据网格

时间:2018-10-08 13:04:27

标签: c# wpf xaml datagridview

我正在尝试将DataSet中的表绑定到自己的DataGrid,但是不确定如何去做,这是我尝试过的:

<ListView ItemsSource="{Binding CalibrationData.CalibrationValuestoWrite}">

    <DataGrid ItemsSource="{Binding}">
    </DataGrid>

</ListView>

也许我需要创建一个DataTemplate?任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:3)

尝试这一希望对您有帮助

<DataGrid AutoGenerateColumns="False" Height="250" ItemsSource="{Binding}" HorizontalAlignment="Left" Margin="12,40,0,0" Name="mytbl" VerticalAlignment="Top" Width="479">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Col1" Width="50" />
                <DataGridTextColumn Header="Col2" Width="375"/>
                <DataGridTextColumn Header="Col3" Width="50"/>
            </DataGrid.Columns>
        </DataGrid>

背后的代码

this.mytbl.DataContext = ds.Tables[0].DefaultView; 

答案 1 :(得分:2)

您只能将ItemsSource属性绑定到IEnumerable。然后定义一个ItemTemplate来定义可枚举返回的每个项目的外观。

因此,如果CalibrationData.CalibrationValuestoWrite返回一个IEnumerable<DataTable>DataSet.Tables属性会返回),并且您想为每个DataGrid显示一个DataTable,则应该可以:

<ListView ItemsSource="{Binding CalibrationData.CalibrationValuestoWrite.Tables}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <DataGrid ItemsSource="{Binding}" />
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

答案 2 :(得分:0)

更好地与DataView绑定,例如此处的小示例:

(vm是XAML视图的数据上下文)。

XAML:

<DataGrid ItemsSource="{Binding MyGrid}">
</DataGrid>

C#,ViewModel

    public partial class vm : INotifyPropertyChanged
    {
      public event PropertyChangedEventHandler PropertyChanged;
      protected void OnPropertyChanged(string text)
      {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(text));
        }
      } 

      public vm()
      {
        DataTable dt;

        ...

        MyGrid = new DataView(dt);
      }

      private DataView _mygrid;
      public DataView MyGrid
      {
         get
         {
            return _mygrid;
         }
         set
         {
            _mygrid= value;
            OnPropertyChanged("MyGrid");
         }
      }
   }