C# 在dataGridView中创建自定义格式字符串

C# 在dataGridView中创建自定义格式字符串,c#,formatting,tostring,C#,Formatting,Tostring,我有一个dataGridView,它的数据源是dataTable 我的问题是,我希望某些列以十六进制显示。我可以通过使用这样的东西做到这一点: foreach (DataGridViewColumn c in grid.Columns) { if (DISPLAYED_IN_HEX.Contains(c.Name)) { c.DefaultCellStyle.Format = "X";

我有一个dataGridView,它的数据源是dataTable

我的问题是,我希望某些列以十六进制显示。我可以通过使用这样的东西做到这一点:

 foreach (DataGridViewColumn c in grid.Columns)
        {
            if (DISPLAYED_IN_HEX.Contains(c.Name))
            {
                c.DefaultCellStyle.Format = "X";

            }
        }

但我的问题是,我希望这个十六进制值前面加上0x,这样就不会让任何人混淆它们是十六进制形式的。数据表中的值是各种整数类型。我想创建一个自定义IfMatalPosivor,但我认为我的编码技能还没有达到那个标准。任何其他可能的解决方案?

可能不是最有效的方法,但是您可以处理
CellFormatting
事件,然后逐个单元格更改格式

是的,CellFormatting事件就可以了。下面是一个示例,它尝试将第一列中的十进制数转换为十六进制:

    private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) {
        if (e.ColumnIndex == 0 && e.Value != null) {
            long value = 0;
            if (long.TryParse(e.Value.ToString(), out value)) {
                e.Value = "0x" + value.ToString("X");
                e.FormattingApplied = true;
            }
        }
    }

在CellFormatting事件中,您可以捕获要使用EventArgs格式化的列。通过使用您想要的任何字符串修改e.Value属性,您将能够根据需要重新格式化该字符串。如果确实进行了任何修改,请确保选中e.FormatApplied为true。问题是数据类型不是字符串,因此我不能将其值更改为在其前面有0x。您可以将其更改为字符串,然后在其前面添加0x,并将原始值存储在cells标记属性中。至少,如果只是为了显示信息,如果您需要将其写回数据表,我不确定。我无法使用DataGridViewCellFormattingEventArgs访问有关数据类型的任何内容。我可以将e.value设置为我想要的字符串,但它似乎会自动更新数据表,这就是关于string->int引发异常的地方。奇怪的是,我刚刚检查了,我得到了一个从数据表填充的datagrid,我将
double
DateTime
字段格式化为字符串,没有任何问题(除非它悄悄地将它们转换回来,但我在双精度上加了一个货币符号)。我所做的一切都类似于
e.Value=FormatAsMyString(e.Value
);。谢谢,尽管greggorob64明确表示,我忘记了行e.FormattingApplied=true;