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
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
Meintest Du?
this.dataGridView1.CellValidating += new
DataGridViewCellValidatingEventHandler(dataGridView1_CellValidating);
this.dataGridView1.CellEndEdit += new
DataGridViewCellEventHandler(dataGridView1_CellEndEdit);
vg niesel
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.