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