【发布时间】:2017-08-14 17:23:04
【问题描述】:
我得到了以下代码。如果我现在尝试在我的“EK-Preis”列中输入一个逗号或一个点,这是一个双精度,它不起作用。我只会写数字或字母。如果我输入一个字母,单元格会得到一个红色轮廓,这是完美的。有什么想法吗?
这是我的代码:
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);
}
}
这里是我的 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>
谢谢!
【问题讨论】:
-
不确定实际问题,但在
drv["Hersteller"].ToString()这些行中,您将获取您的drv 的属性并全部执行.ToString()。以这种方式创建的数据库命令通常从给定对象中推断出它们的类型;我相当确定这些字段都不能被视为数字。它们都以字符串形式给出。 -
我用 cmd.Parameters.Add(new OleDbParameter("@var4", Convert.ToDouble(drv["EK-Preis"])));不工作。我的应用程序不允许我在单元格中输入逗号或点。
-
当然,我不知道数据库是什么样的。可能所有这些东西都是你数据库中的字符串。但如果不是,那么,从我所见,您将它们全部作为字符串传递。我不太熟悉 wpf 做这些事情的方式,但是如果其中一些是双精度的,我认为您需要以某种方式定义所有列的类型。