如何在 WPF 中设置 DataGrid 的 DataSource?

Posted

技术标签:

【中文标题】如何在 WPF 中设置 DataGrid 的 DataSource?【英文标题】:How to set the DataSource of a DataGrid in WPF? 【发布时间】:2011-07-20 21:14:17 【问题描述】:

我需要将数据库中的表设置为 WPF 中 GridGrid 的数据源。在 Windows 窗体中,该属性称为 DataSource,但在 WPF 中不存在这样的属性,我该怎么做呢?

【问题讨论】:

您的意思是“在 Windows 窗体中”,而不是“在 C# 中”……C# 是一种语言,而不是 UI 框架 我也这么认为,然后继续编辑它,因为 C# 没有任何意义。 是的,我的意思是 Windows 窗体。感谢指正 【参考方案1】:

您可以使用以下两种方式将数据表绑定到 WPF 中的数据网格。

 datagrid.ItemSource = mydt.DefaultView();

 datagrid.DataContext = mydt.DefaultView();

【讨论】:

【参考方案2】:

这是一个简单的例子:

XAML 部分

<DataGrid Name="dataGrid1" Width="866" Height="auto" HorizontalAlignment="Left" VerticalAlignment="Top" />

C#部分

... [读取和填写表格的代码] ...

da.Fill(myDataTable);
dataGrid1.ItemsSource = myDataTable.DefaultView;

现在您的 DataGrid 将被您的 DataTable 填充

【讨论】:

【参考方案3】:

您可以使用ItemsSource 属性:

<ListView ItemsSource="Binding YourData">
    <ListView.View>
        <GridView>
            <!-- The columns here -->
        </GridView>
    </ListView.View>
</ListView>

如果您更喜欢使用代码隐藏而不是绑定,只需为 ListView 命名并在代码中设置 ItemsSource 属性:

listView1.ItemsSource = YourData;

您还可以将ItemsSource 属性与其他列表控件(DataGridListBoxComboBox 等)一起使用,因为它是在ItemsControl 基类中定义的。


编辑:如果数据源是DataTable,则不能直接将其分配给ItemsSource,因为它没有实现IEnumerable,但可以通过绑定来实现:

listView1.SetBinding(ItemsControl.ItemsSourceProperty, new Binding  Source = YourData );

【讨论】:

但是“YourData”你怎么说是一个必须是一个对象?因为如果我像在 Windows 窗体中那样使用 Datatable,它就不起作用。 啊,是的,DataTable 是一个特例......请参阅我的答案中的编辑 但是我还有一个问题,如果我想将数据绑定到 DataGrid,但是如果我已经在 DataGrid 中定义了列,如何将绑定数据放入现有列中? 我需要例如将某些内容设置为 DataGrid 的 DataSource(我已经实现了),但想象一下我在 DataGrid 中已经有列(作为 TextBox 或/和 ComboBox)。通过定义“绑定”属性,我可以成功地将数据作为文本框放入列的单元格中,但是要将数据作为组合框放入列中,我不明白我该怎么做。 您可以使用 DataGridComboBoxColumn。 cmets中我真的不能给你详细的解释,看documentation中的例子【参考方案4】:

据我所知,GridView 是一个视图而不是独立控件,您通常会将其用作ListView 的视图。在 WPF 中,用于数据填充的属性称为 ItemsSource,您可能希望使用 ListViewDataGrid 以这种方式显示您的数据。

【讨论】:

以上是关于如何在 WPF 中设置 DataGrid 的 DataSource?的主要内容,如果未能解决你的问题,请参考以下文章

WPF DataGrid - 从 DataGrid ItemsSource 对象的集合值中设置唯一的每行(对象)组合框值

如何对 WPF DataGrid 进行分页?

WPF DataGrid 选定的行样式

wpf:DataGrid 禁用选定的行样式 - 或行选择

如何在GWT DataGrid中设置标题单元格宽度

如何在我的 winforms 应用程序中设置我的 datagrid 滚动条的位置?