【问题标题】:converting datagridview column valuetype to string from char in C#在C#中将datagridview列值类型从char转换为字符串
【发布时间】:2016-06-24 17:27:49
【问题描述】:

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

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

在此列表中,所有列都是“字符串”类型,但有两列 “状态”“区域” 包含 “字符”类型的值.

Status 可以有值 = { 'O' , 'C'} (Open and Close) , Area 可以 有值 = {'I','F','R'} (In-Process, Final, Receive}

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

打开而不是 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 来查询我的数据库,并且在类中的“区域”和“状态”列被定义为 char,就像在数据库中一样。因此,当应用程序分布在客户端机器上时更改它们的数据类型对我来说不是一个选择。我只想在“前端”逻辑中处理它。

【问题讨论】:

  • foreach循环包含在哪个方法中?
  • 包含这段代码的方法(GetData())用于从数据库中获取数据,然后对其进行过滤等,并从构造函数中调用。
  • 在进入for循环之前,如何保证dataGridView1有数据(例如“O”)?
  • 在解决此问题时,我确定了这一点。 Datagrid 确实有数据。我想这就是为什么异常说System.String 无法转换为System.Char,因为它无法处理数据。

标签: c# datagridviewcolumn


【解决方案1】:

您正在尝试将“O”的值替换为字符串“Open”。因此,系统正在抛出错误。更好的方法是,如果您可以将一个新单元格完全添加到该行并将此字符串值分配给它,将此新单元格标记为可见并将其绑定到您的网格,然后将字符单元格标记为不可见。这样一来,您将拥有原始 char 值以及在网格中显示字符串的方法。

【讨论】:

  • 这是个好主意!!此 datagridview 的用途之一是导出到 excel 文件中,因此添加一个新单元格,然后在导出时排除另一个单元格。
  • 抱歉,但我真正想要的是将列类型转换为字符串,或者在导出时添加单元格并排除单元格这样不那么乏味的东西。谢谢你的建议。
  • 您的评论似乎让您知道如何继续。好吧,如果将列类型转换为字符串是一种选择,那应该首先完成,甚至不需要这篇文章。此外,这些值应该以“open”、“close”、“in-process”等形式传递,而不是“O”、“C”、“I”,因此您不必再次转换。之前没有将列定义为字符串的任何原因?
  • 是的,先生。有几个。首先,导出可能包含数千条记录,我已经有 21 列用于此 DGV。第二个原因也是内存,“O”将比“Open”占用更少的空间。在加载数千条记录时,减少负载是最有利的。当数据负载最小时,您的建议肯定是一个好主意,我也尝试过类似的解决方法,但它只会减慢应用程序的速度。
猜你喜欢
  • 2013-05-13
  • 2013-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-27
  • 2012-01-16
相关资源
最近更新 更多