c# wpf framework 3.5 -> lauffähig für windows server 2003 , 36BIt
-
guten tag,
ich habe die aufgabe, daten aus einer INFORMIX Datenbank rauszuholen, und in WPF darzustellen. Normaler weise ( so habe ich es gelernt ) benutzt man das Datagrid.
nun, da ich das Framework auf 3.5 herrunter stellen musste, gibt es dieses nicht mehr, sondern nurnoch ein GRID...
Kann ich dort überhaupt Observable Collection anwenden?
Oder muss man diese Liste benutzen, ich habe da ein kuddel muddel drin..ich habe jetzt hier soweit schon vieles programmiert: hier die ausschnitte:
nach Programm start bringt er mir diese Exception der Database klasse.. Fehlermeldung:
Fehler:
ERROR [42000][Informix .NET Provider][Informix] A syntax error has occurred.hier noch mei Xamml vom Grid:
<UserControl x:Class="UmsatzZahlen.UserControlls.UnterControlls.SelectionsControll" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" d:DesignHeight="570" d:DesignWidth="1400"> <Grid Height="570" Width="1400"> <Button Content="Tag" Height="44" HorizontalAlignment="Left" Margin="42,51,0,0" Name="btnTag" VerticalAlignment="Top" Width="106" Click="btnTag_Click" /> <Button Content="Monat" Height="44" HorizontalAlignment="Left" Margin="185,51,0,0" Name="btnMonat" VerticalAlignment="Top" Width="98" Click="btnMonat_Click" /> <Button Content="Jahr" Height="44" HorizontalAlignment="Left" Margin="322,51,0,0" Name="btnJahr" VerticalAlignment="Top" Width="94" Click="btnJahr_Click" /> <ComboBox Height="23" HorizontalAlignment="Left" Margin="117,109,0,0" Name="comboTag" VerticalAlignment="Top" Width="55" SelectionChanged="comboTag_SelectionChanged" /> <ComboBox Height="23" HorizontalAlignment="Left" Margin="117,138,0,0" Name="comboMonat" VerticalAlignment="Top" Width="93" SelectionChanged="comboMonat_SelectionChanged" /> <ComboBox Height="23" HorizontalAlignment="Left" Margin="117,167,0,0" Name="comboJahr" VerticalAlignment="Top" Width="120" SelectionChanged="comboJahr_SelectionChanged" /> <Button Content="Auswertung Starten" Height="23" HorizontalAlignment="Left" Margin="42,251,0,0" Name="btnStart" VerticalAlignment="Top" Width="841" Click="btnStart_Click" /> <Label Content="Tag :" Height="28" HorizontalAlignment="Left" Margin="42,104,0,0" Name="lblTag" VerticalAlignment="Top" /> <Label Content="Monat:" Height="28" HorizontalAlignment="Left" Margin="42,133,0,0" Name="lblMonat" VerticalAlignment="Top" /> <Label Content="Jahr :" Height="28" HorizontalAlignment="Left" Margin="42,162,0,0" Name="lblJahr" VerticalAlignment="Top" /> <Grid DataContext="{Binding}"> <ListView Name="UmsatzGrid2" ItemsSource="{Binding GesamtUmsatz}" Margin="0,280,0,0"> <!--> <IsSynchronizedWithCurrentItem="true">--> <ListView.View> <GridView > <GridViewColumn Header="Datum" Width="170" DisplayMemberBinding="{Binding Path=TagesDatum}"/> <GridViewColumn Header="Umsatz" Width="170" DisplayMemberBinding="{Binding Path=Umsatz}"/> <GridViewColumn Header="Gutschriften" Width="170" DisplayMemberBinding="{Binding Path=Gutschrift}"/> <GridViewColumn Header="Gesamtumsatz" Width="180" DisplayMemberBinding="{Binding Path=Gesamtumsatz}"/> </GridView> </ListView.View> </ListView> </Grid> </Grid> </UserControl>
hier meine DAtabase klasse.
public ObservableCollection<GesamtUmsatz> CreateGesamtUmsatzList2(int tag, int monat, string jahr, int button) { _button = button; // am anfang hier wird _button gesetzt, 1=tages 2=monats 3=jahres - Auswertung string EndDatum; string NextDatum; //buchungen.buchungs_zeit string TagDatum; //für alle Auswertungen Database-Variable history.tag string TagEndDatum; // für Monats untere Einschränkung EndDatum = CreateDateString(tag, monat, jahr); NextDatum = CreateEndDateString(tag, monat, jahr);//nur für Tagesauswertung erforderlich TagDatum = CreateTagString(tag, monat, jahr); TagEndDatum = CreateTagEndString(tag, monat, jahr); IfxConnection ifx = new IfxConnection(_cs); MessageBox.Show("Verbinde zum Server...\nBitte warten!"); // List<GesamtUmsatz> liste = new List<GesamtUmsatz>(); ObservableCollection<GesamtUmsatz> g = new ObservableCollection<GesamtUmsatz>(); try { ifx.Open(); MessageBox.Show("Console ist geöffnet...", "Information", MessageBoxButton.OK, MessageBoxImage.Information); string sql; IfxCommand cmd = null; sql = "select tag, sum(betrag) *(-1) as Umsatz_ohne_Gutschrift,"+ "("+ "select sum(betrag) * 2"+ "from buchungen"+ "where verwendungszweck like '%utschrift%'"+ "AND DATE(buchungs_zeit) = DATE(history.tag)"+ ")"+ "FROM history"+ "where ereignistyp_id = 102"+ "AND tag >= '"+TagDatum+"'" + "AND tag < '"+TagEndDatum+"'" + "group by tag"+ "order by tag"; cmd = new IfxCommand(sql, ifx); MessageBox.Show("kommando verpackt"); //<-- hier diese msgbox kommt noch, dannach exception! using (IfxDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { g.Add(new GesamtUmsatz(reader.GetDateTime(0), reader.GetDecimal(1), reader.GetDecimal(2), null)); MessageBox.Show("lese..."); //MessageBox.Show(reader.GetString(0) + reader.GetDecimal(1) + reader.GetDecimal(2) + reader.GetDecimal(3)); } } ifx.Close(); MessageBox.Show("...Console ist geschlossen", "Information", MessageBoxButton.OK, MessageBoxImage.Information); } catch (SqlException se) { MessageBox.Show("Sql-Fehler!\n" + se.Message, "SQL-Fehler", MessageBoxButton.OK, MessageBoxImage.Error); } catch (ArgumentException ae) { MessageBox.Show("Fehler:\n" + ae.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); } catch (IfxException ie) { MessageBox.Show("Fehler:\n" + ie.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); } catch (Exception e) { MessageBox.Show("Fehler:\n" + e.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); } finally { MessageBox.Show("Etwas stimmt nicht!\nBitte Programm neu Starten", "Finally-Fehler", MessageBoxButton.OK, MessageBoxImage.Error); } return g; }
dessweiteren hier meine Umsatz - Klasse:
namespace UmsatzZahlen.Klassen { public class GesamtUmsatz { public DateTime TagesDatum { get; set; } public decimal? Umsatz { get; set; } public decimal? Gutschrift { get; set; } public decimal? Gesamtumsatz { get; set; } public GesamtUmsatz(DateTime tagesdatum, decimal? umsatz, decimal? gutschrift, decimal? gesamtumsatz) { TagesDatum = tagesdatum; Umsatz = umsatz; Gutschrift = gutschrift; Gesamtumsatz = umsatz-gutschrift; } public override string ToString() { return string.Format("{0} {1} {2} {3}", TagesDatum, Umsatz, Gutschrift, Gesamtumsatz); } } }
aus der Abfrage kommt ein Informix Datentyp
Datetime (mm/dd/yyyy),money,money ($4.00)
und hier mein Aufruf:public void btnStart_Click(object sender, RoutedEventArgs e) { Database _db = new Database(); // List<UmsatzZahlen.Klassen.GesamtUmsatz> liste = new List<UmsatzZahlen.Klassen.GesamtUmsatz>(); ObservableCollection<GesamtUmsatz> g = new ObservableCollection<GesamtUmsatz>(); _glist = _db.CreateGesamtUmsatzList2(uitag, uimonat, uijahr, uibutton); //UmsatzTagWindow dlg = new UmsatzTagWindow(_glist); //dlg.Show(); UmsatzGrid2.ItemsSource = _glist; // dlg.ShowDialog(); }
kann mir jemand bitte bei diesem Problem helfen? wäre super nett. danke
-
Schau dir deinen übelst zusammengebastelten SQL-String doch mal im Debugger an.
-
Ich behaupte das Sql-Statement ist falsch. Steht aber auch in der Fehlermeldung.
Desweiteren würde ich Parameter verwenden anstatt stumpf das Sql-Statement zusammenzustückeln.