Laden...

Forenbeiträge von TomLeech Ingesamt 146 Beiträge

24.10.2012 - 07:12 Uhr

Hat hier niemand eine Idee woran das liegen könnte?

Irgendwelche Anregungen bezüglich Fehlersuche, die ich eventuell übersehen habe?

Ich bin über jede Art von Hilfe dankbar.

22.10.2012 - 07:51 Uhr

Guten Morgen Community!

Ich stehe vor einem eigentlich sehr einfachen Problem, das ich eigentlich schon öfters gelöst habe, nur diesmal funktioniert es einfach nicht und ich kann keinen Fehler entdecken:

Ich versuche die Hintergrundfarbe einer Zelle in einem DataGrid mittels Converter zu ändern.

Hier mal der Converter:


[ValueConversion(typeof(decimal), typeof(Brush))]
    public class AmpelToBackground : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            decimal inc = (decimal)value;
            if (inc < 20)
                return Brushes.Green;
            else if (inc > 20 && inc <= 25)
                return Brushes.Orange;
            else if (inc > 25 && inc <= 30)
                return Brushes.Red;
            else
                return Brushes.Firebrick;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

Und hier XAML:


<local:FilterDataGridTextColumn Binding="{Binding Ampel_Technikeraufwand, StringFormat=F2}" Header="Ampel_Technikeraufwand">
                                            <local:FilterDataGridTextColumn.ElementStyle>
                                                <Style TargetType="{x:Type TextBlock}">
                                                  <Setter Property="Background" Value="{Binding Ampel_Technikeraufwand, Converter={StaticResource AmpelToBackground}}" />
                                                </Style>
                                            </local:FilterDataGridTextColumn.ElementStyle>
                                        </local:FilterDataGridTextColumn>

Breakpoint im Converter zeigt mir, daß alles funktioniert.
Auch das Ändern der Farbe funktioniert, wenn ich z.B. einfach Value ="Red" schreibe.

Nur die Kombination geht nicht, aber ich kann keinen Fehler finden.

Mit der Bitte um Anregungen, Thomas.

02.09.2011 - 08:02 Uhr

Hallo!

Kuck dir auch mal Xamarin an. Zu finden unter Xamarin

Würde zumindest die Mobile Seite abdecken. Problem: du kommst damit nicht am Apple / Android Marktplatz vorbei, was mich echt stört.

08.07.2011 - 09:47 Uhr

Hallo!

Stelle hierfür


AutoGenerateColumns="False"

ein. Dann kriegst du nurnoch die Spalten, die du per Hand angegeben hast.

30.06.2011 - 07:10 Uhr

Hallo gfoidl!

Das von mir beschriebene Szenario ist ein Beispiel.

Wichtig ist vielleicht nocht die Information, dass die Schranken / Tore usw. nicht in einer linearen Abhängigkeit zueinander verbaut sind (Ortsbezogen).

Eine Schanke wird geöffnet durch:

a) Userinterface: Jemand läutet an und will von A nach B. Diesen Button soll es für den Dummy User fertig geben (Visualisierung wird nicht von mir sein, und wird in einem äußerst dummen System gemacht, da ist alles FIX).

b) Durch Zutrittskontrollkarten - Die Rechte kommen auch hier von extern und ich habe ein paar vorkonfigurierte binäre Eingänge, der mir sagt von wo nach wo was aufgehen soll.

c) Handübersteuerung durch Schalter

d) Brandalarm - Alles geht auf

Demnach ist die maximale Anzahl an möglichen "Wegen" durch die externe Visualisierung begrenzt. Wobei ich da noch nichts über die Schnittstelle weiss.

Tore und Schanken schliessen sich automatisch wieder, wie in einer Tiefgarage.

Wird ein Schranke geöffnet sollen dann automatisch weitere Schranken in fester Abhängigkeit geöffnet werden (natürlich konfigurierbar)?

Genau das. Wobei die feste Abhängigkeit manchmal noch einige Parameter bekommt. Standort des Autos usw.

