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

本文关键字:网格 数据网 视图 工具提示 气球 数据 显示 验证 单元格 | 更新日期: 2024-10-30 03:55:46

我的表单中有一个数据网格视图,我想在每次用户向某个单元格输入值时对一行执行验证。

我尝试使用行验证事件,但在将 e.Canel 设置为 true 后它遇到了一些问题:

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

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

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

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

提前感谢!

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

实现 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