Laden...

Prüfen von Währungswerten in DataGridView Zelle

Erstellt von nieselfriem vor 8 Jahren Letzter Beitrag vor 8 Jahren 998 Views
N
nieselfriem Themenstarter:in
44 Beiträge seit 2004
vor 8 Jahren
Prüfen von Währungswerten in DataGridView Zelle

Hallo!

Ich habe eine Zelle im Datagridview das den Dataentyp Double enthält und die mittels DefaultCellStyle.Format = "c"; als Währung formatiert ist. Nun möchte ich natürlich, dass nur Zahlenin Form von xx,xx eingegebn werden können.

Dazu habe ich folgende Methode versucht zu implementieren:


private void matImpDataGridVW_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {
            if (e.ColumnIndex != 3) return;
;
            tools.Tools t = new tools.Tools();

            if (matImpDataGridVW.Rows[e.RowIndex].Cells[3] != null)
            {
                string i = matImpDataGridVW.Rows[e.RowIndex].Cells[3].Value.ToString();
                i.Replace(",", ".");
                if (t.IsNum(i) == false)
                {
                    MessageBox.Show("Nix da");
                }
            }
        }

Hilfsmethode isNum-Methode:


public bool IsNum(string s)
        {
            double output;
            return double.TryParse(s, out output);
        }

Steht jetzt z.B. 14,95€ drin und ich trage ich 14ft95, ein wird leider kann Warnung ausgeben. Wenn ich den Debugge verwende ist nicht der Wert 14ft95 sondern 14,95 in der Variable i. Wann wird die Validierung ausgelöst? Was muss ich anders machen?

VG niesel

5.658 Beiträge seit 2006
vor 8 Jahren

Hi nieselfriem,

du mußt die DataGridViewCellValidatingEventArgs.FormattedValue-Eigenschaft abfragen. Siehe dazu die Beispiele in How to: Validate Data in the Windows Forms DataGridView Control und DataGridView.CellValidating-Event.

Christian

Weeks of programming can save you hours of planning

N
nieselfriem Themenstarter:in
44 Beiträge seit 2004
vor 8 Jahren

Meintest Du?


this.dataGridView1.CellValidating += new
            DataGridViewCellValidatingEventHandler(dataGridView1_CellValidating);
        this.dataGridView1.CellEndEdit += new
            DataGridViewCellEventHandler(dataGridView1_CellEndEdit);

vg niesel

F
10.010 Beiträge seit 2004
vor 8 Jahren

Was muss ich anders machen?

Wie schon mal gesagt, das frickeln im Grid sein lassen und mit echten Klassen und Databinding arbeiten.

Implementiere dazu in den Klassen INotifyPropertyChanged und IDataErrorInfo.
Wenn du das Validieren im Setter machst kannst du selber entscheiden wie du mit den werten umgehst.