Ich würde jetzt gerne jeden hardwaremäßig verfügbaren Weg abbilden, die sind ja logischerweise begrenzt. Das ganze mit je einer Prozess - ID versehen. Diese dokumentieren und dann dem externen Visu Menschen einfach geben und sagen: schick mir die ID und ich mach das dann schon. Als Rückgabewert, was gerade passiert könnte man auch direkt diese ID nehmen, und als Warteschleifenanzeige kann ich dem Kollegen einfach ein int[] schicken(das wird der ja hoffentlich doch können) und das Thema wäre gegessen.

Schnell Implementierter angenehmer Nebeneffekt:

Ich kann dann auch sagen, dass ein Tor für den nächsten Prozess gleich offen bleiben soll, ich kann die automatische Schliessfunktion überschreiben. Das spart dann einen Haufen Zeit, im Moment warten die Leute dort einige Minuten im worst case.

Zustandmaschine finde ich glaub ich nicht so toll. Das sind mir etwas zu viele Zustände, die da möglich wären.

29.06.2011 - 10:32 Uhr

Hallo!

@winSharp93

Der Gedankenanstoß gefällt mir recht gut. Nur würd ich statt XML eher nen SQL Server nehmen, da ich sowie einen zur Datenaufzeichnung haben werde.

Wenn ich es nun schaffe, dort ein Datenabbild zu hinterlegen, dass mir sagt, was wann sein darf und ich mir nur den aktuellen Prozess und eine List<Anfragen> speichere, brauch ich ja nichtmal ne Queue, weil meine SPS ja sowieso schon zyklisch ist.

Dann könnte ich alle Anfragen auf Gleichzeitigkeit relativ einfach mit ein paar LINQ Statements erschlagen.

Ich stelle mir das etwa so vor:



public static ObservableCollection<Abfragen> _Aktuelle_Abfragen;

//Events und so weiter
//Neue Einträge kommen über INotifyCollectionChanged oder vergleichbares - Kommt auf Endgültige Softwarelösung an

for(ever)
{
   Abfrage aktuell = Get_aktuelle_Abfrage();
   var x = from c in db.Abfragens
               where darf_das_andere_auch_sein?()
               select c;
   Ausführung(x.ToIrgendwas());
}

@DFDotNET
Ja, ich kenne die 61131-3, aber ich mag ST trotzdem nicht besonders. Das erinnert mich immer an meine Schulzeit und an den inkompeneten Lehrer, den wir dort hatten.
Zum Thema .NET SPS: Link zu deren Homepage

29.06.2011 - 07:22 Uhr

Hallo Community!

Ich würde gerne eine Problematik mit euch diskutieren, bei der mir im Moment so ziemlich jeglicher Ansatz fehlt.

Ich muss in etwa 2 bis 3 Wochen damit beginnen, eine Steuerung für eine etwas komplexere Schrankenanlage zu prgrammieren. Dabei gibt es insgesamt 8 Türen / Tore / Schranken, die in gewissen Abhängigkeiten voneinander geöffnet werden.

Soweit, sogut. Das ist ja auch kein Thema. Sind ja nur ein paar Bits die gesetzt werden müssen. Nun zur Komplexität des Ganzen: Während Prozess eins im Ablauf ist und jemand von Tor 1, bis Tor 5 fährt soll die Steuerung gleichzeitig ein fahren von Tor 8 nach Tor 6 in die selbe, aber auch in die andere Richtung zulassen.

Aussderdem können sich die Tore dabei überschneiden. Das aber wiederum nur in Teilbereichen, weil manchmal die Strasse nur einspurig ist.

Nun zu meinem Problem: Gegeben ist natürlich eine SPS.
Wie bringe ich dieser nun über einen relativ generischen Weg bei, welche Prozesse wann ausgeführt werden können und was gleichzeitig passieren kann.

Ich will das ehrlich gesagt nicht HART ausprogrammieren. Diese if,elseif,else Verkettung würde ja kein Ende nehmen, und debuggen kann das dann sowieso keiner mehr.

Möglichkeit A:

