【问题标题】:DataGridView: mysterious second dropdownDataGridView:神秘的第二个下拉菜单
【发布时间】:2014-05-21 13:50:00
【问题描述】:

当我的数据网格视图中的下拉组合框的编辑控件浮出水面,并且用户扩大宽度时,会出现一个辅助组合框。

这似乎不是由 AutoGeneratedColumns 引起的,因为我将其设置为 false。

protected override void OnCellPainting(DataGridViewCellPaintingEventArgs e)
{
    base.OnCellPainting(e);

    if (e.RowIndex >= 0 && e.ColumnIndex >= 0)
    {
        DataGridViewRow currentRow = this.Rows[e.RowIndex];
        DataGridViewCell currentCell = currentRow.Cells[e.ColumnIndex];
        DataItem item = currentRow.DataBoundItem as DataItem;
        if (item != null)
        {
            if (new string[] { "Property1", "Property2" }.Contains(this.Columns[e.ColumnIndex].DataPropertyName))
            {
                EnableDisableCell(currentCell, item);
            }
        }
    }
}

private void EnableDisableCell(DataGridViewCell cell, DataItem boundItem)
{
    if (cell != null)
    {
        switch (cell.OwningColumn.DataPropertyName)
        {
            case "Property1":
                if (boundItem.AllowP1Assignment)
                {
                    cell.Enable();
                }
                else
                {
                    cell.Disable();
                }
                break;

            case "Property2":
                if (boundItem.AllowP2Assignment)
                {
                    cell.Enable();
                }
                else
                {
                    cell.Disable();
                }
                break;
            default:
                break;
        }

    }
}

编辑:

EnableDisableCell() 方法似乎不是罪魁祸首。我将其注释掉并看到了相同的工件。

【问题讨论】:

  • 这只是绘画错误还是两者都起作用?
  • @Taw:似乎是一个绘制错误,因为下拉菜单始终与左侧垂直列线齐平(并且从不与右侧组合框齐平)。此外, OnPaint 调用始终具有相同的 this.GetHashCode() 值。 OnPaint 调用之间的宽度也不同。
  • 也许使 DGV 或单元区域无效会使其消失..?但是在 Paint 事件中更改 Cell 的启用状态对我来说确实很可疑。这应该发生在任何绘画之前..

标签: c# winforms datagridview .net-3.5 datagridviewcomboboxcell


【解决方案1】:

非常感谢 TaW 和这个网站:

http://www.csharp-examples.net/redraw-control-on-resize/

我只需要将它添加到构造函数中:

ResizeRedraw = true;

显然您也可以在涉及调整大小的事件中调用 Invalidate() 来调整整个事件的大小。

有趣的是 this.EditingControlDataGridView.EditingControl.Width 和 e.ClipRectangle.Width 是不同的。不同之处在于添加到右侧的“额外”空间。如果我只允许在它们相等时进行绘画,那么在右侧可以观察到一个空白区域。

【讨论】:

    猜你喜欢
    • 2012-06-29
    • 2017-09-19
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多