在C#中验证单元格并显示数据网格视图的气球工具提示

时间:2013-12-18 22:12:39

标签: c# winforms validation datagridview tooltip

我的表单中有一个datagridview,每次用户向某个单元格输入值时,我都希望对行执行验证。

我尝试使用RowValidating事件,但在将e.Canel设置为true后出现了一些问题:

  • 用户可以退出编辑模式并通过单击同一行中的另一个单元格来编辑其他行,或者在键入单元格的值后按TAB或ENTER。
  • 当e.Canel == true时,整个表单似乎卡住了,这是一件好事。但是,如果用户试图关闭表单(通过按左上角的关闭按钮),则只有窗口的外边框消失,窗体中其余控件仍然“浮动”(仍然卡住)。

所以我想知道是否还有另一个更适合我需求的活动?或者有关如何解决上述问题的任何想法?

鉴于我有办法冻结行的编辑,我还想在相关行旁边显示一个错误气球工具提示,指出错误。 我想,为了做到这一点,我必须将dataGridView的ShowCellToolTips属性设置为false。但是,我的行可能包含大量数据,因此我希望在鼠标悬停在单元格上时显示工具提示。 我是否有办法在不将ShowCellToolTips设置为false的情况下显示气球工具提示?

最后一件事 - 我希望气球工具提示指向上方,就像在您尝试重命名文件时插入非法字符时显示的工具提示一样。似乎默认的气球工具提示指向下方,我该如何更改呢?

提前致谢!

1 个答案:

答案 0 :(得分:2)

为DataGridView控件的CellValidating和CellEndEdit事件实现处理程序。

private void dataGridView1_CellValidating(object sender,
    DataGridViewCellValidatingEventArgs e)
{
    // Validate the CompanyName entry by disallowing empty strings.
    if (dataGridView1.Columns[e.ColumnIndex].Name == "CompanyName")
    {
        if (String.IsNullOrEmpty(e.FormattedValue.ToString()))
        {
            dataGridView1.Rows[e.RowIndex].ErrorText =
                "Company Name must not be empty";
            e.Cancel = true;
        }
    }
}

void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    // Clear the row error in case the user presses ESC.   
    dataGridView1.Rows[e.RowIndex].ErrorText = String.Empty;
}

http://msdn.microsoft.com/en-us/library/ykdxa0bc(v=vs.80).aspx