[英]How to refresh DataGrid in C# / WPF?
private void cmbEmployee_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
string employee = (e.AddedItems[0] as ComboBoxItem).Content as string;
dgFake.ItemsSource = newdal2.SelectUser(employee).Tables[0].DefaultView;
}
当从组合框中单击该员工时,此方法会填充特定员工在我的WPF窗体上的数据网格,但是,当我在第一个员工之后单击另一个员工时,它不刷新数据网格,而是添加该员工的数据低于第一个。
如何刷新或删除数据网格中的项目,这是在WPF Xaml Windows窗体上,它不是DataGridView。 我已经尝试过这些,但没有一个有效:
dgFake.Items.Refresh();
dgFake.Items.Remove(); //Required a remove item passed to the method, so too specific
dgFake.Itemssource = "";
通常使用WPF,我们操纵数据 ,而不是UI元素 。 因此,在将collection属性Binding
到DataGrid.ItemsSource
属性之后,我们可以简单地使用collection属性:
在XAML中:
<DataGrid ItemsSource="{Binding YourCollection}" ... />
然后在代码中:
YourCollection.Clear();
或者更改项目:
YourCollection = someNewCollection;
您需要实现
INotifyPropertyChanged
接口 ,以便DataGrid
在更改此类数据后自动更新。
更新>>>
回应评论:'我已经添加了XAML代码,当你在XAML代码中谈论'YourCollection'时需要放在什么位置?':
您需要在代码中创建一个Bindable
集合属性; 这可以是代码隐藏中的DependencyProperty
,也可以是实现INotifyPropertyChanged
接口的CLR属性。 我们通常不在UI中显示数据库元素,而是更喜欢定义具有所需属性的对象类:
public static DependencyProperty EmployeesProperty = DependencyProperty.Register(
"Employees", typeof(ObservableCollection<Employee>), typeof(YourUserControl));
public ObservableCollection<Employee> Employees
{
get { return (ObservableCollection<Employee>)GetValue(EmployeesProperty); }
set { SetValue(EmployeesProperty, value); }
}
然后在cmbEmployee_SelectionChanged
处理程序方法中,您可以使用以下内容更新集合属性的值:
private void cmbEmployee_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
Employees = new ObservableCollection<Employee>();
string employee = (e.AddedItems[0] as ComboBoxItem).Content as string;
foreach (DataRow row in newdal2.SelectUser(employee).Tables[0].Rows)
{
Employees.Add(new Employee(row.Id, row.Name, row.Whatever));
}
Employees = newdal2.SelectUser(employee).Tables[0].DefaultView;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.