Man baue sich für jeden auftretenden Prozess eine Methode, die das ganze steuert und schreibe dann eine Selektormethode, die bestimmt wer dran kommt. --> Sehr sehr viel Schreibarbeit, aber immernoch besser als gar keine Kapselung.

Möglichkeit B:

Man baue sich für jeden auftretenden Prozess eine Methode und schmeisst das dann in die SyncQueue von Herbivore. Problem: Diese kann keine 2 Prozesse gleichzeitig verarbeiten --> Fällt nach meinem verständnis weg.

Möglichkeit C:

Ich baue das ganze nicht anhand der "Arbeit" der Prozesse auf, sondern ich speichere mir nur, was nicht gleichzeitig sein darf und lasse dann eine Supermethode entscheiden was passiert. Dies wäre wahrscheinlich die wenigste Arbeit, aber wenn sich das nach einem Jahr jemand ansieht, um die Funktionalität zu erweitern blickt wahrscheinlich keiner durch.

Weiteres Problem: Wenn ich meinen Chef nicht davon überzeugen kann für eine .NET SPS etwas Geld auszugeben, ja sowas gibts, dann darf ich das ganze in Structured Text machen.

Dann wirds SEHR SEHR viel if,elseif, else werden 🙁

Ich hoffe mal ihr könnt mir ein paar gute Ansätze geben, die mir noch nicht eingefallen sind.

22.06.2011 - 11:16 Uhr

Hallo!

Da du was von Filter und dynamisch geschrieben hast gehe ich mal von C# aus:


DataGrid.Columns[i].Width = MeineSpaltenbreite;

06.06.2011 - 12:58 Uhr

Hallo!

Ich muss dir zu dieser Fragestellung einfach folgenden Artikel posten:

Simplifying the WPF TreeView by Using the ViewModel Pattern

Dieser Artikel hat mir extrem geholfen das Element zu verstehen. Es gibt da auch einen Baum, der nicht Lazyload verwendet.

20.05.2011 - 08:03 Uhr

Hallo!

Was mir so im schnellen drüberschauen auffällt:

SELECT * FROM new;

Der ";" innerhalb des strings muss weg!

Weitere Anmerkung:

Benutze das Entity Framework, wenn du schon dabei bist dir das alles neu anzueignen.

19.05.2011 - 09:55 Uhr

Hallo!

Im Prinzip würde es ja reichen, wenn du dir nur die Funktion ausgeben lässt, welche ausgeführt werden darf. Um diese dann einmalig zu erhalten musst du:

DISTINCT(Funktion) machen.

Das war eigentlich schon wieder alles.

Es würde auch gehen, dir das Ergbnis nach den gewünschten Kriterien Gruppieren zu lassen, falls du mehrere Datensätze auf einmal brauchst. Der SQL Befehl dazu lautet groupby.

12.05.2011 - 11:43 Uhr

Hallo!

Als ich vor einiger meinen ersten Baum mit wpf Darstellen wollte hat mir folgender Artikel sehr weitergeholfen:

http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx

Ich kann dir nur empfehlen, das mal zu lesen und zu verstehen.

06.05.2011 - 11:02 Uhr

Das Element, welches du suchst heisst: GridSplitter

Tipp: Mach dir eine eigene Spalte, in die du nur den Splitter packst.

04.05.2011 - 13:25 Uhr

Okay, funktioniert tatsächlich mit ToList().

Aber warum? Liegt es daran, dass er IEnumberable erst beim ersten Zugriff auflöst?

Wenn ja: Daran hätte ich auch selber denken können.

04.05.2011 - 12:44 Uhr

Hallo!

Folgende Problematik verstehe ich einfach nicht, und kann auch niemanden finden, der mir sagt, was da los ist:

Durch


var matches = this.FindMatches(11, dh);

Rufe ich folgende Funktion auf:


private IEnumerable<Ding_Hierarchisch> FindMatches(int Number, Ding_Hierarchisch ding)
        {
            if (Number == ding.Kategorie)
                yield return ding;

            foreach (Ding_Hierarchisch child in ding.Children)
                foreach (Ding_Hierarchisch match in this.FindMatches(Number, child))
                    yield return match;
        }

