D. Jung
D. Jung

Reputation: 145

DataGrid can't type in comma or dots as value?

I got the following code. If I now try to type in a comma or a dot into my "EK-Preis" column, which is a double, it doesnt work. I just can write numbers or letters. If I type in a letter, the cell gets a red contour, which is perfect. Any ideas?

Here's my code:

        private void dgFolien_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
    {
        DataRowView drv = e.Row.DataContext as DataRowView;
        try
        {
            if (drv != null)
            {
                using (OleDbConnection conn = new OleDbConnection(connection.ConnectionString))
                {
                    conn.Open();
                    OleDbCommand cmd = conn.CreateCommand();
                    cmd.Parameters.Add(new OleDbParameter("@var1", drv["Hersteller"].ToString()));
                    cmd.Parameters.Add(new OleDbParameter("@var2", drv["Serie"].ToString()));
                    cmd.Parameters.Add(new OleDbParameter("@var3", drv["Farbe"].ToString()));
                    cmd.Parameters.Add(new OleDbParameter("@var4", drv["EK-Preis"].ToString()));
                    cmd.Parameters.Add(new OleDbParameter("@var5", drv["FolienID"].ToString()));


                    cmd.CommandText = "UPDATE Folien SET Hersteller=@var1, Serie=@var2, Farbe=@var3, [EK-Preis] = @var4 WHERE FolienID=@var5";
                    cmd.ExecuteNonQuery();
                }
            }
        }
        catch (Exception ex)
        {
            System.Windows.Forms.MessageBox.Show("Error " + ex);
        }
    }

And here my XAML:

       <DataGrid x:Name="dgFolien" AutoGenerateColumns="False" CanUserAddRows="False" HorizontalAlignment="Left" 
              Height="268" Margin="10,138,0,0" VerticalAlignment="Top" Width="489" ColumnWidth="*" RowEditEnding="dgFolien_RowEditEnding">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Hersteller" Binding="{Binding Hersteller, UpdateSourceTrigger=PropertyChanged}" />
            <DataGridTextColumn Header="Serie" Binding="{Binding Serie, UpdateSourceTrigger=PropertyChanged}" />
            <DataGridTextColumn Header="Farbe" Binding="{Binding Farbe, UpdateSourceTrigger=PropertyChanged}" />
            <DataGridTextColumn Header="EK-Preis" Binding="{Binding EK-Preis, UpdateSourceTrigger=PropertyChanged}" />
        </DataGrid.Columns>
    </DataGrid>

Thank you!

Upvotes: 1

Views: 1436

Answers (1)

UpdateSourceTrigger=PropertyChanged forces to process text on every keystroke. Change it to UpdateSourceTrigger to LostFocus . For example if your value is 12.45, the moment '.' is detected it expects 45 to be a property binded to 12.

Upvotes: 4

Related Questions