在验证过程中更改DataGrid单元值

问题描述:

我连接我的应用程序的“百分比”列使用的值小于1(即15%在数据库中存储为0.15),所以我使用Format =“.00%”以显示DataGrid列中的值。在验证过程中更改DataGrid单元值

问题是如何正确让用户插入大于1的值 - 即在单元格中写入50或50% - 并将其转换为数据库中的0,5。

我一直在寻找DataGridViewCellValidatingEventHandler并添加事件levDGV_PercentCellValidating,但我不知道如何改变这些值...

private void levDGV_PercentCellValidating(object sender, DataGridViewCellValidatingEventArgs e) 
{ 

    string dataPropertyName = levDGV.Columns[e.ColumnIndex].DataPropertyName; // deliveryProcent 
    // Abort validation if cell is not in the "deliveryProcent" column. 
    if (!dataPropertyName.Equals("deliveryProcent")) return; 
    levDGV.Rows[e.RowIndex].ErrorText = ""; 

    string testValue = e.FormattedValue.ToString(); 
    char lastChar = testValue[testValue.Length - 1]; 
    if (lastChar == (char)37) 
    { 
     //TODO: Remove % character from entered string 
    } 
    //TODO: divide the value by 100 and set as currentCell value 
} 

如何输入的值转换到正确验证一个(除以100 )?

+0

看完这个:https://stackoverflow.com/questions/4742960/datagridview-validation-changing-cell-value我想我会去参加CellParsing ... – mallorn

离开他人的解决方案,解析这似乎为我工作:

private void levDGV_CellParsing(object sender, DataGridViewCellParsingEventArgs e) 
     { 
      string dataPropertyName = levDGV.Columns[e.ColumnIndex].DataPropertyName; 
      if (dataPropertyName.Equals("deliveryProcent")) 
      { 
       if (e.Value != null) 
       { 
        try 
        { 
         string testValueStr = e.Value.ToString(); 
         char lastChar = testValueStr[testValueStr.Length - 1]; 
         if (lastChar == (char)37) 
         { 
          //Remove % character from entered string 
          testValueStr = testValueStr.Substring(0, testValueStr.Length - 1); 
         } 
         //divide the value by 100 and set as currentCell value 
         double testValue = (Convert.ToDouble(testValueStr))/100; 
         e.Value = testValue; 
         e.ParsingApplied = true; 
        } 
        catch (FormatException) 
        { 
         // Set to false in case another CellParsing handler 
         // wants to try to parse this DataGridViewCellParsingEventArgs instance. 
         e.ParsingApplied = false; 
        } 
       } 

      } 
     }