验证是否已在DataGridView中输入颜色

时间:2014-10-23 14:40:21

标签: c# .net regex string datagridview

我有一个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 = "";
        }
    }
}

4 个答案:

答案 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 = "";
        }