devExpress GridView删除行的几种方式

  一直以来,GridView的行删除,没的搞清楚。

以前是这样实现的,当然也可行,方法是第一步在Dataset中,加一个删除用的函数,然后删除之。

        private void gridControlChaoSongRen_EmbeddedNavigator_ButtonClick(object sender, DevExpress.XtraEditors.NavigatorButtonClickEventArgs e)
        {
            int hRowHandle = this.gridViewCSR.FocusedRowHandle;
            if (hRowHandle < 0)
                return;

            object objRowId = gridViewCSR.GetRowCellValue(hRowHandle, "id");          
            if (null == objRowId)
            {
                return;
            }
            int nId = Convert.ToInt32(objRowId);

            if (e.Button.ButtonType == DevExpress.XtraEditors.NavigatorButtonType.Remove)
            {
               
                this.relChaosongrenProjectTableAdapter.DeleteByID(nId);
              
            }

            curcsr = null;
        }     

但总觉得不是很理想。

看这个示例:

https://documentation.devexpress.com/#WindowsForms/DevExpressXtraGridViewsBaseColumnView_DeleteRowtopic

    private void gridView1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) {
        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);
        }
    }


这样看起来好一些。

但这里有个问题,KeyDown是GridView的事件,

而NavBar从属于gridCtrl.

当然,这不是大问题,问题是,               

这样调用,

     gridViewRG.DeleteRow(hRowHandle);

或者这样,

        private void DeleteSelectedRowsResourceGroup(DevExpress.XtraGrid.Views.Grid.GridView view)
        {

            if (view == null || view.SelectedRowsCount == 0) return;

           DataRow[] rows = new DataRow[view.SelectedRowsCount];
            for (int i = 0; i < view.SelectedRowsCount; i++)
               rows[i] = view.GetDataRow(view.GetSelectedRows()[i]);

            
           view.BeginSort();
           try
            {

                foreach (DataRow row in rows)
                   row.Delete();

                this.resourceGroupTableAdapter.Update(this.schedulerDBDataSet);
                schedulerDBDataSet.AcceptChanges();

            }

           finally
            {
                view.EndSort();
            }

        }

都出现的情况是,界面上少了两行。


经过思考,发现,少了一句话:

                    e.Handled = true;         


比如,正确可以这样:


   if (e.Button.ButtonType == DevExpress.XtraEditors.NavigatorButtonType.Remove)
                {
                   
                    int hRowHandle = this.gridViewRG.FocusedRowHandle;
                    if (hRowHandle < 0)
                        return;


                    gridViewRG.DeleteRow(hRowHandle);

                    this.resourceGroupTableAdapter.Update(this.schedulerDBDataSet);
                    schedulerDBDataSet.AcceptChanges();
                    e.Handled = true;                 
                   
                }


或者

                   DevExpress.XtraGrid.GridControl ctrl = sender as DevExpress.XtraGrid.GridControl;

                   object objRowId = gridViewRG.GetRowCellValue(hRowHandle, "ResourceGroupID");
                  DataRowView drv = (DataRowView)gridViewRG.GetRow(hRowHandle);
                   DataRow row = drv.Row;                   
                   row.Delete();


                    this.resourceGroupTableAdapter.Update(this.schedulerDBDataSet);
                    schedulerDBDataSet.AcceptChanges();
                    e.Handled = true;                  
  


  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在使用DevExpress GridControl控件,如果需要添加新,可以通过以下步骤实现: 1. 首先,在GridControl控件想要添加新的数据源,比如DataTable、List等。 2. 然后,在GridControl控件的Designer视图设置控件的AllowAddNewRow属性为True。 3. 接着,在代码调用GridView控件的AddNewRow方法,启动添加新操作。 4. 在GridView控件的InitNewRow事件,对新初始化,比如设置默认值等。 5. 最后,将新添加到数据源,刷新GridView的数据显示。 下面是示例代码: 1. 在GridControl控件的Designer视图设置AllowAddNewRow属性为True: ![image](https://user-images.githubusercontent.com/8575679/137455672-6dfeefa6-0ed6-4c6b-8d1e-0cfa34dde057.png) 2. 在代码调用GridView的AddNewRow方法启动添加新操作: ``` gridView1.AddNewRow(); ``` 3. 在GridView的InitNewRow事件的初始化: ``` private void gridView1_InitNewRow(object sender, DevExpress.XtraGrid.Views.Grid.InitNewRowEventArgs e) { gridView1.SetRowCellValue(e.RowHandle, "ID", 0); gridView1.SetRowCellValue(e.RowHandle, "Name", "New Row"); } ``` 这里通过SetRowCellValue方法设置新的ID和Name属性值。 4. 最后,在代码将新添加到数据源,刷新GridView的数据显示: ``` dataTable.Rows.Add(gridView1.GetDataRow(gridView1.FocusedRowHandle)); gridView1.RefreshData(); ``` 这里通过Add方法将新添加到DataTable,然后调用GridView的RefreshData方法刷新数据显示。 以上就是在DevExpress GridControl控件添加新的步骤,实现起来相对简单。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值