在没有 VirtualMode 的情况下更改 DataGridView 中的值

Change value in DataGridView without VirtualMode

我正在努力从 DataGridView 中删除 VirtualMode(它无法正常工作,我决定改用分页网格视图)并且一切正常。

只有一件事还欠缺。我的数据集有 enums,它们是直接从数据库中查询的,因此只有英文。我想翻译 de DataGridView 中的数据。我可以调用一些处理程序来转换数据源中的数据吗?

(在 VirtualMode 中,我实现了 CellValueNeeded,它也处理翻译;当虚拟模式关闭时,不再触发此事件。)

我做过这样的事情,在不更改底层数据的情况下处理 dataGridView 中的 CellFormatting 事件

private void Grid_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    if (e.ColumnIndex != 2) // enum value column
        return;

    var grid = (DataGridView)sender;
    MyEnum val = (MyEnum)grid[e.ColumnIndex, e.RowIndex].Value;
    switch (val)
    {
        case MyEnum.Val1: e.Value = "Translation1"; break;
        case MyEnum.Val2: e.Value = "Translation2"; break;
    }

    e.FormattingApplied = true;
}

这仅显示第 2 列单元格中 MyEnum 值的翻译