Nun würde man erwarten, wenn man einen Breakpoint beim Aufruf der Methode setzt und dann F11 drückt, dass sich der Cursor zur angegebenen Methode bewegen würde, er tut allerdings so, als ob ich da garnichts aufrufen würde und meint meine var matches sei null.

HILFE!!!! Das verstehe ich einfach nicht. Wieso hüpft der da einfach nicht rein?

PS: Die zu übergebenden Parameter sind korrekt und enthalten auch die von mir gewünschten Daten.

27.04.2011 - 12:07 Uhr

Danke talla!

Das hat mir mal echt weitergeholfen! Hab das jetzt in Controls.Usercontrols umbenannt und siehe da, es läuft. Allerdings ist dann fraglich, warum VS-Studio da nicht direkt schreit, wenn jemand sowas macht, oder ich nirgends was finden kann, was mich auf diesen Umstand hingewiesen hätte.

Auch in den beiden WPF - Büchern, die ich habe steht nichts darüber.

27.04.2011 - 11:48 Uhr

Kann keinen entdecken, der irgendwie verdächtig wirken würde.

Auch kann ich deine Vermutung bezüglich dem Namen nicht nachvollziehen. Solange ich keinen vergebe funktioniert das ganze ja einwandfrei.

Habe soeben mal probiert


x:Uid="identifier1"

anzugeben, nur um den namespace "x" zu testen --> Funktioniert einwandfrei.

Ich häng mal meine Namespaces mit rein:


<UserControl x:Class="Controls.Controls.WartungsGrid"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:a="clr-namespace:Controls.Controls"
    xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
    xmlns:Commands="clr-namespace:Catel.MVVM.Commands;assembly=Catel.Windows"


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.IO;
using Controls.View_Models;
using Controls.DD;

namespace Controls.Controls

Die Verzweiflung in die mich dieser Fehler treibt nimmt unaufhörlich zu. Auch google gibt mir keine sinnvollen Ansätze.

27.04.2011 - 08:33 Uhr

Hallo Community!

Bei einem UserControl habe ich genanntes Problem:


<a:FilteringDataGrid Grid.Row="1" ItemsSource="{Binding Source={StaticResource CV_Vorgang}}"  SelectedItem="{Binding SelectedItem}" AllowDrop="True" x:Name="IrgendeinName">

Fehlermeldung:

Fehlermeldung:
Der Typ- oder Namespacename "Controls" ist im Namespace "Controls.Controls" nicht vorhanden. (Fehlt ein Assemblyverweis?)

Controls heisst mein Projekt und der Namespace.

Ich habe das dann weiter in Controls.Controls -> Usercontrols und Controls.Viewmodels -> Da sind die Viewmodels dazu drin, unterteilt.

Mir ist absolut nicht klar, was da falsch sein kann. Wenn ich dem Control keinen Namen verpasse funktioniert alles wunderbar. Allerdings würde ich dem FilteringDataGrid gerne einen DropHelper(Klasse von mir) geben, was allerdings im CodeBehind stattfinden müsste.

PS: Nur Name statt x:Name geht auch nicht.
Das Problem kann des weiteren nicht am FilteringDataGrid liegen, da dass in anderen Projekten einwandfrei funktioniert.

Ausserdem sollte ich vielleicht dazusagen, dass dies meine erste WPF Anwendung ist, in der ich versuche mich an MVVM zu halten.

Erbitte Denkanstöße.

27.04.2011 - 07:46 Uhr

Der Ansatz ist absolut falsch! So macht man das in WPF nicht, machte man aber auch in WinForms schon nicht mehr.

1tens: Wie talla sagte, arbeite mit den Daten, nicht mit der UI.

2tens: Erstelle dir ein Bool in deiner Datenklasse, dass dir sagt, ob die beiden Werte gleich sind.

3tens: Binde deinen RowBackground via Converter an dieses Bool und setze damit deine Farbe.

Oder du machst es via ValidationExceptions.

