我的英语不好,因为我是西班牙语,所以如果你不明白的话,我会使用翻译问我。
我的问题是我在主窗口中有一个带有两个窗口的程序我在第二个窗口中有一个数据网格我用文本框传递信息,问题是通过总价格乘以我得到的甜点数量对于甜点的价格,当我通过该价格时数据网格中的总价格,如果价格发生1.20,程序将变为1.
没有给我任何错误,所以我不得不花费整个程序代码抱歉。
这是第二个窗口
private void Window_Loaded(object sender, RoutedEventArgs e)
{
if (Application.Current.Properties["seleccionado"] == null)
{
textBox1.IsEnabled = false;
Postresinfo = new TabladePostre();
}
else
{
Postresinfo = (TabladePostre) (Application.Current.Properties["seleccionado"]);
textBox1.IsEnabled=false;
textBox1.Text = Convert.ToString(Postresinfo.refPostre);
textBox2.Text = Postresinfo.NombrePostre;
textBox3.Text = Convert.ToString(Postresinfo.cantidad);
textBox4.Text = Convert.ToString(Postresinfo.precio);
textBox5.Text = Convert.ToString(Postresinfo.preciototal);
}
LinqdePostresDataContext BasedeDatos;
string filename = "";
private void button1_Click(object sender, RoutedEventArgs e)
{
BasedeDatos(LinqdePostresDataContext)Application.Current.Properties["basedeDatos"];
Postresinfo.NombrePostre = textBox2.Text;
Postresinfo.cantidad = Convert.ToInt32(textBox3.Text);
Postresinfo.precio = Convert.ToDecimal(textBox4.Text);
Postresinfo.preciototal = Convert.ToDecimal(textBox5.Text);
Postresinfo.imagen = filename;
if (Application.Current.Properties["seleccionado"] != null)
{
Postresinfo.refPostre=Convert.ToInt32(textBox1.Text);
}
else
{
BasedeDatos.TabladePostres.InsertOnSubmit(Postresinfo);
}
BasedeDatos.SubmitChanges();
this.Close();
}
decimal precio = 0;
private void button2_Click(object sender, RoutedEventArgs e)
{
precio = Convert.ToDecimal(textBox4.Text);
textBox5.Text = Convert.ToString(precio * Convert.ToDecimal(textBox3.Text));
}
private void button9_Click(object sender, RoutedEventArgs e)
{
// Configure open file dialog box
Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
dlg.FileName = "Document"; // Default file name
dlg.DefaultExt = ".jpg"; // Default file extension
dlg.Filter = "Text documents (.jpg)|*.jpg"; // Filter files by extension
// Show open file dialog box
Nullable<bool> result = dlg.ShowDialog();
// Process open file dialog box results
if (result == true)
{
// Open document
filename = dlg.FileName;
ImageSourceConverter conversor = new ImageSourceConverter();
image1.Source = (ImageSource)conversor.ConvertFromString(filename);
}
}
这是主窗口:
LinqdePostresDataContext BasedeDatos = new LinqdePostresDataContext();
private void activar(object sender, RoutedEventArgs e)
{
Cargartabla();
}
private void Cargartabla()
{
var postre = (from n in BasedeDatos.TabladePostres
select n);
dataGrid1.ItemsSource = postre;
}
private void button1_Click(object sender, RoutedEventArgs e)
{
Application.Current.Properties["seleccionado"] = null;
Ventana2 Ventana2 = new Ventana2();
Ventana2.Show();
}
private void button2_Click(object sender, RoutedEventArgs e)
{
BasedeDatos.TabladePostres.DeleteOnSubmit((TabladePostre)dataGrid1.SelectedItem);
BasedeDatos.SubmitChanges();
Cargartabla();
}
private void Activar2(object sender, EventArgs e)
{
Cargartabla();
}
private void button3_Click(object sender, RoutedEventArgs e)
{
Application.Current.Properties["seleccionado((TabladePostre)dataGrid1.SelectedItem);
Application.Current.Properties["basedeDatos"] = BasedeDatos;
Ventana2 ventana2 = new Ventana2();
ventana2.Show();
}
如果你还需要知道我有一个数据库,其中包含int price,int amount in total price in decimal。
感谢回复,我试过两个选项都给了我但不起作用,这些都是错误:
Postresinfo.refPostre = float.Parse(textBox1.Text)没有错误,程序运行正常,没有任何变化
float.TryParse(textBox1.Text,out Postresinfo.refPostre)有这些错误:
错误1属性,索引器或动态成员访问不能作为out或ref参数传递。
错误2'float.TryParse(string,out float)'的最佳重载方法匹配有一些无效的参数
错误3参数2:无法从'out int'转换为'float out'
我尝试了其他代码而没有任何变化,程序正常运行
现在,我已经尝试了这段代码:Convert.ToDecimal(textBox1.Text);
但它没有任何改变并正常运行。
我也尝试了其他代码,但没有任何变化,程序正常运行
错误不是textbox1,我认为这是因为它位于TextBox5文本框中,我输入十进制价格并将其传递给数据网格并且是圆形的
我也会附上专栏但我不知道:
<DataGridTextColumn Binding="{Binding Path=preciototal}" Header="Precio Total"/>
感谢。
答案 0 :(得分:0)
您的问题是您将“1.20”之类的价格转换为Convert.ToInt32(textBox1.Text);
的整数。
尝试将Postresinfo.refPostre
更改为小数并使用Convert.ToDecimal(textBox1.Text);
,因此可以使用FormatException
这样的内容:
try
{
Convert.ToDecimal(textBox1.Text);
}
catch (Exception)
{
//Deal with Error
}
答案 1 :(得分:0)
我确实看到了这段代码:
Postresinfo.refPostre=Convert.ToInt32(textBox1.Text);
button1_Click
中的如果textBox1.Text
中的值为float,则会导致舍入。
你应该做
Postresinfo.refPostre=float.Parse(textBox1.Text);
或
float.TryParse(textBox1.Text, out Postresinfo.refPostre);
因为它是一个文本框,您可能会得到一个不是数字的值。
如果您决定使用Parse
,那么您应该
try
{
Postresinfo.refPostre=float.Parse(textBox1.Text);
}
catch
{
// Show a message or write to log or simething
}