0

我正在使用 Windows 窗体创建我的第一个 C# 应用程序,但遇到了一些麻烦。我正在尝试验证放置在 DataGridView 控件的特定单元格内的内容。如果内容无效,我想警告用户并以红色突出显示单元格的背景。此外,我想取消事件以防止用户移动到另一个单元格。当我尝试这样做时,消息框成功显示,但背景颜色永远不会改变。有谁知道为什么?这是我的代码:

        private void dataInventory_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
    {

        switch (e.ColumnIndex)
        {
            case 0:
                if (!Utilities.validName(e.FormattedValue))
                {
                    dataInventory.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.BackColor = Color.Red;
                    MessageBox.Show("The value entered is not valid.");
                    e.Cancel = true;
                }
                else
                {
                    dataInventory.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.BackColor = Color.White;
                }
                break;

//更多东西

4

2 回答 2

1

MessageBox 不是验证期间使用的最佳工具。通过 make e.Cancel = true;,您是在告诉网格不要让单元格失去焦点,但 MessageBox 会使光标离开控件。事情有点混乱。

着色部分应该可以工作,但由于单元格被突出显示,您可能看不到结果。

尝试更改代码以使用网格显示错误图标的能力:

dataGridView1.Rows[e.RowIndex].ErrorText = "Fix this";
e.Cancel = true;

使用 CellEndEdit 事件清除消息。

void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
  dataGridView1.Rows[e.RowIndex].ErrorText = String.Empty;
}

请参阅演练:验证 Windows 窗体 DataGridView 控件中的数据

于 2012-07-27T03:11:19.793 回答
0

使用以下代码

DataGridViewCellStyle CellStyle = new DataGridViewCellStyle();
CellStyle.BackColor = Color.Red;
dataInventory.Rows[e.RowIndex].Cells[e.ColumnIndex].Style = CellStyle;
于 2012-07-27T03:08:54.257 回答