Laden...

Forenbeiträge von reloop Ingesamt 139 Beiträge

04.03.2011 - 10:52 Uhr

Hallo liebe Community,

ich habe, bevor ich dieses Thema erstellte, das Forum nach ähnlichen Artikeln durchsucht und bin auf nichts gestoßen, was mir an meiner Stelle weiterhilft.

Und zwar habe ich folgende Fragen:

Wie verwaltet ihr eure Projekte(Dokumentation, Planung) und die Software!
Mit geht es nicht speziell um den Code, welcher mittels Tools wie SandCastle zu einer Hilfe generiert werden kann.

Mir geht es darum, mit welchem Programmen ihr wirklich Plant und Dokumentiert!

Wo z.B. ihr oder das Unternehmen in dem Ihr arbeitet, Änderungen festhaltet. Wer hat wann welche Datei bearbeitet? Welche Datei wurde zuletzt bearbeitet? Und was wurde zuletzt geändert?

Solche Dinge.

Vielleicht hat hier ja jemand ein paar gute Tipps für mich.

Gruss,
reloop

28.02.2011 - 13:27 Uhr

Hallo liebe Community,

ein Kunde hat den Wunsch, dass seine Anwendung eine neue Optik erhält. Und zwar soll es in die Richtung gehen, wie Microsoft Office 2010 (Excel).

Primär geht es um das Menü auf der linken Seite unter "Datei". (Anbei ein Screenshot)

Das Menü oben, kann ich ohne weiteres zur Verfügung stellen, da es sich um das Standard Ribbon handelt.

Jedoch habe ich noch keinen wirklich guten Weg gefunden diese Menüoptik, wie in Excel, nach zu bilden.

Vielleicht habt ihr ja eine Idee?

Gruss

22.02.2011 - 11:08 Uhr

Danke, xxxprod!

Ich habe mein Problem nun lösen können.

So sieht es nun aus:

<ListView ItemsSource="{x:Static local:myClass.myList}" />

Gruss,
reloop

22.02.2011 - 10:45 Uhr

Hallo xxxprod,

danke für deine Hilfe. Jedoch möchte ich die Collection ungern im XAML Code pflegen. Momentan existiert eine Klasse (static) welche die notwendige List als Property (ebenfalls Static) besitzt.

D.h. ich würde, um es mal unsauber auszusprechen, gerne folgendes erreichen:

myList = myStaticClass.myStaticList();

<ListView ItemsSource="{Binding StaticResource myList}">

Verzeiht mir diese etwas "unsaubere" Ausdrucksweise.

Danke für deine Hilfe,
reloop

22.02.2011 - 09:32 Uhr

Liebe Community,

ich habe folgendes Problem:

In einem DataGrid möchte in den ItemsSource einer DataGridComboboxColumn an eine Static List<> Binden. (Über den XAML-Code)

Durch eigene Recherche bin ich soweit gekommen, dass ich es über eine Ressource einbinden kann.

Bsp.:
{Binding Source={StaticResource myStaticList}}

Nun meine Frage:

Wo und Wie lege ich diese myStaticList im XAML-Code an?

Beste Grüße und vielen Dank,
reloop

PS:
Die Liste, an die ich binden möchte ist Static und wird an einer anderen Stelle definiert.

14.02.2011 - 17:11 Uhr

Super, das wars... dank dir!

14.02.2011 - 16:49 Uhr

Unter 4.0 finde ich leider keine System.Linq!

14.02.2011 - 16:41 Uhr

Hallo zero_x,

"Es konnte kein Verweis auf 'System.Core' hinzufgeügt werden. Auf diese Komponente wird bereits automatisch durch das Buildsystem verwiesen"

Diese Meldung erhalte ich beim Einbinden.

Gruss!

14.02.2011 - 16:31 Uhr

Hallo liebe Community,

nachdem ich bisher meine ObservableCollection immer aus der WindowsBase referenziert habe, musste ich jetzt mit erschrecken beim wechsel auf .NET 4 feststellen, dass diese nun aus System.dll bezogen wird.

Seit dem fehlen mir jegliche Methodne wie:

Single<>,
Distinct<>,
..
..
..

etc...

Gibt es irgendeine Möglichkeit, diese Funktionen wieder im Zusammenhang mit der OC zu nutzen?

