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?
Zitat von t2t
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));
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.
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".
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.
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?
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.
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..
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();
}
}
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?
Google mal nach (in beliebigen Zusammenstellungen Augenzwinkern ): "WPF Command Attached Behavior". Da gibt's einige nette Varianten.
Einen ganz interessanten Eindruck machen auch die Actions in Caliburn. 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.
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 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?
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?
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.
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.
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.
ComboboxOpen
---Thread der die Funktion "ManageMySearch" Aufruft
-----"ManageMySearch" beinhaltet die Filterung der Liste + einen AsyncCallBack mit der aktualisierung der Gui?
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?