Aber: Gewöhne dir schnell ab, auf diese Weise mit WPF arbeiten zu wollen, damit wirst du dir bald denken: Wie umständlich das doch ist, obwohls ja viel einfacher ginge.

Ein tolles Beispiel, warum man so nicht arbeitet bietet das TreeView Control. Spätestens dort stößt du an eine beinharte Grenze.

20.04.2011 - 13:36 Uhr

Wenns Anwenderspezifisch ist, dann lagerste das einfach in eine eiegene Tabelle mit dem Userkey aus, war damals allerdings nicht der Fall.

@ Christoph: Ja, ähnlich deinem Vorschlag schon, eben wegen der willkürlichen Sortierung brauchst du ja einen eigenen Schlüssel, der dir diese speichert.

Aber auf eines musst du aufpassen: Das kann schnell grosse Ausmaße annehmen, also je nach Budget vielleicht eine einfache Variante einbauen.

20.04.2011 - 11:24 Uhr

Ich hatte vor ein paar Jahren eine ähnliche Anforderung für Strukturierte Daten ( TreeView ).

Dabei war die Anforderung, die Daten so zu sortieren, wie es dem Benutzer grad einfällt, also ist berechnen keine Alternative. Eigentlich war es zum Projektstart ausgemacht, dass die Sortierung nach der Erstellung funktionieren soll, was sich als "zu fehleranfällig" für den Nutzer erwiesen hat.

Da war auch die Überlegung, das so zu machen, wie du es vorgeschlagen hast. Haben wir Aufgrund des Aufwands relativ schnell wieder verworfen.

Es wurden dann Sortierungskürzel für die jeweilige Ebene eingeführt, die sich via +/- Buttons veränderten. Dadurch war sichergestellt, dass man nicht die gesamte Ebene neu durchgehen muss, sondern immer nur den Sortierungsindex mit dem gerade getauschten Element tauschen muss.

19.04.2011 - 12:25 Uhr

Die Stichwörter nach denen du suchst heissen:

Optimistic Locking
Pessimistic Locking

Einfach danach googeln und tonnenweise Artikel lesen.

Hier im Forum gabs vor ein paar mal eine sehr aufschlussreiche Diskussion darüber, den ich aber gerade nicht finde.

19.04.2011 - 10:46 Uhr

Demnach schreibst du die Änderungen direkt in deine auf der Mainpage gebundene Collection.

Und was ist eigentlich eine im Child Window "global" erstellte Variable?

Ist sie nun global oder ist sie im child Window lokal definiert. Die Aussage passt für mich nicht zusammen.

19.04.2011 - 07:33 Uhr

Eine tolle Idee. Sowas hätte ich auch gerne.
Die Platzierung der aktuellen Splitter finde ich nämlcih "nicht ganz durchschaubar".

18.04.2011 - 10:49 Uhr

Das geht über nen Templateselektor.

Du musst für aufgeklappt und für zugeklappt verschiedene Templates erstellen, und diese dann zuweisen. Hab da mal nen Artikel auf Codeproject gelesen glaub ich. Kann selbigen aber gerade leider nicht finden.

18.04.2011 - 08:58 Uhr

Kuck dir mal das PopUp Control an.

Klingt, als würdest du sowas suchen.

15.04.2011 - 10:29 Uhr

Ich mache das immer über eine Extensionmethode, die ich ToObservableCollection getauft habe.

Google bietet dazu sicherlich reichlich Informationen an.

12.04.2011 - 12:41 Uhr

Klingt nach Wrappanel, was du da machen willst.

Wenn ich dich richtig verstanden habe, dann macht das deine Anforderung von selbst.

18.03.2011 - 11:14 Uhr

Hallo!

Du Bindest ja auch keinen Wert an deine Source. Nach was soll der denn konvertieren?

Ich hab mal in einer App sowas ähnliches gebraucht:


<Image Source="{Binding type, Converter={StaticResource IntToPathConverter}}" ....

Converter:


public class IntToPathConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            int inc = (Int32)value;
            if (inc == 1)
                return @"\Images\Bild1.jpeg";
            else if (inc == 2)
                return @"\Images\Bild2.jpeg";
            else
                return @"\Images\Bild3.jpeg";
            
        }

