如何在 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
属性与其他列表控件(DataGrid
、ListBox
、ComboBox
等)一起使用,因为它是在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
,您可能希望使用 ListView
或 DataGrid
以这种方式显示您的数据。
【讨论】:
以上是关于如何在 WPF 中设置 DataGrid 的 DataSource?的主要内容,如果未能解决你的问题,请参考以下文章
WPF DataGrid - 从 DataGrid ItemsSource 对象的集合值中设置唯一的每行(对象)组合框值