我有一个datagridview,其中一列是一个颜色列。我想确保用户输入有效的颜色,否则将单元格留空。
当单元格从空白开始时,以下代码给出了空引用异常。 Fyi,我在CellLeave活动中这样做。
回答我不得不将代码移到CellFormatting事件中。由于某种原因,单元格的值在某个未知点之前不会更新。对于我的检查,我需要在我在CellFormatting事件中做的事情之前做。在那里移动代码解决了我的问题。
private void dataGridView1_CellFormatting(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex.Equals(2))
{
Regex test = new Regex("[0-255],[0-255],[0-255]");
Match m = test.Match(this.dataGridView1.CurrentCell.Value.ToString());
if(!m.Success)
{
this.dataGridView1.CurrentCell.Value = "";
}
}
}
答案 0 :(得分:0)
试试这场比赛:
Match m = test.Match((this.dataGridView1.CurrentCell.Value ?? "").ToString());
匹配时,这将用空字符串替换空值。
答案 1 :(得分:0)
在尝试匹配正则表达式之前,您是否需要检查单元格中是否有值?
if (e.ColumnIndex.Equals(2))
{
if(this.dataGridView1.CurrentCell.Value != null)
{
...
答案 2 :(得分:0)
要验证字符串,您可以使用此方法:
private static bool IsValidColorString(string input)
{
if (String.IsNullOrEmpty(input))
return false;
string[] parts = input.Split(',');
if (parts.Length != 3)
return false;
foreach (string part in parts)
{
int val;
if (!int.TryParse(part, out val) || val < 0 || val > 255)
return false;
}
return true;
}
使用它的最佳位置我相信是DataGridView.CellParsing
事件处理程序:
private void dataGridView1_CellParsing(object sender, DataGridViewCellParsingEventArgs e)
{
if (e.Value == null || e.ColumnIndex != 2) // Skip empty cells and columns except #2
return;
string input = e.Value.ToString();
if (!IsValidColorString(input))
e.Value = String.Empty; // An updated cells's value is set back to the `e.Value`
}
更新后的单元格值将重新设置为e.Value
而不是DataGridView.CurrentCell.Value
。
答案 3 :(得分:-1)
CurrentCell.Value.ToString()
导致错误..
CurrentCell.value=null
null值不能使用tostring()方法进行转换,这就是为什么你得到了空引用异常。
试试这个..
string val="";
if(dataGridView1.CurrentCell.Value==null)
{
val=""
}
els
else
{
val=convert.tostring(dataGridView1.CurrentCell.value);
}
Match m = test.Match(val);
if(!m.Success)
{
this.dataGridView1.CurrentCell.Value = "";
}