所以我有一个在DataGridViewCellFormattingEvent上调用的方法来检查我的datagridview的第一列。如果发现某行的第一列中的值设置为H或F,则会以某种方式为该行中的所有单元格着色,但也会将该行设置为ReadOnly,Selected = false和font大胆的。这是我的解决方法,包括额外的页眉和页脚......除了这个问题外,它的效果很好。
如果我将datagridview AllowUserToAddRow属性设置为true(我们最终需要这样做),此方法在尝试获取单元格值时会抛出无效的引用异常。该值返回null,如果该值为null,我尝试了各种方法来传递该方法,但无论我做什么,它都会不断抛出错误。如果有人可以提供一些建议,我将不胜感激。这是我的方法(请注意,我可以让它工作的唯一方法是将AllowUserToAddRows设置为false ...我通常不会在此方法中使用它,但将其包含在内以供参考):
private void dgv_CellFormatting(object sender, DataGridViewCellFormattingEventArgs args)
{
var dgv = (DataGridView)sender;
dgv.AllowUserToAddRows = false;
if (!dgv.Rows[args.RowIndex].Cells[0].Value.Equals(null))
{
string cellValue = dgv.Rows[args.RowIndex].Cells[0].Value.ToString();
bool regF = Regex.Match(cellValue, "F.*").Success;
bool regH = Regex.Match(cellValue, "H.*").Success;
if (regH == true)
args.CellStyle.BackColor = System.Drawing.Color.LightBlue;
if (regF == true)
args.CellStyle.BackColor = System.Drawing.Color.LightGray;
if (regH == true || regF == true)
{
args.CellStyle.Font = new System.Drawing.Font(args.CellStyle.Font, FontStyle.Bold);
dgv.Rows[args.RowIndex].Cells[args.ColumnIndex].Selected = false;
dgv.Rows[args.RowIndex].ReadOnly = true;
}
}
}
这是破线:
if (!dgv.Rows[args.RowIndex].Cells[0].Value.Equals(null))
我尝试使用IsNullOrEmpty,执行直接... == null,所有结果都相同
答案 0 :(得分:0)
很抱歉,如果我浪费了任何人的时间,但我找到了解决方案。我没有直接将null与我的引用值进行比较,而是首先将值设置为DataGridViewCell对象,然后我能够将其值正确地与null进行比较。以下是我所做的更新:
DataGridViewCell c = dgv.Rows[args.RowIndex].Cells[0];
if (c.Value != null)