将数据类型的位数据类型映射到SQL Server 2008中从数据库到数据集的枚举类型

我有一个表有一个列Xyz,它在SQL Server 2008中有位数据类型.

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

在gridview中,对于列Xyz,会显示带/不带勾号的check_box但我想将其显示为买/卖作为文本而不是复选框.

最佳答案 您可以通过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";
        }
    }
}

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

点赞