添加和删除行
新建行
新项目行是 "视图 "顶部或底部的空行。用户可以在此行中输入数据来创建新行。TreeListView支持从v19.1开始的新建项目行。
要显示新项目行,请将TableView.NewItemRowPosition / TreeListView.NewItemRowPosition属性设置为Top或Bottom。
- 用户应在 "新建项目行 "中输入值。GridControl检查值是否有效,并根据当前的过滤器、组和排序设置在该处显示行。
- 在TreeListView中,在根层中添加了一条新的行。用户可以在层次结构中的任何地方拖动这一行。将DataViewBase.AllowDragDrop属性设置为true,以允许拖放操作。
- 用户可以在行聚焦时按Esc键取消追加新行。
- 如果一个单元格处于编辑模式,用户应该按Esc键两次来关闭编辑器并取消追加。
初始化新项目行
您可以用默认值初始化新项目行。
使用该事件创建一个新的行实例。
<dxg:GridControl Name="grid"> <dxg:GridControl.View> <dxg:TableView Name="view" NewItemRowPosition="Top" AddingNewRow="view_AddingNewRow" /> </dxg:GridControl.View> </dxg:GridControl>
void view_AddingNewRow(object sender, AddingNewEventArgs e) { e.NewObject = new Person(1); }
使用该事件来设置新项目行中的字段值。
<dxg:GridControl Name="grid"> <dxg:GridControl.View> <dxg:TableView Name="view" NewItemRowPosition="Top" InitNewRow="view_InitNewRow" /> </dxg:GridControl.View> </dxg:GridControl>
void view_InitNewRow(object sender, InitNewRowEventArgs e) { grid.SetCellValue(e.RowHandle, "CompanyName", "New Company"); grid.SetCellValue(e.RowHandle, "UnitPrice", 10); grid.SetCellValue(e.RowHandle, "Discontinued", false); }如果数据源允许你添加新的行,并且对象提供了一个没有参数的构造函数,那么GridControl就会创建一个新的行实例,否则,处理GridViewBase.AddingNewRow / TreeListView.AddingNewNode事件并指定NewObject属性。否则,处理GridViewBase.AddingNewRow / TreeListView.AddingNewNode事件并指定NewObject属性。
在Self-Referential模式下的TreeListView中,不能用重复的主键添加New Item Row。处理TreeListView.InitNewNode / TreeListView.AddingNewNode事件,并以唯一的主键初始化TreeListView.KeyFieldName属性中指定的字段。
<dxg:TreeListView x:Name="view" KeyFieldName="ID" ParentFieldName="ParentID" NewItemRowPosition="Bottom" InitNewNode="OnInitNewNode" />
void OnInitNewNode(object sender, DevExpress.Xpf.Grid.TreeList.TreeListNodeEventArgs e) { view.SetNodeValue(e.Node, "ID", view.TotalNodesCount + 1); // ... }在代码中添加和删除行
void addNewRow(object sender, RoutedEventArgs e) { view.AddNewRow(); // 通过代码直接向新建行赋值 int newRowHandle = DataControlBase.NewItemRowHandle; grid.SetCellValue(newRowHandle, "ProductName", "New Product"); grid.SetCellValue(newRowHandle, "CompanyName", "New Company"); grid.SetCellValue(newRowHandle, "UnitPrice", 10); grid.SetCellValue(newRowHandle, "Discontinued", false); }移除行
void deleteRow(object sender, RoutedEventArgs e) { view.DeleteRow(view.FocusedRowHandle); //这里可以添加移除后的后端数据处理 }