und so weiter

Bei dir sinds halt andere Datentypen, aber im Prinzip das selbe.

17.03.2011 - 13:36 Uhr

Es geht sogar, dass du dir aufm Server einfach einen View erstellst, und diesen Typsicher abfragst.

Dort kannst du dann auch noch weiter joinen, where einbinden usw.

Bei sehr komplexen Queries gehe ich teilweise auch den Weg über Views, da ist mir LINQ dann einfach zu unübersichtlich ( Wahrscheinlich nur subjektives empfinden ).

17.03.2011 - 12:55 Uhr

Oder meine Antwort, in der ein link zur Microsoft Seite ist, die einem Cross Joins erklärt....

17.03.2011 - 11:35 Uhr

Hallo!

Unter http://msdn.microsoft.com/en-us/library/bb311040.aspx findet sich eigentlich alles was man für joins jeglicher Art braucht.

In dem Link gibts auch noch nen weiteren Link für Cross Joins. Soweit ich das kurz überflogen habe brauchst du dann mehrere "froms".

Allerdings sieht mir dein select eher nach "left joins" aus. Dann musst du "into" verwenden.

In der Hoffnung geholfen zu haben,

Tom.

11.03.2011 - 11:30 Uhr

Ist alles Standardschriftart von WPF, also Segoe UI. Hab die nie geändert.

Werde mal testweise eine Version mit


<Style TargetType="{x:Type TextBlock}">
                <Setter Property="TextElement.FontFamily" Value="Calibri"/>
            </Style>

kompilieren und auf dem Rechner einspielen, dann sollte ich ja sofort wissen, ob es an der Schriftart liegt oder nicht.

Dummerweise finde ich nicht heraus, ob Segoe UI auch bei AutoCAD die Standardschrift ist; Irgendwie scheint google das nicht zu wissen 👅

Das Netzwerkthema:

Kann das irgendwie mit der Schrift zusammenhängen? Mir fällt da kein sinnvoller zusammenhang ein.

11.03.2011 - 10:08 Uhr

Hallo Community!

Ich brauche mal eure Hilfe bei einem etwas seltsamen verhalten meines WPF-Programms auf genau "1" Clientrechner:

Ein Bild sagt ja bekanntlich mehr als 1000 Worte, daher bitte erstmal das Bild ansehen, bevor ihr weiterlest.

Es geht also um diese lustigen Rechtecke, die in jedem Textelement dargestellt werden, ausser im Title der einzelnen Fenster. Es geht auch nicht nur um dieses kleine Startfenster, das ist nur schön klein und zeigt das Problem auf. Wenn man nun beliebigen Text im Programm markiert und in eine Textdatei kopiert, so wird er dort richtig dargestellt. Des weiteren Tritt das selbe Problem auch in AutoCAD 2010 auf.

Vermutung: Schriftart kaputt.

Fallen euch noch mögliche andere Quellen ein?

Zusatzinfos:

Programm läuft auf etwa 20 Rechnern, dieses Problem ist aber einzigartig, daher liegts wohl nicht am Programm.

Zusätzliches Phänomen auf diesem PC: Nach etwa 1er Minute Laufzeit hängt sich die NEtzwerkkarte auf und nur ein Ab - und Anstecken des Kabels resetted das Problem. Auch soetwas habe ich zuvor noch nie erlebt.

Hier hab ich nichtmal eine Idee, wo ich den Fehler suchen/finden könnte.

Bitte um Wegweisung zur Ursache.

Client ist eine WIN XP Maschine.

08.03.2011 - 12:56 Uhr

Demnach musst du doch den anderen Herstellern irgendwie mitteilen, wie sie deine Daten updaten sollen oder?

Dann würde ich den von Abt gezeigten Weg wählen.

08.03.2011 - 12:46 Uhr

Frage am Rande:

Du willst eine Spalte erfinden, die sich nach Übergabe eines Wertes automatisch addiert, egal woher diese Daten kommen?

