C# 如何为允许DBNull的组合框创建列表?

C# 如何为允许DBNull的组合框创建列表?,c#,combobox,dbnull,C#,Combobox,Dbnull,如何为允许DBNull的组合框创建列表 我尝试了int?但是int?与DBNull不同,并且组合框不能使用null值 我的datagridview组合框,需要DBNull 我做到了: var machineComboList = this.eMDataSet1.Machines.Select(row => new { Key = (int?) row.MachineID, Value = row.Des

如何为允许DBNull的组合框创建列表

我尝试了int?但是int?DBNull不同,并且组合框不能使用null值

我的datagridview组合框,需要DBNull

我做到了:

var machineComboList = this.eMDataSet1.Machines.Select(row => new
            {
                Key = (int?) row.MachineID,
                Value = row.Description
            }).ToList();

int? nullValue = DBNull.Value;
machineComboList.Add(new { Key = nullValue, Value = "All" });
我想在“Key”中输入一个DBNull值。使用int?不起作用


相关:

DBNull
仅用于ADO.NET,用于区分缺少的值和空值

int?
可以是
null
——这可能就是您要查找的内容。它不能是
DBNull
,因为它们是不兼容的类型

很少在ADO.NET调用之外直接使用
DBNull
。从数据库中读取时,通常会将其转换为以下形式:

object dbValue = ...;
int? intValue = dbValue != DBNull.Value ? (int)dbValue : (int?)null;
或者,如果您更信任返回的数据类型,可以将其缩短为:

object dbValue = ...;
int? intValue = dbValue as int?;

DBNull
仅用于ADO.NET,用于区分缺少的值和空值

int?
可以是
null
——这可能就是您要查找的内容。它不能是
DBNull
,因为它们是不兼容的类型

很少在ADO.NET调用之外直接使用
DBNull
。从数据库中读取时,通常会将其转换为以下形式:

object dbValue = ...;
int? intValue = dbValue != DBNull.Value ? (int)dbValue : (int?)null;
或者,如果您更信任返回的数据类型,可以将其缩短为:

object dbValue = ...;
int? intValue = dbValue as int?;

DBNull
仅用于ADO.NET,用于区分缺少的值和空值

int?
可以是
null
——这可能就是您要查找的内容。它不能是
DBNull
,因为它们是不兼容的类型

很少在ADO.NET调用之外直接使用
DBNull
。从数据库中读取时,通常会将其转换为以下形式:

object dbValue = ...;
int? intValue = dbValue != DBNull.Value ? (int)dbValue : (int?)null;
或者,如果您更信任返回的数据类型,可以将其缩短为:

object dbValue = ...;
int? intValue = dbValue as int?;

DBNull
仅用于ADO.NET,用于区分缺少的值和空值

int?
可以是
null
——这可能就是您要查找的内容。它不能是
DBNull
,因为它们是不兼容的类型

很少在ADO.NET调用之外直接使用
DBNull
。从数据库中读取时,通常会将其转换为以下形式:

object dbValue = ...;
int? intValue = dbValue != DBNull.Value ? (int)dbValue : (int?)null;
或者,如果您更信任返回的数据类型,可以将其缩短为:

object dbValue = ...;
int? intValue = dbValue as int?;

DBNull.Value
不是整数的类型,它本身也不是
null
本身。相反,它是一个表示空值的私有类

你可以在地图上清楚地看到这一点。它是一个公共密封类,具有一个私有构造函数和一个单例(静态只读)值


通常,当您有一个
int?
或任何空值时,ADO.NET希望传入一个实际值。这就是为什么您总是看到将
null
映射到
DBNull.Value
的代码:

using (var conn = ...)
using (var cmd = ...)
{
    cmd.Parameters.AddWithValue("@MachineId", machineId == null ? DBNull.Value : machinId);

    // ...
}

现在,另一方面,您希望如何在用户界面中表示
null
,这取决于您自己。尽管如此,用
DBNull.Value
表示它并没有真正的意义,因为这会将应用程序与ADO.NET紧密地联系在一起。如果明天您更改为非sql的其他数据存储,会发生什么情况?

DBNull。Value
不是一种整数,它本身也不是
null
。相反,它是一个表示空值的私有类

你可以在地图上清楚地看到这一点。它是一个公共密封类,具有一个私有构造函数和一个单例(静态只读)值


通常,当您有一个
int?
或任何空值时,ADO.NET希望传入一个实际值。这就是为什么您总是看到将
null
映射到
DBNull.Value
的代码:

using (var conn = ...)
using (var cmd = ...)
{
    cmd.Parameters.AddWithValue("@MachineId", machineId == null ? DBNull.Value : machinId);

    // ...
}

现在,另一方面,您希望如何在用户界面中表示
null
,这取决于您自己。尽管如此,用
DBNull.Value
表示它并没有真正的意义,因为这会将应用程序与ADO.NET紧密地联系在一起。如果明天您更改为非sql的其他数据存储,会发生什么情况?

DBNull。Value
不是一种整数,它本身也不是
null
。相反,它是一个表示空值的私有类

你可以在地图上清楚地看到这一点。它是一个公共密封类,具有一个私有构造函数和一个单例(静态只读)值


通常,当您有一个
int?
或任何空值时,ADO.NET希望传入一个实际值。这就是为什么您总是看到将
null
映射到
DBNull.Value
的代码:

using (var conn = ...)
using (var cmd = ...)
{
    cmd.Parameters.AddWithValue("@MachineId", machineId == null ? DBNull.Value : machinId);

    // ...
}

现在,另一方面,您希望如何在用户界面中表示
null
,这取决于您自己。尽管如此,用
DBNull.Value
表示它并没有真正的意义,因为这会将应用程序与ADO.NET紧密地联系在一起。如果明天您更改为非sql的其他数据存储,会发生什么情况?

DBNull。Value
不是一种整数,它本身也不是
null
。相反,它是一个表示空值的私有类

你可以在地图上清楚地看到这一点。它是一个公共密封类,具有一个私有构造函数和一个单例(静态只读)值


通常,当您有一个
int?
或任何空值时,ADO.NET希望传入一个实际值。这就是为什么您总是看到将
null
映射到
DBNull.Value
的代码:

using (var conn = ...)
using (var cmd = ...)
{
    cmd.Parameters.AddWithValue("@MachineId", machineId == null ? DBNull.Value : machinId);

    // ...
}
现在,另一方面,您希望如何在用户界面中表示
null
,这取决于您自己。我想,用
DBNull.Value
表示它是没有意义的,因为