none
DataGridView验证行时得到指定列的焦点的问题 RRS feed

  • 问题

  •  我有RowValidating进行验证,验证不成功时焦点始终在当前单元格,不能移到其他单元格,我如何将焦点设到指定的单元格
    我的代码:
     private void dgv_RowValidating(object sender, DataGridViewCellCancelEventArgs e)
            {
    if (!dgvContact.IsCurrentRowDirty || !dgvContact.CurrentCell.IsInEditMode) return;  
    if ( string.IsNullOrEmpty( dgvContact.Rows[e.RowIndex].Cells["ContactName"].Value.ToString()))
    MessageBox.Show("姓名不能为空,请重新输入!", "错误!",
    MessageBoxButtons.OK, MessageBoxIcon.Error);
       e.Cancel =true;
    dgvContact.ClearSelection();
    dgvContact.CurrentCell =dgvContact.Rows[e.RowIndex].Cells["ContactName"];
    }
    我该怎么做,或实现相同的效果


    2011年11月24日 10:27

答案

  • 非常感谢,问题已解决

    if ( string.IsNullOrEmpty( dgvContact.Rows[e.RowIndex].Cells["ContactName"].Value.ToString()))

                   DgvError("联系人的姓名不能为空,请重新输入!", dgvContact, e, "ContactName");     

     private void DgvError(string ErrorText, DataGridView dgv,DataGridViewCellCancelEventArgs e,string columnName)

            {

                if (dgv == null || e == null || !dgv.Columns.Contains(columnName)||dgv.Rows.Count<e.RowIndex) return;

                MessageBox.Show(ErrorText, "错误!", MessageBoxButtons.OK, MessageBoxIcon.Error);     

                e.Cancel = true;

                if (dgv.Columns[e.ColumnIndex].Name != columnName)

                {

                    dgv.ClearSelection();

                    dgv.CurrentCell = dgv.Rows[e.RowIndex].Cells[columnName];

                    dgv.BeginEdit(false);            

                }

            }

     

    • 已标记为答案 黄愿 2011年11月25日 3:30
    2011年11月25日 3:30

全部回复

  • 仔细看你代码最后一行——你既然对ContactName验证,你最后还是指定激活ContactName,自然就是在原地了!

    解决方法,换成其它的列名即可。看我的实例:

     private void dataGridView1_RowValidating(object senderDataGridViewCellCancelEventArgs e)
            {
                if (dataGridView1.Rows[e.RowIndex].Cells["Column1"].Value==null)
                {
                    MessageBox.Show("Column1不能为空!");
                    e.Cancel = true;
                    dataGridView1.ClearSelection();
                    dataGridView1.CurrentCell = dataGridView1.Rows[e.RowIndex].Cells["Column2"];    
    //使得当前行第二列变成选中的
                }
            }

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处
    2011年11月25日 2:44
    版主
  • 非常感谢,问题已解决

    if ( string.IsNullOrEmpty( dgvContact.Rows[e.RowIndex].Cells["ContactName"].Value.ToString()))

                   DgvError("联系人的姓名不能为空,请重新输入!", dgvContact, e, "ContactName");     

     private void DgvError(string ErrorText, DataGridView dgv,DataGridViewCellCancelEventArgs e,string columnName)

            {

                if (dgv == null || e == null || !dgv.Columns.Contains(columnName)||dgv.Rows.Count<e.RowIndex) return;

                MessageBox.Show(ErrorText, "错误!", MessageBoxButtons.OK, MessageBoxIcon.Error);     

                e.Cancel = true;

                if (dgv.Columns[e.ColumnIndex].Name != columnName)

                {

                    dgv.ClearSelection();

                    dgv.CurrentCell = dgv.Rows[e.RowIndex].Cells[columnName];

                    dgv.BeginEdit(false);            

                }

            }

     

    • 已标记为答案 黄愿 2011年11月25日 3:30
    2011年11月25日 3:30