问题描述
尝试使用VB.Net+DataGridview写个增删改程序。Win7+VB.NET2010+DataGridview+Dataset绑定,通过SqldataAdapter.update更新。我想检查用户所编辑行有没有不符合条件的单元格,新增行有没有空单元格存在,如果存在不符合单元格或空单元格,则提示用户是否继续,如果用户点击“否”,则程序不保存用户输入结果并删除不符合条件或存在空单元格所在行。我当前将相关代码写在Datagridview的Rowvalidating事件中,当执行删除代码时,出错提示“不能在此事件处理程序中执行操作“。请问我该如何实现删除不符合条件行。前提是,先检查所在行是否存在不符条件单元格,根据检查结果再执行相应操作。我该在什么事件中处理不符合条件行的删除动作呢?顺便请说明一下DataGridview事件执行顺序。请贴出具体执行代码。谢谢PrivateSubDataGridView1_RowValidating(senderAsObject,eAsSystem.Windows.Forms.DataGridViewCellCancelEventArgs)HandlesDataGridView1.RowValidatingIf(NotOver_load)ThenReturnIfMe.DataGridView1.Rows.Count<=1ThenReturnIfDeletingThenReturnIfMe.DataGridView1.SelectedRows.Count<=0ThenReturnIfMe.DataGridView1.SelectedRows(0).IsNewRowThenReturnSystem.Console.WriteLine("RowsCount:"&Me.DataGridView1.RowCount)ForEachCol_indexAsDataGridViewColumnInMe.DataGridView1.Columns'IfMe.DataGridView1.sThenIfIsDBNull(Me.DataGridView1.Rows(e.RowIndex).Cells(Col_index.Index).Value)OrElseMe.DataGridView1.Rows(e.RowIndex).Cells(Col_index.Index).Value.ToString=""Then'MessageBox.Show("不允许单元格为空值","格式错误",MessageBoxButtons.OK,MessageBoxIcon.Error)IfMessageBox.Show("当前编辑行存在空值单元格,如若离开本行,程序将不会更新,是否离开?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question)=Windows.Forms.DialogResult.NoThene.Cancel=TrueExitForElse'MsgBox("ss")'tbl.Rows(e.RowIndex-1).Delete()Me.DataGridView1.Rows.RemoveAt(e.RowIndex)EndIfEndIfNextEndSub
解决方案
解决方案二:
如果有BINDINGSOURCE使用bindingsource.endedit如果使用dataset使用DataSet.AcceptChanges新增行在没有被dataset接受前是无法被删除的。
解决方案三:
取消是BindingSource.CancelEdit()或者DataSet.RejectChanges