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;                  
  


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值