Hallo mech,
ein Problem mit async void besteht darin dass Exceptions in den "inneren Threads" nicht gefangen werden, da auf das Ergebnis nicht gewartet wird. Du kommst bei Kunden dann schnell in das Problem das sie Dir sagen "die Anwendung arbeitet nicht weiter" Du kannst Ihnen aber nicht helfen weil sie Dir keine Fehlermeldung o.ä. geben können. Das ist nicht der "feine Weg" sondern der in die Hölle weil Frust auf beiden Seiten entsteht.
Best Practices in Asynchronous Programming, Avoid Async Void ganz oben.
Hi,
BTW
... gibt es einen Grund warum die Methode async void ist? Oder meinst Du das mit "nächsten Problem" das Exceptions in der Methode nicht gefangen werden?
Kann ich mit NotifyPropertyChanged auch überwachen, wenn einer Liste von Objekten ein neues Objekt hinzugefügt wird? Bisher löst PropertyChanged nur aus, wenn ich eine Klassenvariable setzte Dafür benötigst Du INotifyCollectionChanged. Also die Kindercollections in eine ObservableCollection<T> wrappen.
Hallo,
Naja,
es ist doch nicht schwer. Mach ein abstraktes Basis-Modellobjekt welches INotifyPropertyChanged implementiert und lass Deine Modellobjektedavon erben. Und dann in den Modellobjekt-Properties:
private String datasourceName;
public String DatasourceName
{
get { return datasourceName; }
set { SetProperty(ref datasourceName, value); }
}
Hallo,
nimm doch eine der Erweiterungsmethoden Where, First, FirstOrDefault, Single, SingleOrDefault. Und denk daran den Linq-namespace einzubinden.
... oder verschiebe die älteren Versionen doch in einen Ordner wo alles erlaubt ist.
Hallo,
ich würde versuchen das mit Gruppen abbilden Auch wenn das dem Datenmodell nicht entspricht läßt sich dieses vllt einfacher im Report darstellen.
* jede einzelne Rechnungsposition bildet eine Gruppe, die nachfolgenden Freitexte unter dieser Gruppe sind die Detailsätze dieser Gruppe.
* Rechnungsposition denen kein Freitext folgt bekommen einen Leertext als Detailsatz.
* die Rechnungspositionen werden als Gruppenkpöpfe, Freitexte als Details dargestellt
* leere Freitexte werden unsiochtbar gemacht
* Irgendein Adapter oder Viewmodel wandelt das Datenmodelin das Reportviermodel um.
... außerdem kann man das mit einer CancellationTokenSource implementieren. Jobs, die Status "cancelled" haben gelten als completed und werden damit nicht mehr berechnet.
Hallo,
sollen eigentlich die Historiendaten auch in der App dargestellt werden (das man einen früheren Zeitpunkt angibt und die App die damalige Situation darstellt) oder wird das nur wegkopiert für späteres Auswerten mit anderen Tools?
Die Enum-Sache muß vom EF auf das SQL abbildbar sein. Beispiel:
* Du hast Rechnungen
* Rechnungen haben Zustände
public class Rechnung
{
public RechnungsStatus Status { get; set; }
}
public enum RechnungsStatus { Neu, Offen, Storniert, Ausgeglichen }
Du willst dem Bearbeiter anbieten dass er Rechnungen nach Status filtern kann, er kann gewünschte mit Checkboxen auswählen. In diesem Fall könnte man Punkt 1 verwenden. Ob das bei Dir klappt - ich weiß nicht was Du genau machen willst.
Expression<Func<Apfelkorb, bool>> m = p => p.Äpfelliste.Any(q => q.Hersteller.Id == 7777);
m = m.Or(p => p.Äpfelliste.Count > 1);
IQueryable<T> query = context.Apfelkorb.Where(m);
(Code ist nur sinngemäß.)
Im mitgeloggten SQL taucht dort eine WHERE ( <hersteller-expression>) OR (<Anzahl-expression>) - Klausel auf.
Edit: Ich habe damals diesen PredicateBuilder verwendet weil er mit dem EF umgehen kann, also nimm diesen im Link.
Ja, aber den PredicateBuilder braucht er doch eigentlich nicht, den hat ihm ja Th69 "aufgedrängelt". Das wollte ich anmerken.
Hallo,
ich glaube dass Ihr den OP mißverstanden habt (mal abgesehen davon dass er sich Repositories usw. wirklich ansehen soll). Er fragt m.E. doch eigentlich nur wie man Linq-Ausdrücke verketten kann und das ist doch einfach möglich, da diese Ausdrücke erst ausgewertet werden wenn ein Konsument diese verwendet.
var qry = context.Umsätze;
if (<Bedingung 1>) qry = qry.Where(p => p.<Filter 1>);
if (<Bedingung 2>) qry = qry.Where(p => p.<Filter 3>);
if (<Bedingung 3>) qry = qry.Where(p => p.<Filter 3>);
...
Und für eine einfache Desktopanwendung reicht m.E. das EF in 80% aller Fälle aus, wenn man die aktuelle Version verwendet. Er sollte es nur gleich richtig machen und sich um eine vernünftige Architektur kümmern.
... und noch was anderes: Du mußt nicht jedesmal in einer Schleife immer dasselbe Insert-Statement erzeugen. Es reicht wenn vorher einmal das Statement erstellt wird, dann Prepare(). In der Schleife werden nur noch die Parameter gesetzt und das Statement abgeschickt. So muß das Stmt nur einmal aufbereitet werden.
=> Nicht nur Parameter einsetzen sondern auch richtig verwenden.
Hallo,
eine wichtige Frage wird erst einmal sein ob Dir der SQL-Server sagen kann wie lange die Anfrage dauert. Anzeige restlicher Abfragezeit eines Select Command
Hallo,
wenn Du das Property "Datum" nennst und im XAML auf "Date" verweist muß DU Dich natürlich nicht wunden... Vllt solltest Du Dich auf eine Sprache festlegen.
Du könntest mal schauen ob der UniversalSerializer schneller ist.
Hallo,
arbeite ein Tutorial durch oder verwende ein Framework wie gong-wpf-dragdrop
Hallo,
wozu dient eigentlich der int im Dictionary.TValue?
Hallo, beschäftige Dich mal mit new und override-keywords
Hallo,
ich würde das mit einer eigenen, für Falschanmeldung spezifischen Exception lösen (vllt von AuthenticationException ableiten). Der Logindialog filtert diese für seinen eigenen Hinweistext raus und läßt die anderen für die "globale Messagebox" -wie auch immer das gelöst ist- durch.
Probier es doch aus, ich habe mit dem Teil noch nicht gearbeitet. Wenn das Control seinen Content selber zeichnet (z.B. mit einer Render-Dll vom MSIE) könntest Du natürlich Pech haben.
Hallo,
System.Windows.Forms.WebBrowser() ist WinForms und wird mit GDI gezeichnet. Wenn dieser in einer WPF-Anwendung verwendet werden soll muß dieser in einem WindowsFormsHost gehostet werden da WPF ein eigenes, zu GDI nicht kompatibles "Malsystem" besitzt. WPF kann zwar solche Dinge wie LayoutTransform durchführen, GDI kann damit jedoch nicht angesprochen werden. Dein Anliegen funktioniert m.E. nicht mit diesem WebBrowser, Du bräuchtest ein WebBrowser-Control das direkt mit dem WPF-"Malsystem" arbeitet.
=> Hast Du vllt System.Windows.Controls.WebBrowser mit System.Windows.Forms.WebBrowser verwechselt?
Du könntest mal das "Enable the Visual Studio hosting process" abschalten und prüfen was dann passiert.
Hallo,
Du könntest das ItemsPanel setzen
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
... und dann ein VirtualizingWrapPanel verwenden damit nur die sichtbaren Bilder gezecihnet/berechnet werden.
...Erst durch sein Accessibility-Plugin versucht er der Barrierefreiheit gerecht zu werden. Und ein solches Plugin wäre für WPF ebenfalls einfach möglich wenn dieses durch (genormte) AttachedProperties dem Reader Hinweise über die Lesereihenfolge gibt.
Hallo,
ich finde diese Lösung gar nicht so schlecht. Zumindest dürfte eine modaler Dialog nicht die Adresszeile sperren.
Hallo,
Du kannst genauso vorhandene Tabellen in Dein Code-First-Ansatz einbinden. Mußt halt bei Database.SetInitializer nicht die DropCreateDatabaseIfModelChanges-Strategie verwenden. Es gibt für VS ein Addon EF Reverse POCO Generator, vllt hilft das.
dann StartApplication() asynchron aufrufen oder die einzelnen Methoden im Bootstrapper? Hallo,
das kann man aus der Ferne nicht beurteilen, wir sehen ja nicht wie weit diese Methoden auf dieselben Daten zugreifen. Wenn beispielsweise LoadBootstrapper() und LoadActiveConfiguration() komplett getrennt sind könnte man sie mit await Task.WhenAll parallel ausführen. Eine andere Möglichkeit wäre die Initialisierung komplett asynchron durchzuführen und sofort das Hauptfenster zu zeigen. Da es aber sein kann das der Benutzer sofort eine Aktion startet aber Deine App noch nicht initialisiert ist müsstest Du dann das entweder mit einer Sperrprimitive blocken oder die Ressourcen ebenfalls als Task erwarten. Was besser ist bzw. den Aufwand rechtfertigt kann man aus der Ferne nicht beurteilen.
Hallo,
arbeite mit TabControls oder erstelle UserControls
Und was ist wenn in Spalte 2
HALLO 88.88 HALLO
steht? Ist 88.88 schon Spalte 3? Die Werte müssen eindeutig zuordbar sein.
Wenn Du mit ReportDesigner RDLC-Reports des SSRS meinst, solltest Du eine Tabelle in den Bericht packen und dieser Dein Dataset zuweisen. Dann kannst Du in den Spalten der Tabelle Deine Properties binden.
Du solltest vllt erst einmal eine Tutorial oder so durcharbeiten, dann ist auch der Frust mit RDLC geringer.
Mal blöd gefragt, kannst Du das nicht als normale CSV-Datei interpretieren mit Leerzeichen als Trenner und die leeren Einträge rauswerfen?
Und wie soll er dann Spalte 2 und 5 korrekt zuordnen können?
Hallo,
na gar keine. Eine Aggregatfunktion gibt keine einzelnen Werte aus. Das ssagt doch schon der Name. Vllt solltest Du Dich mit Gruppierungen oder Subreports befassen.
Hallo,
ich denke nicht dass das mit einem Datagrid geht. Möglicherweise ist ein anderes Control besser geeignet, vllt ListView.
Hallo bammes,
höre bitte auf herbivore und implementiere erst einmal IDisposable des Webclients.
Hallo,
nein, das ist ungünstig in der Datei zu schreiben. Nimm zwei Streams, einem zum Lesen und einen zum Schreiben in eine temporäre Datei und kopiere die Daten von den einem in den anderen und passe die Leerstrings dabei an. Abschließend kopierst Du die Datei um. Das sind aber eigentlich Grundlagen ...
Hallo,
mal eine Gegenfrage: wie kannst Du in Deiner Anwendung ein neues Fenster öffnen? Also einem ViewModel sagen "führe auf deinem zugrundeliegenden View ein Show() aus". Kannst Du diesen Mechanismus nicht dafür verwenden? WPF-Frameworks haben dafür die nötigen Mittel. Verwendest Du eines?
Hallo,
wie sollen wir Dir helfen wenn wir den Beicht nicht kennen? Ist die zweite Seite leer?
Hallo,
warum nimmst Du nicht ein CollectionContainer wie Listbox oder ItemsControl bindest dort Deine Aufzählung und überschreibst dann das ItemTemplate mit Deinem Stackpanel? Das lässt sich komplett im XAML lösen.
Hallo,
das sollte in der Registry vermerkt sein welche Apps geeignet sind, Dateien eines bestimmten Typs zu öffnen (was also im Browser-Kontextmenü unter Öffnen mit... steht). Du solltest vllt diese Einträge auslesen und dann anbieten.
...aber bei SVN kannst Du doch auch einen Branch machen und die Änderungen wenn sie OK sind mit Reintegrate übernehmen?
Nö, ich würde das auch mit einem Composite lösen. Ich meine nur dass Du das in der Db mit einem Self Join lösen musst. Das Modellobjekt Produkt muß eine Referenz auf Produkt-Objekte haben damit Du das Composite in der DB persistieren kannst. Das geht auch mit Code First
public class Produkt
{
...
public virtual Produkt Parent { get; set; }
public virtual Collection<Produkt> Children { get; set; }
}
aber eine kleine lokale Maßnahme, wie es diese Option war, wäre mir halt lieber Dann benutze doch ein kleines, lokales Repository.
Hallo,
und wenn Du ein Softwarerepository einsetzt? Revert?
Testweise soll das Programm erstmal an ca. 8 Leute gehen - im Endeffekt evtl. an ca. 800 Na dann ist doch Click Once besser geeignet als eine Setup.exe. Lies Dich da mal ein.
Hallo,
in einer relationalen Datenbank werden Referenzen über Fremdschlüssel abgebildet. Also sollte die Stückliste ein extra Entity sein worauf die Produkte verweisen (also Fremdschlüssel zur Stückliste im Produkt). Wenn sich die Stückliste für ein Produkt ändert muß eben diese Stückliste in eine neue kopiert werden.
Vllt geht es mit Vererbung?* Produkt hat eine Selbstreferenz auf sich selbst
Wenn Du Vererbung einsetzen willst mußt Du das unbedingt die EF-Performance vorher testen.
Hallo,
die letzte Zeile wird wahrscheinlich nicht geschrieben da der Cursor da noch drin ist. Probiere ein BindingSource.EndEdit.