2017-10-21 5 views
0

Die Datenbank, mit der ich meine App für die "Prozent" -Spalte verbinde, verwendet Werte unter 1 (dh 15% werden als 0,15 in der Datenbank gespeichert) Format = ".00%", um die Werte in der DataGrid-Spalte anzuzeigen.Ändern des DataGrid-Zellenwerts während der Überprüfung

Frage ist, wie Benutzer richtig die Werte größer als 1 einfügen lassen - also 50 oder 50% in die Zelle schreiben - und in der Datenbank in 0,5 umwandeln.

Ich war auf der Suche nach DataGridViewCellValidatingEventHandler und hinzugefügt, um das Ereignis levDGV_PercentCellValidating, aber ich weiß nicht, wie die Werte sich ändern ...

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 
} 

wie man die richtig validiert einem eingegebenen Wert zu transformieren (geteilt durch 100)

+0

Nach der Lektüre dieses: https://stackoverflow.com/questions/4742960/datagridview-validation-changing-cell-value Ich denke, ich werde für CellParsing gehen ... – mallorn

Antwort

0

verlassen die Lösung für andere, die Parsen, die für mich zu arbeiten scheint:

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; 
        } 
       } 

      } 
     } 
Verwandte Themen