我有一个 DataGrid 显示一些具有相当多列的数据库。
我希望,当用户编辑新行时,会自动设置一些值。
使用 Windows 窗体 DataGrid 会很容易,因为有 RowsAdded 事件处理程序。但是我怎么能用 wpf DataGrid 处理这个?
编辑:我的 DataGrid 在 Xaml 中绑定到一个 ITable 的公共属性。当用户在 ComboBox 中选择一个表时,该属性将更新为相应的表。是的,有自动生成列,用户输入新行的方式是编辑最后一个空白行(默认行为)。
问问题
6651 次
3 回答
3
您可以在 LoadingRow 事件中执行此操作。尝试这样的事情:
private void myDataGrid_LoadingRow(object sender, System.Windows.Controls.DataGridRowEventArgs e)
{
MyObject myObject = e.Row.Item as MyObject;
if (myObject != null)
{
myObject.PropertyOne = "test";
myObject.PropertyTwo = 2;
}
}
于 2012-09-19T07:20:55.560 回答
1
好的,我想我明白了。
当 DataTable 绑定到 DataGrid 时,会创建一个 CollectionView 以便查看它。您可以使用(静态/共享)CollectionView.GetDefaultView(ThePropertyThatIsBound) 方法获取它。
由于它实现了 ICollectionChanged,因此您可以将事件处理程序添加到 CollectionChangedEvent。
在 CollectionChanged 事件处理程序中,如果您有一个新项目 (e.NewItems.Count>0),则必须对照 System.Windows.Data.CollectionView.NewItemPlaceholder 检查它,如果它不是占位符,则它是全新的项目,我可以设置所有默认值。
于 2012-09-19T17:06:03.810 回答
0
CollectionViewSource
为您分配一个DataGrid
然后收听CollectionChanged
事件,如下所示:
..
public CollectionViewSource ViewSource { get; set; }
..
this.ViewSource = new CollectionViewSource();
this.ViewSource.Source = new List<YourObjectType>();
this.ViewSource.View.CollectionChanged += View_CollectionChanged;
..
private void View_CollectionChanged(object sender,System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
if (e.NewItems.Count > 0)
{
YourObjectType myObject = e.NewItems[e.NewItems.Count-1] as YourObjectType;
if (myObject != null)
{
myObject.Property = TheValueYouWant;
..
}
}
}
..
<DataGrid ItemsSource="{Binding ViewSource.View}" ../>
于 2018-01-11T20:49:10.187 回答