如何检查数据网格行是否为空

本文关键字:网格 是否 数据网 数据 何检查 检查 | 更新日期: 2023-09-27 18:12:43

我有一个由MySQL表填充的数据网格。这里的问题是我已经添加了一个SelectionChanged事件。

private void RegistrationDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        // if the datagrid has an index value of 0 and above
        if (RegistrationDataGrid.SelectedIndex >= 0)
        {
            // Exception gets thrown here
            DataRowView row = (DataRowView)RegistrationDataGrid.SelectedItems[0];
            // if the column Tag of the selected row in the datagrid is not empty
            if (row["Tag"] != null)
            {
                //put the content of the cell into a textbox called tag
                tag.Text = Convert.ToString(row["Tag"]);
            }
        }
    }

上面的代码旨在捕获选定行的特定列中单元格的值。

如果选择最后一行,即始终存在的那一行,问题就出现了。下面那个空的,里面什么也没有。

抛出无效强制转换异常:"无法强制转换类型的对象。"MS.Internal。NamedObject' to type 'System.Data.DataRowView '

我的假设是,这与所选行为空的事实有关。我只需要找到一种方法让事件在选中这一行时忽略它。有线索吗?

如何检查数据网格行是否为空

如果不确定显式强制转换是否会成功执行,则避免显式强制转换。我会用这个:

var row = RegistrationDataGrid.SelectedItems[0];
DataRowView castedRow = RegistrationDataGrid.SelectedItems[0] as DataRowView;
if (castedRow != null && castedRow ["Tag"] != null) <------ DONT skip on checking castedRow for null, jumping directly to indexed access.
{
     //put the content of the cell into a textbox called tag
     tag.Text = Convert.ToString(castedRow["Tag"]);
}

在使用该单元格之前,应该使用String.IsNullOrEmpty()函数来验证该单元格的内容。此外,在此之前添加另一个验证以确保row!=nullcastedRow!=null

关于你的"空最后一行"的描述-这可能是一个"添加新行"模板:检查DataGridView.AllowUserToAddRows属性(设置为false,如果你不使用它,最后一个"空行"将消失)。

带有异常处理的最终代码可能如下所示:
private void RegistrationDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    DataRowView _drv;
    try 
    {
        _drv = RegistrationDataGrid.SelectedItems[0] as DataRowView;
        if (_drv != null && _drv ["Tag"] != null && !String.IsNullOrEmpty(Convert.ToString(_drv ["Tag"]) ) 
        {
            tag.Text = Convert.ToString(_drv["Tag"]);
        }
        else{tag.Text=String.Empty;}
    }
    catch{tag.Text=String.Empty;}
    finally{_drv=null;}

}

希望这将帮助。问候,