Also jegliche anderen Programme von beliebigen Herstellern, die sich an deine Vorgaben nicht halten und einfach irgendwas mit deinen Daten tun, sollen als Ergebnis einen richtigen Wert erhalten?

Sorry, aber das ist doch reines Wunschdenken. Das ist doch immernoch eine ganz normale SQL - Datenbank, an die jeder, der die Rechte hat seine Update und Insert statements schicken kann, wie er lustig ist.

Entweder irgendjemand definiert eine Arbeitsweise, an die sich alle halten, oder jeder schickt sein Update = alt + neu where ....

Was anderes kann und wirds nicht geben.

PS: Dieser definierte Weg kann natürlich eine stored procedure sein.

25.02.2011 - 11:00 Uhr

Hallo!


 this.Dispatcher.BeginInvoke(DispatcherPriority.Normal,
                        (ThreadStart)delegate()
                    {
                        Image image = new Image();
                        image.Source = bitmap;
                        ImageGrid.Children.Add(image);
                    });

Diesen neuen Thread kannst du dir sparen.
RunWorkerCompleted läuft schon wieder im UI-Thread ab. Du kannst also dein Image direkt ins Grid laden.

25.02.2011 - 10:54 Uhr

Hallo!

Ich habe eine sehr ähnliche Anforderung mal mit


void _dropTarget_DragEnter(object sender, DragEventArgs e)
        {
            Highlight(sender, e);   // Hier werden die grafischen Operationen ausgeführt.
        }

gelöst.

Hoffe das hilft dir weiter.

25.02.2011 - 10:50 Uhr

Hab das Vorhaben mittlerweile aufgegeben, da sich nach einigen Rücksprachen mit dem Kunden herausgestellt hat, dass eine Verwaltung auf Dateiebene(.docx,.pdf) sich als praktikabler erwiesen hat.

Ausserdem hat ihm das Angebot nicht ganz so gut gefallen 😜

14.02.2011 - 09:28 Uhr

verwendetes Datenbanksystem: <SQL Server, Version egal>

Hallo Community!

Bin mir eigentlich nicht ganz sicher, ob ich diesem Abschnitt richtig bin, da die Fragestellung doch etwas übergreifend ist.

Ich bin gerade dabei mir ein Konzept zu überlegen, wie ich Verträge handeln und ausgeben kann.

Prinzipiell besteht ein Vertrag ja aus Kopfdateien, die ich aus einer Verwaltungsdatenbank ziehen muss und einigen Kapiteln, die Daten enthalten.

Diese Daten hätte ich jetzt mal in Text und Tabellen unterteilt, wobei die Tabellen dynamisch zu gestalten sind. Das einzige was ich da bisher als fix eroieren konnte:
Spalte 1 enthält immer einen string. Alle anderen Spalten eher nicht, wobei es auch vorkommt, dass Mengeneinheiten dort stehen (€, % usw.) Daher tendiere ich dazu, alle Tabellenwerte einfach mal als text Datentyp abzulegen, was zwar nicht sehr Datensparend ist, aber die Geschichte für mich sehr vereinfacht.

Nun zu meiner eigentlichen Fragestellung:

Ich würde nun also 3 Tabellen erstellen:

  1. Vertrag:

PK id
fk_auftrag
Version
Vorlage ( darauf komme ich später zu sprechen)
start
finish
timestamp

  1. Vertragsdetail_Text

PK fk_vertrag
PK kapitel
data_top
data_sub
timestamp

  1. Vetragsdetail_Tabelle

PK fk_vertrag
PK kapitel
Zeile
Spalte
Wert
timestamp

Ich denke die Tabellen sind relativ selbsterklärend.
Hat schonmal wer sowas gemacht und kann Denkanstöße zur Vereinfachung bieten?

Nun noch eine die knifflige Frage:

Kann ich Crystal Reports beibringen mir eine dynamische Tabelle zu erstellen?
Ich verwende Crystal zwar eigentlich bei jedem Projekt, aber eine variable Anzhal von Spalten konnte ich bisher immer vermeiden.

20.01.2011 - 08:47 Uhr

Hallo!

