如何检查数据网格行是否为空
本文关键字:网格 是否 数据网 数据 何检查 检查 | 更新日期: 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!=null
和castedRow!=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;}
}
希望这将帮助。问候,