C# 在C中将datagridview列valuetype从char转换为字符串#

C# 在C中将datagridview列valuetype从char转换为字符串#,c#,datagridviewcolumn,C#,Datagridviewcolumn,我有一个IEnumerable列表,并且datagridview在运行时由该列表提供 i.e. datagridviewBindingSource.DataSource = myList; datagridview.DataSource = datagridviewBindingSource; 在此列表中,所有列均为“字符串”类型,但有两列“状态”和“区域”,其中包含类型为“字符”的值。 状态可以有值={O',C'}(打开和关闭),区域可以 have值={'I','F','R'}(进

我有一个IEnumerable列表,并且datagridview在运行时由该列表提供

i.e. datagridviewBindingSource.DataSource = myList;
     datagridview.DataSource = datagridviewBindingSource;
在此列表中,所有列均为“字符串”类型,但有两列“状态”“区域”,其中包含类型为“字符”的值。

状态可以有值={O',C'}(打开和关闭),区域可以 have值={'I','F','R'}(进程中,最终,接收}

现在,在运行时,我想显示:

打开而不是O

关闭而不是C

在过程中而不是我

等等

我正在这样做:

foreach (DataGridViewColumn c in dataGridView1.Columns)
                {
                    if (c.HeaderText == "Status")
                    {
                        MessageBox.Show(c.ValueType.ToString());
                        c.ValueType = typeof(string);
                    }
                }
                foreach (DataGridViewRow r in dataGridView1.Rows)
                {
                    foreach (DataGridViewCell c in r.Cells)
                    {
                        if (c.Value == null)
                        {
                            c.Value = "";
                        }
                        if (c.Value.GetType() == typeof(char))
                        {
                            //c.ValueType = typeof(string);
                            if (c.Value.ToString() == "O")
                            {
                                c.Value = "Open";
                            }
                        }
                    }
                }
程序进行编译,但在运行时抛出异常,如图所示

感谢您的帮助


我正在使用Dapper查询我的数据库,类中的“Area”和“Status”列定义为char,在数据库中也是如此。因此,当应用程序分布在客户端计算机上时,更改它们的数据类型对我来说不是一个选项。我只想在“frontend”逻辑中处理它。

您试图用“Open”替换“O”的值这是一个字符串。因此,系统会抛出错误。更好的方法是,如果您可以将一个新单元格添加到该行,并将此字符串值分配给该行,将此新单元格标记为可见,并将其绑定到网格,然后将该字符单元格标记为不可见。这样,您既可以将原始字符值随身携带,也可以通过一种方式显示在网格中播放字符串。

这是一个很好的主意!!此datagridview的一个用途是在excel文件中导出,因此在导出时添加一个新单元格,然后排除另一个单元格,这会增加计算量。很抱歉,但我真正想要的是将列类型转换为字符串,或者是比添加单元格和排除单元格更简单的方法导出时。感谢您的建议。您的评论似乎对如何继续有了想法。好吧,如果将列类型转换为字符串是一个选项,那么首先就应该这样做,而这篇文章甚至没有必要。此外,值应该作为“打开”、“关闭”、“正在处理”传递,等等。而不是“O”、“C”、“I”,这样您就不必再次转换。有什么原因以前该列没有定义为字符串吗?是的,先生。有几个原因。首先,导出可能包含数千条记录,我已经有21列用于此DGV。第二个原因也是内存,“O”将比“Open”占用更少的空间威尔。在加载数千条记录时,减少负载是最有利的。当数据负载最小时,您的建议当然是一个好主意,我也尝试了类似的解决方法,但它只是减慢了应用程序的速度。包含
foreach
循环的方法是什么?方法(
GetData()
)包含这段代码用于从数据库中获取数据,然后对其进行过滤等,并从构造函数中调用它。如何保证
dataGridView1
具有数据(例如“O”)在您进入for循环之前?在对该问题进行故障排除时,我确保了它。Datagrid确实有数据。我想这就是为什么异常会说
System.String
无法转换为
System.Char
,因为它无法处理数据。