【问题标题】:Bit datatype to enum type mapping from database to dataset in SQL Server 2008SQL Server 2008 中从数据库到数据集的位数据类型到枚举类型的映射
【发布时间】:2012-10-20 21:47:32
【问题描述】:

我有一个表,其中有一个列 Xyz,它在 SQL Server 2008 中具有 bit 数据类型。

我通过数据适配器从表中获取值,并将其存储在 DataSet 中,DataGridView 将显示来自 DataSet 的内容

在网格视图中,对于列Xyz,会显示一个带/不带刻度的复选框,但我想将其显示为作为文本而不是复选框的买入/卖出。

【问题讨论】:

    标签: database sql-server-2008 datagridview dataset


    【解决方案1】:

    您可以通过 2 种方式中的一种来处理它。

    1) 不要将数据返回为位,而是在查询中进行强制转换,使其根据值将 Buy/Sell 作为字符串返回。只有当您的网格是只读的时,这才会真正有效。如果您需要能够添加/编辑数据,那么将您的买入/卖出转换回位并强制用户只能输入买入/卖出会变得混乱。如果您需要添加/编辑数据,您可能希望使用方法 2。

    例如假设您的列名称为 BuySell,类型为 bit

    SELECT CASE WHEN BuySell = CAST(0 AS BIT) THEN 'Buy' ELSE 'Sell' AS BuySell FROM TableName
    

    2) 您必须关闭 DataGridView 上的“Autogeneratecolumns”并手动设置列。如果您的网格是只读的,我会为您的买入/卖出列添加一个文本列,该列映射到您的位值。然后在网格的 Cell_Formatting 事件中,根据位更新值。类似于以下内容:

    private void dgv_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
    {
        if (dgv.Columns[e.ColumnIndex].Name == "buysell")
        {
            if (e.Value != null)
            {
                if (e.Value.ToString() == "1")
                {
                    e.Value = "Sell";
                }
                else
                {
                    e.Value = "Buy";
                }
            }
            else
            {
                e.Value = "Buy";
            }
        }
    }
    

    如果您的网格需要可编辑,请设置一个表示您的买入/卖出值的数据表,其中包含显示成员和值成员。将其绑定为组合框列的数据源。现在加载数据将在组合框中正确显示买入/卖出,对于新行,当您从下拉列表中选择一个值时,它将使用正确的位值填充您的基础数据源。

    【讨论】:

    • 你能给出第一种方式的示例查询吗..?
    • 使用示例查询更新答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 2014-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多