重新定位DataGridView的错误图标

时间:2014-07-03 20:41:11

标签: c# winforms datagridview

我在数据绑定的winform上有一个datagridview。网格不允许编辑它只是通过比较两个单独的数据源来查看数据不一致,因此可以在数据的记录应用程序中更正修复。正如我所做的那样,如果出现问题,我会设置DataRow的SetColumnError属性。问题是当数据绑定完成并且网格呈现错误图标覆盖部分datagridcell数据时。我在SO和网络上尝试了几种不同的方法,没有任何方法可以移动图标。有什么想法吗?

当在

后面的代码中构建网格时,我已经设置了以下内容
Padding newpadding = new Padding(10, 0, 30, 0)
datagridview.RowTemplet.DefaultCellStyle.Padding = newPadding

但这是结果

enter image description here

2 个答案:

答案 0 :(得分:0)

我不知道如何操纵错误图标,无论是位置还是其他任何东西。

但也许这个小小的解决方法有助于:通过清除错误文本,而不是改变它的位置,为什么不完全删除它。如果将其复制到工具提示,您仍然可以访问其值,甚至可以将其显示给用户。

而不是图标,通过绘制背景或单元格的前景来指示错误。

通过组合ValidatingValidated事件,我得到它为我工作,一个设置颜色,另一个清除错误指示器,但颜色仍然坚持:

private void dataGridView1_CellValidated(object sender, DataGridViewCellEventArgs e)
{
    DataGridViewCell cell = datagridview.Rows[e.RowIndex].Cells[e.ColumnIndex];
    cell.ToolTipText = cell.ErrorText;
    cell.ErrorText = "";
}

private void DGV_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
    DataGridViewCell cell = datagridview.Rows[e.RowIndex].Cells[e.ColumnIndex];
    cell.Style.BackColor = cell.ErrorText != "" ? Color.Salmon : datagridview.BackColor;

}

答案 1 :(得分:0)

我找到了问题的解决方案。在尝试了许多不同的事情后,我遇到了一段解决问题的代码here

以前是:

enter image description here

以下是:

enter image description here

至少对我来说,可以在CellPainting()事件中进行更改。我正在将DataSet数据绑定到只读的DataGridView中。 DataSet已经包含了针对DataSet的内部操作运行的Errors和ErrorText。

密钥代码更改为e.CellBounds.X + 30,这会将X轴额外填充30,从而将图像推向右侧。

private void dgv_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
    e.Paint(e.CellBounds, DataGridViewPaintParts.All & ~DataGridViewPaintParts.ErrorIcon);
    if (e.ColumnIndex > -1 && e.RowIndex > -1)
    {
        if (this.dgv[e.ColumnIndex, e.RowIndex].ErrorText != string.Empty)
        {
            Rectangle errorRect = this.dgv[e.ColumnIndex, e.RowIndex].ErrorIconBounds;
            errorRect.X += e.CellBounds.X + 30;
            errorRect.Y += e.CellBounds.Y;
            e.Graphics.DrawImage(gridErrorIcon, errorRect);
        }
        e.Handled = true;
    }
}

internal static Image gridErrorIcon
{
    get { return Properties.Resources.Error; }
}