Announcement

Collapse
No announcement yet.

DataGridView DefaultCellStyle Format löst DataError aus

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DataGridView DefaultCellStyle Format löst DataError aus

    Ich habe ich einem DataGridView eine Zelle, in der über die DefaultCellStyle.Format-Eigenschaft eingestellt ist, dass die darin befindliche Zahl mit %-Zeichen dahinter angezeigt wird.
    Ändert man aber nun die Prozentzahl OHNE dabei das %-Zeichen herauszulöschen/zu überschreiben, dann wird das DataError-Ereignis des DataGridView ausgelöst. Der Zellenwert kann dann nämlich nicht in Integer gewandelt werden.
    Mit welchem Ereignis kann ich dieser Exception entgegen wirken?
    Oder wie kann ich im DataError-Ereignis den Wert noch ändern? Sowohl über dgv.Rows(e.RowIndex) als auch über bindingSource1.Current bekomme ich in dem Ereignis nur den vorherigen Wert, nicht den neuen. die Fehlermeldung kann ich mit e.ThrowException = False unterdrücken. aber der Wert wird nicht übernommen, was zu Problemen führt.
    Würde mich über Tipps freuen!

  • #2
    DataGriView1.CellParsing scheint das richtige Event zu sein! Beim Eintragen des DefaultCellStyle-Formats steht fälschlich, dass man das Parsing-Event der BindingSource abfangen soll (welches es nicht gibt).
    Wenn ich darin
    Code:
    dgv.CurrentCell.Value = e.Value.ToString.Replace("%", "")
    ParsingApplied=True
    setze, dann habe ich im DataError zwar den neuen Wert, aber das DataError-Event sollte ja gar nicht auslösen!
    Zuletzt editiert von CLL; 08.08.2012, 08:12.

    Comment


    • #3
      Ich weiß jetzt nicht auf welche Stelle du dich bezieht wo etwas falsch steht aber es ist vermutlich Binding.Parse gemeint.

      Du solltest eher e.Value korrigieren anstatt den Inhalt der Zelle. Bei dem was du machst hätten eh deine Programmiererreflexe anspringen sollen In einem Event der auf das ändern des Zellenwerts reagiert den Zellenwert ändern kann nicht gut sein. Das ist übrigens immer die Regel das man wenn man in einem Control Event noch was am Control ändert möglichst nur über die EventArgs. Direkt am Control hat immer das Potential sich eine Endlosschleife zu basteln. Da sollte man schon genau überlegen was man da macht.

      Originally posted by msdn zum CellParsing Event
      Wenn Sie den Wert selbst konvertieren, ersetzen Sie den ursprünglichen, formatierten Wert der ConvertEventArgs.Value-Eigenschaft durch den konvertierten Wert im von der ValueType-Eigenschaft der Zelle angegebenen Typ. Legen Sie die DataGridViewCellParsingEventArgs.ParsingApplied-Eigenschaft auf true fest, um anzugeben, dass keine weitere Analyse erforderlich ist.

      Comment


      • #4
        das Binding.Parse scheint dann wohl das Richtige zu sein. Aber ich habe mein DataGridView, das seine Daten aus einer BindingSource bekommt.

        Code:
        Private WithEvents bs As New BindingSource
        Me.dgv.DataSource = bs
        bs.DataSource = ds.Tables(0)
        Wie soll ich das Event da abfangen? bs.Parse gibt es nicht.

        Ich habe ersatzweise dgv.CellParsing genommen, aber dann wird nach Korrektur von e.Value weiterhin bs.DataError ausgelöst

        Comment


        • #5
          Wie soll ich das Event da abfangen? bs.Parse gibt es nicht.
          Gar nicht BindingSource ist wie du am Namen erkennen solltest was anderes als Binding. CellParsing ist die richtige Stelle wenn ändern von e.Value nicht funktioniert und doch was anderes an die BindingSource gemeldet wird läuft bei dir drumherum noch was schief. Was das ist kann ich auf die Distanz nicht erraten.

          Comment


          • #6
            ok, also hätte das Verwenden von dgv.CellParsing funktionieren sollen. Dann lag ich ja doch nicht so falsch.
            Was da drumherum noch passiert ist schwer zu durchblicken. Das Programm ist nicht von mir und schon älter.
            Als Workarount habe ich im DataError bei der Spalte e.ThrowException = False gesetzt. Der Focus bleibt dann auf der Zelle und EndEdit wird nicht ausgelöst, aber beim nächsten Anklicken einer anderen Spalte funktioniert es dann. Vllt verstehe ich die Ursache ja irgendwann noch. Da das Programm riesengroß ist und vieles mit Events verbunden ist, macht es keinen Sinn hier Code für euch zu posten.
            Trotzdem danke für die Versuche mir zu helfen!

            Comment


            • #7
              lol, ich hab den Fehler gefunden. Ich hab den Wert im CellParsing nicht in den gewünschten Datentyp gewandelt. Ich hatte es zu Int gewandelt, er hätte aber Int16 gewollt. Danach hat auch kein DataError mehr ausgelöst. Die Lösung kann so einfach sein...

              Comment

              Working...
              X