【问题标题】:(SQL) Efficient way of replacing of NULL values in DataGridView?(SQL) 在 DataGridView 中替换 NULL 值的有效方法?
【发布时间】:2017-01-05 01:00:36
【问题描述】:

我在SQL Server 上有一个这样的数据库表:

USER   PASSWORD
1      samplepassword
2      NULL
3      NULL
4      sample_password

我想在DataGridView 中向用户显示时将 PASSWORD 列中的 NULL 值以及其他列替换为“(未设置)”或“-”之类的值。

我知道实现这一目标的三种方法。首先是使用列的DefaultCellStyleNullValue 属性。这种方法的问题是设计者会创建相同 DefaultCellStyle 的多个副本 - 每列一个。

然后是DataGridViewCellFormatting 事件。最后,替换可以在 SQL 语句本身上完成,ala ISNULL(password, '(Not set)')

考虑到此 DataGridView 可以由用户事后过滤(例如,只显示那些没有密码的人),这样做更有建议的方法是什么?

谢谢!

【问题讨论】:

标签: c# sql vb.net winforms


【解决方案1】:

格式化不是SQL server 的责任,请在您的 UI 代码中保持格式化。

使用DefaultCellStyle并在代码中创建DefaultCellStyle的实例,并手动为datagridview的所有列设置相同的实例。

或仅将 NullValue 属性分配给已存在的样式

const string NULL_VALUE = "not set";
DataGridView.Columns["ColumnName1"].DefaultCellStyle.NullValue = NULL_VALUE;
DataGridView.Columns["ColumnName2"].DefaultCellStyle.NullValue = NULL_VALUE;

【讨论】:

    【解决方案2】:

    在 SQL Server 上不是 100% 确定,但在 MySQL 上我会执行以下操作

    SELECT USER, IF(PASSWORD IS NULL,'Not Set', PASSWORD) AS PASSWORD FROM TABLE
    

    【讨论】:

      【解决方案3】:
      SELECT ISNULL(YourColumn, 'yourcharacter' ) FROM YourTableName
      

      【讨论】:

        【解决方案4】:

        在加载 DataGridView 后运行 JavaScript 或 jQuery 函数,以从 DataGridView 中查找空值并将其替换为“(未设置)”或“-”。

        使用值“-”更新您的空数据集值。

        【讨论】:

        • 我也会把它放在前端。不过,究竟如何更改这些值取决于在那里使用的框架。如果 AngularJs 或类似框架可以在加载数据网格之前在控制器中完成,那可能会更容易
        【解决方案5】:

        从范式的角度来看,所选答案是最好的答案,尽管您也可以通过创建一个辅助函数来处理空值来处理这个问题。这将使您的默认值可以根据您的数据类型进行更改。它还允许您在接触 UI 之前管理空值,但不会影响您的查询,如果您必须在显示输出之前处理数学问题,这是必不可少的。

        public static dynamic NullCheck(object d, dynamic default)
        {      
              return DbNull.Value == d ? default : d;
        }
        

        只需准备好在代码中根据需要转换结果,例如((foo)(Nullcheck(foo, bar)))

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-06-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多