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

时间:2016-06-24 17:27:49

标签: c# datagridviewcolumn

我有一个IEnumerable List,并且这个列表在运行时提供了datagridview。

i.e. datagridviewBindingSource.DataSource = myList;
     datagridview.DataSource = datagridviewBindingSource;

在此列表中,所有列的类型均为“字符串”,但两列“状态”“区域”,其中包含类型为'char'的值。

  

状态可以有值= {'O','C'}(打开和关闭),区域可以   有值= {'我','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";
                            }
                        }
                    }
                }

程序编译但在运行时抛出异常,如图像所示。enter image description here

感谢任何帮助。

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

1 个答案:

答案 0 :(得分:1)

您正试图取代' O'用"打开"这是一个字符串。因此,系统正在抛出错误。更好的方法是,如果您可以将一个新单元格一起添加到该行并为其指定此字符串值,请将此新单元格标记为可见并将其绑定到网格,然后将该单元格标记为不可见。这样你就可以同时拥有原始的char值以及在网格中显示字符串的方法。