【问题标题】:CellValidating error on cell focus单元格焦点上的 CellValidating 错误
【发布时间】:2012-10-28 06:34:11
【问题描述】:

我的表单中有 2 个 Datagridview,我在我的 datagridview 中使用单元格验证和单元格验证事件处理程序。如果我将光标留在单元格本身并尝试通过菜单单击打开一个新文件..我收到一条错误消息:“用户代码未处理异常参数,索引超出范围。”

我知道,当光标位于单元格中时,它会获得焦点并且它正在单元格验证过程中,这就是我收到此错误的原因。

此行引发错误消息:“用户代码未处理异常参数,索引超出范围。” datagridview.Rows[e.RowIndex].ErrorText = "";

我怎样才能避免这个错误?或者如何在菜单单击打开新文件时移除焦点?谢谢。

private void datagridview_CellValidating(object sender, CellValidatingEventArgs e)
            {
                if (e.ColumnInfo.Name == "Item1" || e.ColumnInfo.Name == "Item2")
                {
                    datagridview.Rows[e.RowIndex].ErrorText = "";
                    int newInteger;
                    if (datagridview.Rows[e.RowIndex].IsModified)
                        return;
                    if (!int.TryParse(e.Value.ToString(),
                         out newInteger) || newInteger < -50000 || newInteger > 50000)
                    {
                        e.Cancel = true;
                        datagridview.Rows[e.RowIndex].ErrorText = "The value must be a non-negative integer";
                    }
                }

            }

 private void datagridview_CellValidated(object sender, CellValidatedEventArgs e)
            {

                if (e.ColumnIndex != 3)
                    return;
                int nextRowIndex = e.RowIndex + 1;
                int lastRowIndex = datagridview.Rows.Count - 1;
                if (nextRowIndex <= lastRowIndex)
                {
                    var value = datagridview.Rows[e.RowIndex].Cells[3].Value.ToString();
                    datagridview.Rows[nextRowIndex].Cells[2].Value = value;
                }
            }

MenuItem 点击打开新文件到 Datagridview:

private void m_test1_Click_1(object sender, EventArgs e)
    {
        myconfig = Myconfig.DeserializeFromXmlFile(@"test2.xml");
        Display(rseConfig);
        m_ConfigPages.Visible = true;

    }



private void m_test2_Click(object sender, EventArgs e)
  {
        myconfig = Myconfig.DeserializeFromXmlFile(@"test2.xml");
        Display(myconfig );
        m_ConfigPages.Visible = true;

    }

我正在使用 DataError Event Hnadler,但它不起作用:

private void datagridview_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {
            // Don't throw an exception when we're done.
            e.ThrowException = false;

            // Display an error message.
            string txt = "Error with " +
                datagridview.Columns[e.ColumnIndex].HeaderText +
                "\n\n" + e.Exception.Message;
            MessageBox.Show(txt, "Error",
                MessageBoxButtons.OK, MessageBoxIcon.Error);

            // If this is true, then the user is trapped in this cell.
            e.Cancel = true;
        }

即使,我有行和列索引:datagridview.Rows[e.RowIndex].Cells[e.ColumnIndex].Value 仍然无法正常工作。

【问题讨论】:

  • 你尝试过 data_error 事件吗?
  • @Sami:不……真的和我的问题有关吗?请给我解释一下。
  • 不要在 dataerror 事件中显示任何错误,请尝试修改(由我)的单元格验证代码。您的 if 条件层次结构似乎有问题。尽管焦点单元格中存在有效值,但您是否收到错误。希望不是。如果是,那么您在其他地方有问题。这可能需要有关您的代码和方案的更多信息

标签: c# winforms datagridview event-handling


【解决方案1】:

尝试添加此事件

dgv.DataError += new DataGridViewDataErrorEventHandler(dgv_DataError);


void dgv_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
      //Show any message or not.. its upto you now 
}

编辑:

将你的 cellvalidating 事件修改为

private void datagridview_CellValidating(object sender, CellValidatingEventArgs e)
{
  try
  {
     int temp = Convert.ToInt32(e.Value.ToString())
     if(temp < -5000 || temp > 5000)     
          datagridview.Rows[e.RowIndex].ErrorText = "The value must be bteewn 5000 and 5000";
  }
  catch
  {
     datagridview.Rows[e.RowIndex].ErrorText = "The value must be integer and bteewn 5000 and 5000";
  }
}

【讨论】:

  • 您可以静态添加此事件(通过 GUI.. 从 datagridview 的事件中)
  • 我添加了数据错误事件处理程序并检查了我仍然面临同样的问题。请看问题,我已经更新了。
  • 我尝试了同样的方法,效果很好;谢谢你;
  • @linguini 欢迎您。对不起,我来晚了。我在外面很忙。如果您对答案感到满意,您可以投票。如果它只是可以接受的就没有问题:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-26
  • 2012-01-26
  • 1970-01-01
  • 2014-05-03
  • 2012-04-09
  • 2011-10-12
  • 2014-06-06
相关资源
最近更新 更多