Ich tippe mal einfach auf die Verarbeitung der unterschiedlichen Treiber im Bezug auf where a.artid='8328'

Da du das ja als "String" übergibst könnte es da sein, dass dein mysql Treiber diesen anders verarbeitet als das Management Studio?

Versuch mal eine Testtabelle mit nem Zahlenwert.

Ich tippe mal darauf, dass manche deiner Zeilen mit Blanks aufgefüllt werden, und du dadurch where a.artid='8328%' schreiben musst.

Wobei natürchlich where RTRIM(a.artid)='8328' die schönere Variante wäre.

11.01.2011 - 07:27 Uhr

Hallo!

Du musst deine untere Linie vom Rahmen in einen 2ten Detailbereich an die obere Grenze zeichnen.

Die Eigenschaft CanGrow erhöht nur die Grösse des Textfeldes, aber nicht die Grösse des Bereichs -> Dein Ergebnis sieht so aus, wie es aussieht.

Hoffe das hilft dir weiter.

27.10.2010 - 08:20 Uhr

Leg dir ma unter Windows ne ODBC Verbindung zu deiner AS 400 DB an. MIr kommt vor, als würdest du viel zu wenige Daten angeben. Zumindest erinnere ich mich, dass ich bei ner alten Anwendung, die ich für ein noch älteres AS400 System geschrieben hab ne ganze Menge an Informationen brauchte.

Unter anderem: Map, SQL Slang, IP, Port, DB-Name - was mir grad so ausm Stehgreif einfällt.

25.10.2010 - 13:24 Uhr

Da ich hauptsächliche mit Metadaten zu tun habe fällt die Möglichkeit dieser Angabe einfach flach. Es gibt keine Fremdschlüssel auf sich selber und auch keine Möglichkeit " Kreise " zu machen, zumindest hätte ich noch nicht herausgefunden wie. Daher stimme ich für nein.

25.10.2010 - 13:20 Uhr

Das geht ganz einfach mit:

TabControl.SelectedItem = TabPage;

Das is die ganze Hexerei.

01.10.2010 - 11:18 Uhr

Ja klar wird die Spalte breiter, wenn du den header breiter ziehst, dass ist die Funktionalität einer Liste, da sonst irgendwann der Zusammenhang, der Überschriften und der Daten verloren geht.

Ich glaube du missbrauchst die Liste für etwas, was anders sehr viel einfacher wäre.

Beschreibe bitte mal dein Problem / Aufgabe in diesem Zusammenhang

28.09.2010 - 10:24 Uhr

Steht denn dein Template irgendwo unter Resources?

Also zum Beispiel:


<Window.Resources>
<HierarchicalDataTemplate x:Key="CheckBoxItemTemplate">
                <StackPanel Orientation="Horizontal">
                    <CheckBox Focusable="False" IsChecked="{Binding IsChecked}" VerticalAlignment="Center"/>
                    <ContentPresenter Content="{Binding Name, Mode=OneTime}" Margin="2,0"/>
                </StackPanel>
            </HierarchicalDataTemplate>
</Window.Resources>

Wenn dem nicht so ist, wird das Teil auch nicht unter StaticResource gefunden.

27.09.2010 - 15:34 Uhr

Wenn du das so baust, dann hast aber einen Y - Wert, der immer maximal einstellig ist.

Willst du das wirklich?

Warum machst du dir nicht einfach eine List<Koordinaten> und schreibst dir eine Vergleichsmethode?

27.09.2010 - 15:02 Uhr

Blöde Frage, aber:

Was ist, wenn der Empfänger das Teil einfach in einen kopierer legt?

Also diese 1 x drucken Geschicht is ja total absurd.

14.09.2010 - 08:10 Uhr

Hier ist Achtung geboten.

Das ganze sieht mir nach einer Aufzeichnung über Krankmeldungen aus.

Ich weiss zwar nicht, wie das in Deutschland ist, aber in Österreich ist das für Arbeitnehmer(sieht dort nach Schülern aus) illegal. Da solltest du dich vorher über den rechtlichen Hintergrund erkundigen.