3

我有一个 DataGrid 显示一些具有相当多列的数据库。
我希望,当用户编辑新行时,会自动设置一些值。
使用 Windows 窗体 DataGrid 会很容易,因为有 RowsAdded 事件处理程序。但是我怎么能用 wpf DataGrid 处理这个?
编辑:我的 DataGrid 在 Xaml 中绑定到一个 ITable 的公共属性。当用户在 ComboBox 中选择一个表时,该属性将更新为相应的表。是的,有自动生成列,用户输入新行的方式是编辑最后一个空白行(默认行为)。

4

3 回答 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 回答