Add and Remove Rows

New Item Row

返回:GridControl-Grid View

数据网格可以显示一个空行,使用户可以添加新记录。该行由显示在相应行指示符单元格内的星号(*)标识。若要取消添加新行,用户可以按Esc键。
在这里插入图片描述

相关API

  • GridOptionsView.NewItemRowPosition — 允许您启用一个新的项目行,并选择它应该定位到视图的上边缘还是下边缘。
  • GridControl.NewItemRowHandle — 一个常量,用于指定“新建项目行”的行句柄。

Initialize New Rows

ColumnView.InitNewRow 每当用户添加新记录时,InitNewRow事件就会激发。处理此事件并调用相应的SetValue和GetValue方法,以方便用户输入并使用默认值自动填充新行单元格。

在以自定义方式初始化新添加的行的演示模块中,每一个新行都会自动接收“记录日期”、“名称”和“备注”列下单元格的初始值。

 gridView.OptionsView.NewItemRowPosition = NewItemRowPosition.Top;

 // Handle the InitNewRow event to initialize newly added rows. To initialize row cells, use the SetRowCellValue method.
 gridView.InitNewRow += (s, e) => {
     GridView view = s as GridView;
     // Set the new row cell value.
     view.SetRowCellValue(e.RowHandle, view.Columns["RecordDate"], DateTime.Today);
     view.SetRowCellValue(e.RowHandle, view.Columns["Name"], "CustomName");
     // Obtain the new row cell value.
     int newRowID = Convert.ToInt32(view.GetRowCellValue(e.RowHandle, "ID"));
     view.SetRowCellValue(e.RowHandle, view.Columns["Notes"], string.Format("Row ID: {0}",newRowID));
 };

Data Navigator

数据导航器是一个嵌入式工具栏,允许用户浏览数据网格记录和添加/删除行。
在这里插入图片描述

相关API

  • GridControl.UseEmbeddedNavigator—指定数据导航器是否可用。
  • GridControl.EmbeddedNavigator。按钮–显示在数据导航器中的按钮。

Control Navigator

数据导航器是直接显示在数据网格中的ControlNavigator对象。如果需要,您可以创建一个独立的ControlNavigator,并将其放置在网格外的任何位置。使用导航器的
ControlNavigator.NavigatableControl属性,将导航器绑定到数据网格。控件导航器还可以浏览树状列表和垂直网格控件的记录。
在这里插入图片描述

Add and Remove Rows in Code

修改基础数据源

如果数据源允许用户添加和删除记录,则可以使用数据源API修改网格行。如果数据源未实现IBindingList接口,则不会向数据网格发送添加/删除通知。在这种情况下,请调用 GridControl.RefreshDataSource方法(更新主网格视图)或BaseView.RefreshData方法(用于更新此特定视图)以手动更新数据网格GridOptionsNavigation.AutoFocusNewRow属性允许数据网格自动聚焦添加到数据源的新记录。

下面的代码将新记录添加到BindingList<T>对象中,该对象用作数据网格的数据源。由于此数据源支持更新通知,因此不需要手动刷新数据网格。

private void barButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) {
    (gridControl1.DataSource as BindingList<SalesPerson>).AddNew();
}

ColumnView.AddNewRow

将空行添加到数据网格中。如果启用了“新建项目行”,则此方法会将焦点移到此元素。否则,新记录将临时放置在现有记录的下方。用户输入单元格值并接受该行后,新行将根据当前数据组的筛选器、组和排序设置移动到其最终位置。若要手动接受新行,请调用ColumnView。来自代码的UpdateCurrentRow方法。以下代码显示如何将新行添加到数据组中。假设网格视图中的数据是根据一列或多列进行分组的。该行被添加到与当前关注的行相同的组中。

private void AddNewRowInGroupMode(DevExpress.XtraGrid.Views.Grid.GridView View) {
    //Get the handle of the source data row 
    //The row provides group column values for a new row 
    int rowHandle = View.GetDataRowHandleByGroupRowHandle(View.FocusedRowHandle);
    //Store group column values 
    object [] groupValues = null;
    int groupColumnCount = View.GroupedColumns.Count;
    if(groupColumnCount > 0) {
        groupValues = new object[groupColumnCount];
        for(int i = 0; i < groupColumnCount; i++) {
            groupValues[i] = View.GetRowCellValue(rowHandle, View.GroupedColumns[i]);
        }
    }
    //Add a new row 
    View.AddNewRow();
    //Get the handle of the new row 
    int newRowHandle = View.FocusedRowHandle;
    object newRow = View.GetRow(newRowHandle);
    //Set cell values corresponding to group columns 
    if(groupColumnCount > 0) {                
        for(int i = 0; i < groupColumnCount; i++) {
            View.SetRowCellValue(newRowHandle, View.GroupedColumns[i], groupValues[i]);
        }
    }
    //Accept the new row 
    //The row moves to a new position according to the current group settings 
    View.UpdateCurrentRow();
    //Locate the new row 
    for(int n = 0; n < View.DataRowCount; n++) {
        if(View.GetRow(n).Equals(newRow)) {
            View.FocusedRowHandle = n;
            break;
        }
    }
}

ColumnView.DeleteRow

从视图中删除数据记录或组行。如果数据源包含多个具有主细节关系的表,则此方法将删除一行及其关联的子行。下面的代码片段演示了当用户按下Ctrl+Del快捷键时如何删除关注的行。

if (e.KeyCode == Keys.Delete && e.Modifiers == Keys.Control) {
    if (MessageBox.Show("Delete row?", "Confirmation", MessageBoxButtons.YesNo) != 
      DialogResult.Yes)
        return;
    GridView view = sender as GridView;                
    view.DeleteRow(view.FocusedRowHandle);
}

ColumnView.DeleteSelectedRows

如果ColumnViewOptionsSelection.MultiSelect属性已启用,用户可以选择多个数据网格行(或行单元格,具体取决于当前的GridOptionsSelection.MultiSelectMode设置)。如果启用了单个单元格选择,DeleteSelectedRows()方法将删除所有选定的行以及具有选定单元格的所有行。

How to Save a Modified Row

数据网格和其他DevExpress数据感知控件(Gantt Control、Vertical Grid、TreeList等)不与真实数据存储交互。相反,它们使用连接到这些存储器的数据源。数据感知控件将用户编辑保存到数据源,但您需要手动将这些更改发布到底层存储中。有关详细信息,请参阅本帮助主题:Post Data to an Underlying Data Source.

若要将修改后的行值发布到基础源,请处理ColumnView.RowUpdated事件。当用户导航离开编辑的行时,会触发此事件。

DXApplication.AdventureWorksDW2008R2Entities dbContext;

void gridView1_RowUpdated(object sender, RowObjectEventArgs e) {
    dbContext.SaveChanges();
}

请注意,RowUpdated在存在活动编辑器时不会激发(BaseView.IsEditing属性返回true)。要手动触发此事件,请调用BaseView.CloseEditor方法关闭编辑器,然后调用BaseView.UpdateCurrentRow方法。

  • 16
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值