Gruss

01.02.2011 - 09:37 Uhr

Hallo liebe Community,

kennt jemand einen Weg, die zuletzt gedrückte Taste auf der Tastatur zu ermitteln?

KeyDown, KeyUp, etc. hilft mir in dieser Situation nicht weiter, da die Stelle, wo ich auf die Taste zugreifen möchte, mir keine dieser Ereignisse zur Verfügung stellt.

Gruss,
reloop

26.01.2011 - 12:59 Uhr

Danke, FZelle.

Über local läuft es wirklich gravierend schneller. Werde wohl in den sauren Apfel beissen müssen und es darüber steuern.

Nochmals danke für deine Geduld.

Gruss,
reloop

26.01.2011 - 10:00 Uhr

@reloop :
Muss man dir eigentlich alles aus der Nase ziehen?

Nein, entschuldige, das war nicht meine Absicht.

Also:

_server.Get():

        public DbDataReader Get(string query)
        {
            try 
	        {	        
                MySqlDataReader resultSet;
                var CN = new MySqlConnection("CONNECTIONSTRING");
                var command = CN.CreateCommand();
   
                CN.Open();
                command.CommandText = query;
                resultSet = command.ExecuteReader();	
	            return resultSet;
	        }
	        catch (Exception e)
	        {
		
		        throw e;
	        }
        }

Der Server ist nicht local. Er liegt auf einem 1&1 Root Server.

26.01.2011 - 08:49 Uhr

Ist auf der Tabelle die du befragst ein Index gesetzt?
MfG
wax

Ja, muss ich den während eines Statements oder vorher irgendwie setzen bzw. beachten?

Wie lautet denn deine Query? Machst du ne komplizierte Abfrage auf verschiedene Tabellen mit Unterabfragen? So eine Query könnte unter Umständen länger dauern...

var result = _server.Get(String.Format(@"SELECT * FROM
                                                        tabelle WHERE col1 = '{0}' AND col2 = '{1}'",
                                                                                           value1,value2));
25.01.2011 - 16:30 Uhr

Danke, für die Hinweis.

Nach erneutem nachsehen erscheint mir das Problem des Zeitaufwandes bei der Select anweisung zuseien.

Hat jemand erfahrung mit MySQL und langsamen Zugriffen bzw. Antworten?

25.01.2011 - 16:11 Uhr

Greife auf eine MySQL Datenbank zu.. die mir in diesem Zuge fast als der Übeltäter erscheint.

Wenn ich selbige Prozeduren oben durch Textdateien füllen lasse, dauert es keine Sekunde.

Ist es bekannt das MySQL langsam(er) arbeitet?

25.01.2011 - 15:05 Uhr

Er benötigt für das Füllen der Liste, bei einer Tabelle die 5 Datensätze und 10 Spalten hat, ca. 3-4 Sekunden.

Irgendwas kann da doch nicht stimmen?

25.01.2011 - 14:19 Uhr

Hallo liebe Community,

ich mach es kurz und knackig:

Ich habe eine klasse "myClass".

Diese hat insgesamt 15 Eigenschaft. ( 3 Davon sind List<..class..> - falls das eine Rolle spielt?)

Nun, wenn ich nun im Code schreibe:

var newItem = new myClass();

dauert dieser Vorgang schon ca. 1 Sekunde. Es läuft zumindest im Debug nicht fließend weiter, sondern "hängt" kurz. Meiner interpretation nach zu lange. (Wenn ich das ganze mal auf 500 Summieren würde)

Nun gehe ich folgenden Weg:

Über einen DbDataReader lese ich mir die Daten aus einer Tabelle und laufe diese in einer while(myDbReader.read()) durch.

In dieser Whileschleife mache ich dann folgendes:

