首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查DataGridViewComboBox是否为空

检查DataGridViewComboBox是否为空
EN

Stack Overflow用户
提问于 2015-12-02 20:01:53
回答 1查看 1.5K关注 0票数 1

我有一个带有combobox列的datagridview,该列绑定到枚举,如下所示:

代码语言:javascript
复制
     var D = (DataGridViewComboBoxColumn)dgvInputs.Columns[2];
     D.ValueType = typeof(MyType);
     D.ValueMember = "Value";
     D.DisplayMember = "Display";
     D.DataSource = new MyType[] {
        MyType.Rev,
        MyType.Model,
        MyType.User,
        MyType.Status
     }.Select(x => new { Display = x.ToString(), Value = (int)x }).ToList();

然后将数据视图绑定到名为DataTable的ParameterTable:

代码语言:javascript
复制
     BindingSource ParamSource = new BindingSource();
     ParamSource.DataSource = DataEntry.ParameterTable;
     dgvInputs.AutoGenerateColumns = false;
     dgvInputs.DataSource = ParamSource;
     dgvInputs.Columns[0].DataPropertyName = "Name";
     dgvInputs.Columns[1].DataPropertyName = "Prompt";
     dgvInputs.Columns[2].DataPropertyName = "Type";
     dgvInputs.Columns[3].DataPropertyName = "Width";
     dgvInputs.Columns[4].DataPropertyName = "Default Value";

当用户完成对表的编辑时,我需要对其进行验证。特别是,我需要测试Type是否已在每一行中定义,并且默认值是否与Type兼容。

问题是,我找到的检查Type是否已设置的每个测试都失败了。当我稍后尝试将值转换为MyType作为测试默认值的一部分时,我会得到一个错误。当我在调试器中的空类型单元格上检查.Value属性时,它会显示值"{}“。

目前,在datagridview本身的验证事件中,我有用于测试的代码。我尝试过其他各种版本,但也失败了:

代码语言:javascript
复制
     foreach (DataGridViewRow Row in dgvInputs.Rows) {
        if (!Row.IsNewRow) {
           // test other columns ...

           DataGridViewComboBoxCell Cell = (DataGridViewComboBoxCell)(Row.Cells[2]);
           if (Cell == null || Cell.Value as string == string.Empty) { 
               // Error ...
           }
           MyType PType = (MyType)(Cell.Value);

如何测试没有设置DataGridViewComboBox单元格,以及这个值"{}“是什么?

我使用VS 2008和.Net 3.5 SP1.这不是我的选择。这正是我能得到的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-02 20:51:55

这个代码有几个问题。

首先,D.ValueType = typeof(MyType);是不正确的,因为据我所见,您正在绑定到int字段。只要删除这一行,ValueType就会从数据源中推断出来。

现在主要的问题是。绑定到数据表时,未输入的值由DBNull.Value表示。我建议你检查一下nullDBNull.Value。输入时,在您的情况下,值类型将是int,但您可以安全地将其解压缩为MyType

代码应该是这样的

代码语言:javascript
复制
//...
var value = Row.Cells[2].Value;
if (value == null || value == DBNull.Value)
{ 
    // Error ...
}
else
{
    var type = (MyType)value;
    // Check if type contains a valid value ...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34051955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档