myList<myClass>.Add(new myClass {
   properties = myDbReader['wert'].ToString(),
   properties1 = myDbReader['wert'].ToString(),
   properties2 = myDbReader['wert'].ToString(),
} usw.

Das ganze nimmt erheblich viel Zeit in anspruch. Woran kann das liegen? Ist mein Weg falsch gewählt? Gibt es evtl. eine elegantere Lösung?

Falls die Infos noch zu schwammig sind, oder Informationen fehlen, einfach mitteilen.

Vielen Dank,
reloop

23.01.2011 - 19:37 Uhr

Hallo Community,

erstmal entschuldige ich mich für das schlecht beschriebene Thema, doch leider viel mir keine treffendere Beschreibung ein. Und zwar geht es um folgendes:

Gibt es eine Möglichkeit, wie ich z.B. Fehler ausgeben kann, wenn eine Assembly nicht vorhanden ist? Momentan ist es so, dass ich die .EXE - Starte und von Windows mitgeteilt bekomme das ein Fehler aufgetreten ist und meine Anwendung nicht mehr reagiert.

Was ich quasi suche, ist quasi ein weg wie bei try - catch, der mir beim App.Do() ne Exception wirft, wenn etwas schief gelaufen ist.

In der Entwicklungsumgebung bekomme ich die Meldung, waurm es nicht funktioniert hat, natürlich immer im Debugger angezeigt, doch beim Kunden erscheint leider immer nur direkt die Meldung "Anwendung reagiert nicht mehr".

Ich hoffe, ihr versteht, worum es mir geht.

Vielen Dank,
reloop

19.01.2011 - 20:09 Uhr

Des weiteren könntest Du die Dateien, auch mithilfe eines kleine selbst geschriebenen Programm der Solution selbst hinzufügen. (Die SLN Datei ist eine XML Datei die man auch von extern manipulieren könnte.

Danke, genau diese Aussage habe ich gesucht! 😃

19.01.2011 - 17:35 Uhr

Hallo liebe Community,

besteht die Möglichkeit, einem Projekt "extern" Dateien hinzuzufügen?

Ich habe viele Klassen, die ich generieren lasse und möchte ungern nochmal jede einzelne dem Projekt zuweisen.

Gibt es dort einen eleganteren Weg? Das ich quasi dem Projekt programmgesteuert mitteile, welche Dateien noch hinzufügt werden müssen?

Ich hoffe ihr versteht, worum es mir geht.

Gruss,
reloop

22.12.2010 - 12:24 Uhr

Hallo reloop,

Stichwort

if(!IsPostBack) { ... }  

?

Gruß

nitro

Danke, Nitro2k7. Mit diesem Lösungsansatz bin ich bestens bedient!

Hier für alle noch der Link zur Definition von IsPostBack

22.12.2010 - 10:49 Uhr

Hallo liebe Community,

ich möchte in meiner Anwendung mit den Handle des aktuellen Windows ermitteln, das klappt soweit sehr gut.

Um zwischenzuspeichern, welchen Handle meine ASP Anwendung hat (bzw. wohl eher der ausführende Browser) speicher ich mir im Load den aktuellen Handle.

Nun habe ich einen Timer auf meiner Seite welcher nach einem gewissen Interval prüft, welchen Handle das gerade geöffnete Fenster hat.

Mein Problem ist es, dass ich, seit dem ich den Timer eingebaut habe, JEDES mal einen Refresh der Seite erlebe, nachdem der Tick ausgeführt wird / wurde.

Wie konfiguriere ich den Timer so, dass er zwar den TICK ausführt, jedoch keinen Refresh der Seite erzeugt?

Beste Grüße,
reloop

17.12.2010 - 19:22 Uhr

Vielen Dank!

/Edit:

Eine Frage noch, welche Art von Überwachung muss ich ausführen, um zu dieser Detailierten Threadübersicht zu kommen?

17.12.2010 - 19:05 Uhr

Hallo Community,

ich bin eben im Netz auf ein Bild gestoßen, welchen einem die Dauer für die einzelnen Funktionen wiedergibt. (Siehe Anhang)

Meines Wissens nach, funktioniert das mithilfe eines Profilers?

Meine Frage ist nun, ob jemand den unten gezeigten Profiler kennt oder mir einen empfehlen kann, der gleiches leistet.

Beim laden meines Programmes dauert es nämlich gelegentlich ungewöhnlich lang und ich würde gerne herausfinden woran das liegt.

Gruss,
reloop

16.12.2010 - 19:16 Uhr

Ich dachte es geht über eine schnellere Möglichkeit (LINQ?) anstatt in einer Schleife jedes Objekt samt Properties durchzugehen.

Und talla:
Ich habe ein Grid, in dem eine beliebige Anzahl an Spalten ausgegeben werden. Nun möchte ich dem Benutzer oben eine Textbox zur Verfügung stellen, in die er einen Wert eingeben kann und daraufhin jede Spalte nach diesem durchsucht wird.

Wie löst ihr dieses Problem?

Gruss,
reloop

16.12.2010 - 18:47 Uhr

Hallo Community,

gibt es einen einfachen und effizienten Weg eine ObservableCollection<meineKlasse> so zu durchsuchen, dass z.b. der Wert "xyz" in jeder Property von <meineKlasse> gesucht wird?

Bedeutet:

angenommen:

public class meineKlasse
{
   public string name {get;set;}
   public string email {get;set;}
   public int alter {get;set;}
   public datetime anmeldedatum {get;set;}
}

Meine Absicht ist es jetzt möglichst einfach jede Property (Name, Email, etc..) nach einem Wert zu durchsuchen..

Danke für eure Hilfe,

Gruss,
reloop

08.12.2010 - 18:28 Uhr

Wenn deine Klasse das Interface IInterface zugewiesen hat, welches wiefolgt aufgebaut wäre:

public interface IInterface
{
   void myMethod();
}

Dann müsstest du zwingend in der Klasse diese Funktion auch anlegen, mittels:

public void myMethod()
{

}

Und somit ist sie auch im

private List<myClass> _liste = new List<myClass>();
_liste.ElementAt(0)).myMethod();

vorhanden. Ausschlagebender Punkt ist, dass die Methode public ist.

Gruss,
reloop

Zusammengefasst:

    public class myClass : UserControl , IInterface
    {
        public void myMethod()
        {

        }
    }

    public interface IInterface
    {
        void myMethod();
    }

    public class myTestClass
    {
        private List<myClass> _liste= new List<myClass>();

        public myTestClass()
        {
            _liste.ElementAt(0).myMethod();
        }
    }
06.12.2010 - 21:04 Uhr

Hallo talla, fande den Beitrag sehr interessant. Könntest du einen Verweis oder Artikel nennen, wo die richtige Verwendung von Controls (Bsp. Grid nicht als Layoutbasis) o.ä. ausführlicher beschrieben ist?

Danke für die Mühe und pardon für das OT.

Beste grüße,
reloop

29.11.2010 - 19:41 Uhr

Google mal nach (in beliebigen Zusammenstellungen Augenzwinkern ): "WPF Command Attached Behavior". Da gibt's einige nette Varianten.

Einen ganz interessanten Eindruck machen auch die
>
. Wobei mir da auch ein paar Punkte nicht ganz so gut gefallen.

Danke für deinen Rat, ich denke da werde ich fündig werden.

Wenn du schreibst, dass dir da ein paar Punkte nicht ganz so gut gefallen, darf ich Fragen, wie du es z.B. löst wenn du bei einem Button das GotFocus event noch belegen möchtest?

Die Command-Property kümmert sich ja scheinbar um das Click-Ereignis.

Gruss,
reloop

29.11.2010 - 19:27 Uhr

Danke gfoidl,

eine Frage zum Schluss hätte ich noch:

Worin unterscheide ich denn die Events? Bei einem Click definiere ich ja fest dass es beim "Click" feuern soll, doch beim Command kann ich ja nur ein Event hinterlegen?

Was wäre denn z.B. wenn ich jetzt eine anderes Event noch belegen wollen würde?

Danke für eure Hilfe,

gruss,

reloop

29.11.2010 - 18:44 Uhr

Danke für deine Antwort, das kommt mir schonmal sehr Entgegen.

Die Frage, die sich mir gestellt hat, war ob es irgendwelche Vorteile durch den Einsatz von RelayCommand geben wird. (Perfomance, Übersichtlichkeit, einfachere Codeverwaltung? etc.)

Oder ob es im Prinzip irrelevant ist, welchen Weg ich da gehe.

Gruss und danke für deine Hilfe,
reloop

EDIT:

Nachtrag: Und noch eine Frage zum Schluss - Wie löst ihr das in euren Anwendungen?

29.11.2010 - 18:10 Uhr

Hallo,

ich habe mein MVVM wiefolgt aufgebaut:

0- Backend
1- Contract
2- Implementation
3- ViewModels
4- Anwendung(User-Controls die Zugriff auf das jeweilige VM besitzen).

Derzeit verwende ich keine RelayCommand um zwischen Anwendung und ViewModel zu kommunizieren, sondern schreibe z.B. in einem:

<Button Click="ClickEvent"/> anstatt <Button Command="{Binding ClickEvent}"/>

Nun wurde ich auf das Verfahren mit den RelayCommand-Aufmerksam gemacht und überdenke gerade ob meine "FrameWork"-Logik noch bestand hat, nach meiner "alten"(?) vorgehensweise.

Wie handhabt ihr das? Wäre dass Grund genug das System nochmal zu überdenken?

Danke für euren Rat,
gruss,
reloop

29.11.2010 - 07:26 Uhr

Danke für eure Antworten.

Mir wurde damals während eines Lerhgangs mitgeteilt, dass das kleinschreiben des Schlüsselwortes die automatische initialisierung mit sich bringt.

Gut, dass ihr mich darauf hingewiesen habt.

Nach eigener Recherche bin ich, wie Stipo bereits angeführt hat, ebenfalls darauf gestoßen dass string lediglich einen Alias auf String abbildet.

Vielen Dank für eure Hilfe,

gruss,

reloop

28.11.2010 - 18:56 Uhr

Hallo,

kurz und knapp:

Ich habe eine Klasse "FooBar". Diese bestizt 2 Properties vom Typ "string". (Wichtig, 'string' ist klein geschrieben und wird meines Wissens deshalb auch automatisiert beim instanzieren mit dem Standard string-wert belegt (String.Empty).

Wenn ich nun schreibe:

var myClass = new FooBar();

sind die beiden Properties in myClass aber mit "null" belegt und nicht mehr mit "".

Ich weiß nicht was ich geändert habe um diesen Zustand herbei zu führen, jedoch ist es mehr als störend und ich kriege es nicht mehr weg. Ich könnte jetzt im Konstruktor der Klasse die Werte manuell auf String.Empty setzen, aber das wäre ja nicht Sinn der Sache.

Vielleicht habt ihr ja einen Tipp?

Gruss,
reloop

25.11.2010 - 17:16 Uhr

Hallo,

habe eine, in meinen Augen noch nicht ganz so glückliche, Lösung gefunden:

Im Event: CurrentCellChanged:

 private void GridCurrentCellChanged(object sender, EventArgs e)
        {
            var currentGrid = sender as DataGrid;


            if (currentGrid != null)
            {
                if (currentGrid.CurrentCell.Column == null) return;

                currentGrid.CommitEdit();
                if (currentGrid.CurrentCell.Column.Header.ToString() == "")
                {
                    currentGrid.CancelEdit();
                    return;
                }

                currentGrid.BeginEdit();
            }

            var focusedCell = Keyboard.FocusedElement as DataGridCell;
            if (focusedCell == null) return;

            var traversal = new TraversalRequest(FocusNavigationDirection.Next);
            focusedCell.MoveFocus(traversal);
        }

Somit landet man direkt im Bearbeiten.

25.11.2010 - 09:18 Uhr

Hallo,

ich habe eine Anwendung wo der Kunde über ein WPF-DataGrid zu einem bestimmten Vorgang beliebig viele Mitarbeiter hinzufügen kann.

Dazu habe ich ein eigenes ComboBox-Control entworfen, welches im DataGrid eingebunden ist. (DataGridTemplateColumn->CellTemplate->DataTemplate).

Da bei jedem Vorgang unterschiedlich viele Mitarbeiter hinzugefügt werden können, habe ich die Eigenschaft CanUserAddRows auf "True" gesetzt.

Nun habe ich aber folgendes Problem:

Wenn der Kunde nun in dieser, ich nenne sie mal "autogenerierten"-Row, den Inhalt der Combobox verändert und dann in die nächste Spalte vom Grid klickt, wird der vorherige Wert in der Combobox verworfen.

Laienhaft Ausgedrückt: Ich habe das Gefühl, dass das DataGrid die Zeile erst beim Doppelklick initialisiert und für Eingaben "bereit" macht. Denn wenn ich erst in eine Spalte Doppelklcike (von der "autogenerierten"-Row) und dann in die Combobox wechsle und einen Wert auswähle, funktioniert alles wunderbar.

Ich hoffe, ihr könnt nachvollziehen worum es geht und meine Beschreibung war nicht all zu verwirrend.

Mit freundlichen Grüßen,
reloop

23.11.2010 - 16:03 Uhr

Danke, habe es jetzt so umgesetzt wie o.g. und es ist genau das wonach ich gesucht habe.

Letzte Frage:

" ThreadPool.QueueUserWorkItem(_ =>" wofür steht in dem Fall das "_" ?

Bei MouseOver zeigt er mir an: "parameter (object) _" .. kann ich in dem Zusammenhang aber leider nicht wirklich in Verbindung bringen.

23.11.2010 - 14:59 Uhr

Umgebaut auf meine Anwendung sieht es jetzt so aus:

             ThreadPool.QueueUserWorkItem(_ =>
            {
                var searchResult = ReturnSearchResult(_search);

                Action<List<myData>> cheapUIAccess = r => ItemsSource = r;

                Dispatcher.BeginInvoke(cheapUIAccess, searchResult);
            });  

Verstehe ich den Ablauf richtig? der QueueUserWorkItem hängt die ihm über Lambda zugewiesene Methode dem Pool an abzuarbeitenden Methoden an?

Und wird mit Action<List<myData>> cheapUIAcess eine Methode erstellt, mit dem Parameter "r", der in der Methode selbst den ItemsSource mit seinem wert belegt?

Und zum Schluss wird mithilfe des BeginInvoke diese Funktion aufgerufen (cheapUiAcess) und der Parameter "searchResult" stellt indem Fall mein "r" da?

Verzeih mir diese Laienhaften Fragen, aber das hilft es mir besser zu verstehen.

Und eine Frage zum Schluss: Wo ist der Vorteil des QueueUserWorkItem gegenüber einem eigenen Thread? Oder wird er dadurch erzeugt?

Danke für deine Hilfe,
deine Beiträge sind mir jedes eine riesen Hilfe.

Gruss,
reloop

PS: Funktionieren tut es spitze!

23.11.2010 - 14:42 Uhr

Danke gfoidl.

Also kurzgefasst ist mein Vorgang dieser:

ComboboxOpen
---Thread der die Funktion "ManageMySearch" Aufruft
-----"ManageMySearch" beinhaltet die Filterung der Liste + einen AsyncCallBack mit der aktualisierung der Gui?

Gruss und vielen Dank,
reloop

23.11.2010 - 14:25 Uhr

Hallo liebe Community,

ich habe eine Frage zum Umgang der beiden o.g. Objekte. Ich möchte in einer Combobox suchen, welche an eine List<> gebunden ist. Da die Anwendung immer kurz hängt, wenn sich das DropDown mit den neuen Daten öffnet, möchte ich dieesen Vorgang gerne auslagern.

Nun meine Frage:

Nutze ich dafür einen Thread im ComboBox-DropdownOpen Event?

Und wie löse ich das Problem, wenn ich NACH beenden des Threads noch Code ausführen will? Quasi einen "ExitCode" oder "DoAfterWorkCode".

Oder ist mein Ansatz komplett Falsch und ich sollte auf einen Backgroundworker zurückgreifen?

Gruss,
reloop

22.11.2010 - 14:29 Uhr

Danke gfoidl, das war wirklich ein spitzen Beitrag und hat mich schonmal weitergebracht.

**Jack30lena **und ThreBrainiac,

gibt es diese Funktionialitäten auch für WPF?

Gruss,
reloop

22.11.2010 - 14:04 Uhr

Danke für eure Anregungen und Hinweise.

Außerdem würde ich die Suche selbst in einen Thread auslagern, damit das UI nicht blockiert, wenn der User Daten eingibt.

Was genau würdest du im Thread auslagern? Quasi das ganze KeyDown-Ereignis oder nur die wirkliche Suche mit dem eingegebenen String der Daten?

Und würde es das ganze denn dann performanter machen? Momentan kommen ca. 2.500 Datensätze aus einer Textdatei die ich über eine CombobBox ausgebe, was (bei gesamter Datenmenge ohne Filterung) gerne mal 2-3 Sekunden dauert bis die CombobBox sich geöffnet hat.

zusätzlich könntest du die Daten auch lokal cachen (mit Ablaufdatum).

Kannst du das etwas genauer Erläutern? Bzw. wonach ich da genau suchen muss, um mich einzuarbeiten?

Momentan lese ich beim Start der Application schon die Kompletten Listen (*.txt) in eine Static List ein, damit ich nicht jedes mal aufs neue diese Datei initialisieren muss. Aber wirklich helfen tut dass bei der Geschwindigkeit nicht.

Wie o.g. dauert das Öffnen der ComboBox bei enthaltenen Daten > 2.000.

Vielen Dank für eure Mühe,
reloop

22.11.2010 - 13:58 Uhr

Hallo michlG,

ich vergaß zu erwähnen, dass mein UserSearchControl eine von mir erstelle ComboBox ist.

Der XAML-Code sieht dort wiefolgt aus:

<ComboBox x:Class="myProject.controls.SearchControls.UserSearchControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    IsEditable="True"
    DropDownOpened="ComboBoxDropDownOpened"
    KeyUp="ComboBoxKeyUp"
    DisplayMemberPath="Anzeige"
    SelectedValuePath="{Binding Nr,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"                                               
    Height="22"
    VerticalAlignment="Top"                                                                               
    Margin="0,0,0,5">
</ComboBox>

Was könnte ich falsch machen, dass der UpdateSourceTrigger fälschlicherweise LostFocus anstatt PropertyChanged erkennt?

Gruss,
reloop

22.11.2010 - 13:12 Uhr

Hallo,

Also zu meinem Problem:

In unserer Anwendung kann es durchaus vorkommen, dass der Benutzer bereits erfasste Daten suchen muss. (Aufträge, Rechnungen, Kunden, Produkte.. etc.)

Die Anzahl der Daten beläuft sich im Standardfall auf 1.000 - 4.000.

Wenn ich mir nun eine Erfassungsmaske vorstelle, wo der Benutzer bsp. auf einen Auftrag o.ä. zurückgreifen muss, komme ich ins grübeln wie ich das am Besten realisiere.

Momentan habe ich auf meiner GUI eine ComboBox, die per Binding an die Liste der Aufträge gebunden ist. Die Suche nach den Daten erfolgt quasi Instant. Bedeutet, wenn der Kunde in der Combobox einen Text eingibt, wird Automatisch nach jedem Tastendruck gefiltert. (Sofern die Text.Length > 3 ist, da es sonst wirklich zu langsam wäre.)

Das ganze ist ja nun nicht wirklich Benutzerfreundlich, wenn ich den Kunden ggf. noch nach anderen Attributen suchen lassen möchte - oder ihm eine andere Sortierung ermöglchen möchte.

Ausserdem dauert das Öffnen der Combobox (bei einer Anzeige von allen 2.000 Daten) schon seine 2-3 Sekunden.

Eine mir bekannte Alternative wäre auch noch, dass ich die Suche auf ein neues Fenster auslagere, wo der Kunde ein Grid hat über das er sich seinen Datensatz aussuchen kann.

Nun abschließend zu meiner Frage:

Wie gestaltet ihr dem Benutzer die Suche nach bereits erfassten Daten? Über eine ComboBox? Oder lasst ihr ein neues Fenster aufgehen in dem gefiltert werden kann?

Vielleicht habt ihr ja noch ein paar Tipps und Anregungen für mich.

Vielen Dank,
reloop

22.11.2010 - 12:00 Uhr

Hallo liebe Community,

ich habe folgendes "Problem".

Momentane Situation:

Ich habe ein DataGrid mit meheren Spalten. Binding erfolgt über den ItemsSource:

ItemsSource="{Binding myData, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 

Nun habe ich z.B. eine Spalte, wie wie folgt aufgebaut ist:

                                                                <DataGridTemplateColumn Header="Name" Width="*" >
                                                                    <DataGridTemplateColumn.CellTemplate>
                                                                        <DataTemplate>
                                                                            <StackPanel>
                                                                                <myControls:UserSearchControl
                                                                                    x:Name="myComboControl"
                                                                                    Text="{Binding Name}"
                                                                                    SelectedValuePath="{Binding UserNr,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>

                                                                             
                                                                             
                                                                            </StackPanel>
                                                                        </DataTemplate>
                                                                    </DataGridTemplateColumn.CellTemplate>
                                                                </DataGridTemplateColumn>

Das funktioniert soweit auch alles sehr gut.

Wenn ich jedoch jetzt einen Datensatz über die Combobox ändere, speichert er diesen Wert erst wenn ich die Spalte wieder verlasse. Bedeutet: Ich klicke die CombobBox in der Spalte an, wähle anstatt dem User "Foo" den user "Bar" aus und klicke dann auf speichern.

Dann bleibt in meinem myData aber nachwievor der User "Foo" stehen. Erst wenn ich das Combobox Feld verlasse und quasi in eine andere Spalte wechsel, dann speicher, enthält er denn geänderten User "Bar".

Ich hoffe es klingt nicht zu verwirrend und ihr könnt nachvollziehen worum es geht.

Danke für die Hilfe,
reloop

22.11.2010 - 09:15 Uhr

Was genau Funktioniert nicht? Und wie sieht dein Code aus, indem du auf das Objekt verweist?

Eine Möglichkeit wäre:

Keyboard.Focus(Objekt);

Gruss,
reloop

10.11.2010 - 10:31 Uhr
<my:GridControl Name="grdRGUe">
                                        <my:GridControl.View>
                                            <my:TableView AutoWidth="True" SelectionChanged="TableViewSelectionChanged" MultiSelectMode="Row"  AllowEditing="False"/>
                                        </my:GridControl.View>
                                        <my:GridControl.Columns>
                                            <my:GridColumn x:Name="columnDatum" Header="Datum" FieldName="AnzeigeDispDat"
GroupInterval="DateRange"/>
                                            <my:GridColumn x:Name="columnVon" Header="Ersteller" FieldName="Ersteller" />
                                        </my:GridControl.Columns>
                                    </my:GridControl>

Ich benutzer das WPF-DataGrid von DevExp.

Beste grüße,
und danke für die Hilfe.

10.11.2010 - 10:08 Uhr

Ich habe etwas interessantes festgestellt:

Setze ich den Aufruf des Controls auf Kommentar, dass mein Grid beinhaltet, öffnet sich das Projekt binnen 1-2 Sekunden.

Klicke ich nun auf den Menüpunkt der das Control mit dem Grid lädt, dauert der Vorgang nochmal 1-2 Sekunden.

Klicke ich auf einen anderen Menüpunkt und wechsel danach wird zum Control mit dem Grid zurück, öffnet es sich direkt ohne Ladezeit.

Kurz gefasst:

Das erste Laden zur Laufzeit, von meinem GridControl, dauert immer 1-2 Sekunden.

(OHNE Binding!)

Ich hoffe, ich habe es nicht zu umständlich beschrieben.

10.11.2010 - 09:34 Uhr

Also, bei mir:

Intel Core 2 Duo 2.8 GHZ
3 GB Ram
und aktueller G-Force Garfikkarte, braucht die Exe aus dem Release Ordner 3-4 Sekunden bis sie sich öffnet.

Und das immer, nicht nur einmalig.

Die genauen Eckdaten des Kundensystems kann ich dir im Moment leider nicht nennen, da ich dort gegenwärtig niemanden telefonisch erreiche.

Selbst wenn ich das Binding entferne und die Maske sich ohne Daten öffnet, bleibt meine Startzeit bei 3-4 Sekunden.

Gruss,
reloop

10.11.2010 - 08:45 Uhr

Hallo liebe Community,

meine Anwendung (WPF-EXE) benötigt wenn ich Sie aus der Entwicklungsumgebung heraus starte, ca. 2 Sekunden bis sie sich öffnet. Das ist soweit noch vertretbar.

Nun habe ich Sie bei meinem Kunden installiert (.NET4 etc. läuft alles auf dem Client!) und die Anwendung brauch 7 Sekunden bis Sie sich öffnet. Der Cursor wird auch nicht zur Sanduhr o.ä. .

Auch bei der Bedienung hängt die Anwendung. Maximieren der Maske ruckelt und ist ebenfalls langwierig.

Die Anwendung selbst lädt beim Start nur eine 50 Zeilen lange Textdatei, beinhaltet eine Navigation und ein DataGrid in der Mitte - das wars!

Ich habe im Web & hier im Forum leider nichts zu diesem Thema gefunden, deshalb mein Post.

Mit freundlichen Grüßen,
reloop