Laden...
Avatar #avatar-3236.jpg
xxMUROxx myCSharp.de - Member
Student + Programmierer Südtirol/Italien Dabei seit 11.01.2010 1.552 Beiträge
Benutzerbeschreibung

Forenbeiträge von xxMUROxx Ingesamt 1.552 Beiträge

23.01.2012 - 13:45 Uhr

wäre es auch möglich die Berechtigung wöhrend dem Speichervorgang zu verbiegen und nachher wieder zurücksetzen

Wäre möglich abber sinnlos, denn dazu benötigst du die notwendigen Rechte. Zusätzlich benötigt die Rechteänderung auf dem Ordner je nach Inhalt mehr oder minder lange.

Du könntest auch eine Gruppe erstellen und dort dieser Gruppe dem besagten Ordner nur "Ordner erstellen" und "Dateien erstellen" Rechte geben.

Gruß
Michael

22.01.2012 - 16:56 Uhr

Hallo Hans_Rakete,

in C# heißt die ähnliche Methode IndexOf mit dem Unterschied dass bei Nichtbeihaltung der Suchstrings nicht NULL zurückgegeben wird, sondern -1.

Bei Fehlermeldungen, i.e. Compilerfehler, sie bitte immer zu [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen). Generell sind die Syntaxfehler so und so eindeutig formuliert.

Gruß
Michael

22.01.2012 - 11:17 Uhr

Hallo Lothi,

Soll ich schon in meiner DLL überall INotifyPropertyChanged impementieren und BindingList<T> zurückgeben.

Nein, du stellst nur die Datenklassen zur Verfügung. Für die Benachrichtigung an die GUI, soll sich der Benutzer kümmern.

Oder einfach normale Listen (List<T>, Collection<T>)

Ja, schon bessern. Evtl bieten sich auch die IEnumerable<T> an, welche für diesen Zweck gut geeigntet sind. In Kombination mit yield kannst du bei den Methoden ermöglichen dass, wenn der Benutzer z.B. nur das erste Element der Liste benötigt, nicht die ganze Liste erstellt werden muss.

Gruß
Michael

22.01.2012 - 09:54 Uhr

Hallo Hans_Rakete,

im Converter wird aber nie der else-Zweig ausgeführt;

Dieses Problem löst man immer mit dem Debugger und schaut sich die Werte an, welche der Convert Methode übergeben werden.

Dass beim ersten Mal null zurück gegeben wird und nicht in den else Block gesprungen wird ist klar. Wenn boxedB null ist und values[1] eben nicht, dann wird null zurückgeben.
In den else Block spring er nur wenn boxedB null ist;


if (boxedB == null)
{
    if (values[1] != null)
    {
        var s = (string)values[1];
        if (s != "")
        {
            return true;
        }
    }
}

kann verkürtzt werden zu:


if(boxedB == null)
{
    string? s = values[1] as string;
    if(String.IsNullOrEmpty(s))
        return true;
   //WIE OBEN FEHLT HIER DER ELSE ZWEIG
   // ansonsten wäre return String.IsNullOrEmpty(s); möglich
}

Wie im Kommentar bereits gesagt, fehlen dir sämtliche else-Zweige. Dies ist ansich kein Problem, kann aber, wie in deinem Fall wahrscheinlich, zu einem "Warum funktioniert dies nicht, es sollte es aber" Problem führen.

Gruß
Michael

22.01.2012 - 09:45 Uhr

Hallo Corefighter,

auch ist es wichtig zufällige Daten v.a. beim Downloaden zu verwenden. Den was zumindest beim IE, Chrome ect auffällt ist, dass wenn eine Datei geladen wurde, nehmen wir an 2GB, und diese einen anderen Tag erneut geladen wird (dieselbe, also nicht eine welche auf dem Server modifiziert wurde), diese Datei dann nicht heruntergeladen wird, sondern die bereits heruntergeladene verwendet wird.
Dies wird dann wohl vor dem Herunterladen mit einem Hash abgeglichen werden ob die Serverdatei noch identisch mit der bereits heruntergeladenen ist.
Es kann dann auch sein dass diese Technik auch in C# greifen wird.

Gruß
Michael

20.01.2012 - 16:18 Uhr

Hallo Abt,

einige Achievements funktionieren nur wenn FxCop installiert ist. Zusätzlich muss man bei 9channel angemeldet sein, aber ich denke dies ist sowieso klar.

Gruß
Michael

20.01.2012 - 09:37 Uhr

Hallo MarchinD,

hab ein interessantes Beispiel auf Stackoverflow gefunden:


string[] tags = new string[] { "ruby", "rails", "scruffy", "rubyonrails" };
string cmdText = "SELECT * FROM Tags WHERE Name IN ({0})";

string[] paramNames = tags.Select(
    (s, i) => "@tag" + i.ToString()
).ToArray();

string inClause = string.Join(",", paramNames);
using (SqlCommand cmd = new SqlCommand(string.Format(cmdText, inClause))) {
    for(int i = 0; i < paramNames.Length; i++) {
       cmd.Parameters.AddWithValue(paramNames[i], tags[i]);
    }
}

welches folgendes Resultat ergibt:


cmd.CommandText = "SELECT * FROM Tags WHERE Name IN (@tag0,@tag1,@tag2,@tag3)"
cmd.Parameters["@tag0"] = "ruby"
cmd.Parameters["@tag1"] = "rails"
cmd.Parameters["@tag2"] = "scruffy"
cmd.Parameters["@tag3"] = "rubyonrails"

Leider handelt es sich um einen Integer Datentyp AddWithValue ist der Datentyp egal. Es wird dabei sichergestellt dass die Datenbank den Wert, sofern er übereinstimmt, auch versteht.

Gruß
Michael

19.01.2012 - 19:56 Uhr

Hallo Theo,

wo liegt das Problem? Du dürftest kein Problem haben in buttonCopyMet_Click auf die TextBoxen zugreifen zu können.

Gruß
Michael

19.01.2012 - 10:49 Uhr

Hallo Second Sun,

ADO.NET lädt nur nur dies was wirklich geladen werden soll. Und dies wird per SQL-Query (Sei es per Hand, oder per EF) bestimmt.

Bezüglich Archivierung kann man es auch mit einer Bit Spalte lösen. Evtl wird dann ein Index, wenn die Tabelle groß wird von Vorteil sein.

Ein wichtiger Punkt von Multiclient ist immer die Concurrency. D.h. du musst aufpassen dass Client1 nicht 2sec vor Client2 dieselben Daten ändert, sodass sie nicht mehr konsisten wären, aber dies weißt du bestimmt.

Weiteres Stichwort: SQL-Datenbank-Projekt in VS

Gruß
Michael

19.01.2012 - 09:04 Uhr

Hallo pdelvo,

die maximale/minimale Zahl hängt davon ab ob das Programm in einem x86 oder x64 Prozess läuft.
Bei x86 kann ein Programm generell nur 2GB an Speicher anfragen, von denen ca 1.5 GB frei ansprechbar sind.
Bei x64 ist es etwas anders, dort können theoretisch 8TB angefragt werden. Jedoch ist dabei zu beachten dass jedem .NET Object "nur" 2 GB an Speicher zugewiesen werden kann.

Zusätzlich ist maximal darstellbare Zahl nicht 2n-1 sondern 2n-1-1, da das erste Bit das Vorzeichen angibt.

Gruß
Michael

17.01.2012 - 09:15 Uhr

Hallo Coffeebean,

am Besten funktioniert dies mit einem IValueConverter.
Natürlich funktioniert dies auch mithilfe von Styles, jedoch wäre mir dies zu statisch und man muss viel zu viel anpassen.
Mit Convertern kann man als ConverterParameter evtl. den Wert übermitteln bei welchem das Control sichtbar ist.

Gruß
Michael

16.01.2012 - 09:01 Uhr

ich weiß jetzt an was es gelegen hat.

Gut, aber das nächste Problem wird dann sicherlich jeden Moment auf dich zukommen. Warum das Rad neu erfinden, wenn es bereits fertig implementierte Klassen gibt, von welchen nur geerbt und erweitert werden kann.

15.01.2012 - 19:43 Uhr

Hallo thefiloe,

Prinzip von Button marke eigenbau

wenn du schon einen CustomButton bauen möchtest, warum erbst du dann nicht von Button? Dies erspart eine menge Ärger und ist nebenbei auch der einzig richtige Weg.

Gruß
Michael

15.01.2012 - 19:40 Uhr

Hallo bigdiddy,

Mit der Wahl der Benutzung von Parametern machst du schon einiges richtig, jedoch du darfst nicht nur die SQL-Parameter definieren, sondern du musst sie auch mit Werten füllen.
Stell dir es wie einen Methodenaufruf vor. Dort definierst du Parameter, die du dann beim Aufruf übergeben musst. Daselbe ist auch hier, wenn auch andern.
Wie man diese Werte den Parametern über des SQL-Commands überbiebt siehst du wunderbar im Artikel [Artikelserie] SQL: Parameter von Befehlen unter dem Punkt Lösungsweg.

Gruß
Michael

15.01.2012 - 17:26 Uhr

Ich installier einfach visual Studio neu

Nein! Dies ist nicht das Problem. Es ist ein Layer 8 Problem.

Im Dialog steht "Name der Datenbankdatei". Dabei ist nicht der Name der Datei sondern der Pfadname gemeint. Also "C:...\Dateiname.sdf"

Was ich weiter oben meinte wäre das Szenario der Verbindung mit einem SQL-Server. Da du dies aber nicht hast, kannst du dies ignorieren.

Gruß,
Michael

15.01.2012 - 13:38 Uhr

Hallo Goramir,

es wird aber immer noch nicht automatisch die passende Klasse zur Raumnummer in das Label geschrieben.

Warum machst du ein SELECT * FROM klassetabelle? Ich denke du solltest dringendst die SQL Grundlagen lernen.
Siehe [Hinweis] Wie poste ich richtig? 1.1 und 1.1.1
Eine Select kann viel mehr als nur Daten holen. Wenn du die passende Klasse zur Raumnimmer benötigst kann man die SQL-Query mit einer WHERE Klausel erweitern.

SELECT * FROM Klassentabelle WHERE Raumnummer = 101

Und da du nur von Raumnummer und Klasse liest, ist * überflüssig (und generell ungewünscht, warum tut hier nicht zur Sache) und

SELECT Raumnummer, Klasse FROM Klassentabelle WHERE Raumnummer = 101

Dies soll eine Hilfestellung sein und ich rate dir nochmals: Lerne die Grundlagen. Kauf dir ein SQL-Buch oder lies dich im Internet im Thema ein!

Gruß
Michael

15.01.2012 - 12:49 Uhr

Hallo TheCode,

der SQL-Connection-String stimmt auch, denn anders sagt es der Fehler ja auch nicht.
Such mal im Web nach ERROR 40, dort findest du genug Lösungsvorschläge.
Das Problem löst du auf jeden Fall nicht im Programm, sofern der Name aufgelöst werden kann, sondern beim SQL-Server.

Je nach Konfiguration ist:
\\Datenbankserver\Instanzname
und
\\Datenbankserver
nicht dasselbe. Versuch mal explizit den Instanzname anzugeben (meist SQLServer, SQLExpress, ect.)

Edit:
Seh gerade dass du SQLCE verwendest. So einen Fehler kann ich mir dort nicht vorstellen. Entweder es gibt die Datei oder es gibt sie nicht.

Gruß
Michael

14.01.2012 - 16:38 Uhr

Aufgrund von Abt gesagtem, macht es deutlich warum ein IQueriable<Entity> essentiell ist. Denn dadurch ist man imstande (angenommen Entity ist eine Tabelle mit 50 Spalten) mit Select nur 2 Spalten davon zu holen, zu filtern evtl demensprechend gruppieren, bzw. noch zu sortieren. Dies ist mit einer ToList zwar auch möglich, jedoch habe ich dabei 48 Spalten zusätzlich den ausgefilterten Daten sinnlos geladen. Generell soll man den SQL-Server so viel wie möglich rechnen lassen.

14.01.2012 - 16:27 Uhr

@istata, doch dies geht ab .NET 4.0


return a => SqlFunctions.StingConvert((double)a.Nummer) + a.Bezeichnung) == suchwort

SqlFunctions.StringConvert

Meinst du nicht, dass IQueryable dazu verleitet irgendwo im Frontend noch Business-Logik zu implementieren?

Nein, verleiten nicht, aber eventuell ermöglichen.

Gruß
Michael

14.01.2012 - 16:14 Uhr

An sich dürfte die oben genannte Weise auch nicht funktionieren, denn man kann nicht ein .Select(m=>new ViewModel[...]) machen ohne vorher eine Materialisierung durchgeführt zu haben, da GetBestellungen() in diese Weise nicht materialisiert.

Was ich z.B. meine ist, dass du bestimmte String-Operationen nicht ausführen kannst

Z.b.? Contains, StartsWith... funktionieren.

14.01.2012 - 15:55 Uhr

Hallo itstata,

Warum gibst du IQueryable zurück und keine Liste?

M.E. ist dies auch die richtige vorhergehensweise, denn dann kann man diese gegebenfalls noch filtern. Ich gebe dir Recht, dass eine IQueriable bei ViewModels keinen Sinn macht, sondern nur bei Datenobjekten.
An sich wird dann die Query spätestens beim ersten foreach,ToList, Count...ect ausgeführt.

Gruß
Michael

13.01.2012 - 13:03 Uhr

Du musst im Server Explorer die Tabelle im TreeView öffnen, dann hast du zwei weitere Nodes: Columns und Indexes, dort kannst du sie erstellen.

Mit der Erweiterung: SQL Server Compact Toolbox, kannst du dir dann auch den Ausführungsplan für die SQL-Query anschauen und erkennen ob der Index nun auch verwendet wird.

13.01.2012 - 12:31 Uhr

Hallo Runnable,

es gibt auch die typsichere Variante nämlich Activator.CreateInstance<T>()
Dann muss gar nichts mehr gecastet werden.

Gruß
Michael

13.01.2012 - 12:24 Uhr

Nein ein Index ist nicht eine ausgelagerte Tabelle. Er ist so etwas wie ein Inhaltsverzeichnis, in dem du schneller suchen kannst. Sie es in etwa so:
Ohne Index müssen alle Reihen durchloffen werden und dann das Datum geprüft werden. Bei einem Index muss nur noch das Startdatum gesucht werden und dann alle darauffolgenden Daten nehmen, da die Daten aufgrund des Indexes bereits in der Index Tabelle sortiert vorliegen.

Sie es wie ein Telefonbuch, in dem du alle Personen einer Gemeinde auflistest. Dieses hat einen "Index" auf der Gemeinde. Dadurch kannst du schnell die anderen Gemeinden aus der Suche eliminieren, da du nur die Personen rausschreibst welche in die 5 Seiten der Gemeinde X fallen.
Wäre das Telefonbuch nicht nach Gemeinde sortiert, dann dürftest du zu jeder Person prüfen ob sie in der gesuchten Gemeinde wohnt oder nicht. Natürlich dauert dies länger, denn dann musst du das gesamte Telefonbuch durchchecken.

13.01.2012 - 11:24 Uhr

Versuch mal auf Timestamp einen Index zu erstellen. Jedoch befürchte ich, dass bei deiner SELECT * Abfrage der Index nicht benutzt wird. Ein weiteres Problem könnte die LIKE Bedingung durch Contains sein.

Besorg dir LinqPad, dann siehst du die abgegebene SQL-Query und kannst versuchen sie zu optimieren und mit der resultierenden Query die Effizienz des Indexes zu testen.
Dafür müsstest du im SQL Server Management Studio (funktioniert auch mit SQLCE) den Ausführungsplan ansehen.

13.01.2012 - 11:02 Uhr

Hallo SyLuS,

D:\Dropbox\Dropbox\Projekte\Movie Player\Movie Player\Form1.cs

Wirklich!?! Wäre ein SVN nicht angemessener?
Wohin machst du den BUILD? Auch nach Dropbox?

Gruß,
Michael

13.01.2012 - 10:31 Uhr

Ups, hab ich gerade übersehen.

Könntest du evtl mal die LINQ Abfrage posten, denn vielleicht lädst du unnötig Daten und arbeitest daran, anstatt die SQL-Abfrage bereits demensprechend zu präparieren.

13.01.2012 - 09:38 Uhr

Hallo sharpType,

Mit parsen meine ich Zeile für Zeile durchgehen und die Infos in Objekte schreiben und mit diesen dann arbeiten.

Dazu benötigt es nur ein Stichwort, nämlich: O/R-Mapper.
EF-Framework, nHibernate, ect...

Gruß
Michael

10.01.2012 - 22:45 Uhr

Also, die Parameter sind ints, keine longs

Stimmt!

Für die korrekte Signatur siehe bitte unter: pinvoke.net nach.

10.01.2012 - 22:38 Uhr

Hallo Bioaim,

die SendMessage hat IntPtr als Rückgabewert und nicht wie du schreibst: int.

Zitat von: msdn (pInvokeStackImbalance MDA)
Die verwaltete Signatur des Plattformaufrufs stimmt möglicherweise nicht mit der nicht verwalteten Signatur der aufgerufenen Methode überein.

Gruß
Michael

10.01.2012 - 09:20 Uhr

Hallo ravel,

an sich wäre es ja kein Problem dass deine ProviderUserKey ALLOW NULL hat, jedoch wenn diese Spalte nicht UNIQUE gemacht wurde, ist es nicht möglich einen FK darauf zu machen. Ich immer auf den PK der Tabelle, welcher auch Sicherstellt dass die Spalte UNIQUE ist. Ich habe es mir so angewöhnt, dass ich den PK für die Id benutze und den UNIQUE-Konstraint für Tabelleninhaltliche Eindeutigkeiten.

Gruß
Michael

09.01.2012 - 20:38 Uhr

Hallo schismatic,

du kannst while(true) mit while(!AbortThread) ersetzen, wobei AbortThread eine Eigenschaft ist, dann kannst du von ausserhab AbortThread = true setzen und beim nächsten Schleifendurchlauf verlässt er die Schleife. Dies wäre eine Möglichkeit den Thread ohne Thread.Abort zu beenden.
Seit .NET 4 sind weitere Technologien genau für diesen Zweck konzipiert worden:
Cancellation Token, für Hintergründe liese bitte evtl .NET 4 Cancellation Framework.

Resultat davon ist auch das beenden der Anwendung 😦

Ungefangene Fehler kann man auf Application-Ebene Fangen. Stichwort DispatcherUnhandledException Eventfür WPF bzw ThreadException Event für Windows Forms

Gruß
Michael

09.01.2012 - 20:24 Uhr

Hallo dibbi411,

willkommen im Forum,

leider ist dies unter Visual C# Express nicht möglich. Dazu musst du auf Professional und höher upgraden.
Ähnliches Thema welches vor kurzem diskutiert wurde findes du hier:
VS 2010: Ist die Premium-Version für die Entwicklung mit Datenbankzugriff notwendig?

Gruß
Michael

09.01.2012 - 11:58 Uhr

versucht er ganz unten 50 statt 49 zu laden.

Dies ist an sich kein Problem wenn du in LoadRange mit Skip und Take arbeitest.

Benutzt du die Liste auch mit DataTables, oder meinst du, dass das damit überhaupt geht? Ich hab nämlich ne Datenbank aus der ich die Daten beziehe und keine separate Klasse.

Nein ich benutze keine DataTable, benutze die Daten welche die LoadRange liefert direkt für die Anzeige.
Ich habs so ca so: (Benutze das EF, also führe indirekt SQL-Befehle aus)


public ICollectionView FilteredFooList
{
    get
    {
        if (_fooViewModelList == null)
            _fooViewModelList = new VirtualList<FooViewModel>(this, 50, 10, SynchronizationContext.Current);
        return _fooViewModelList ;
    }
}

public IList<FooViewModel> LoadRange(int startIndex, int count, SortDescriptionCollection sortDescriptions, out int overallCount)
{
    return someQueriableList.OrderByDescending(f =>[...]).Skip(startIndex).Take(count).ToList().Select(f => [...]).ToList();
}

Genauso kann Plain-SQL abgesetzt werden. Aber ich denke nicht dass die VirtualList für DataTables gedacht ist, sie ist meines Erachtens direkt für die Anzeige da und für dies verwende ich sie auch.
Gebunden wird an die FilteredFooList.

07.01.2012 - 13:49 Uhr

Ist das die DefaultPageSize bzw. die pageSize im VirtualList-Konstruktor?

Genau,
Anbei meine modifizierte Version von VirtualList bei welcher du die InitialSize einstellen kannst.

Probleme mit Deadlocks habe auch gehabt. Jedoch lässt sich dies mit einer kleinen Änderung in QueuedBackgroundWorker.OnStateChanged() lösen. Nämlich wie folgt:
Ändere _synchronizationContext.Send(...) in _synchronizationContext.Post(...)

Gruß
Michael

05.01.2012 - 22:17 Uhr

Mit meinem Codebeispiel wollte ich verdeutlichen dass deine Property nicht korrekt gesetzt werden kann. D.h. egal welchen Wert du der Property gibst, sie wird dir nie diesen zurückgeben.

Evtl wäre auch folgende Möglichkeit:

private int DoneUpdater
{
    get{ return done_updater; }
    set
    {
        done_update = value;
        NotifyPropertyChanged("Done");
    }
}

Welches vielleicht eine Möglichkeit darstellen würde sinnhaft eine Private Property zu implementieren: Private Properties vs. Private Fields

05.01.2012 - 21:46 Uhr

Ähh...

die Property sollte so programmiet werden:


public string Done
{
    get
    {
        return this.done;
    }
    set
    {
        this.done = value;
        this.NotifyPropertyChanged("Done");
    }
}

05.01.2012 - 21:45 Uhr

Hallo Tobus,

Das Problem ist sofort gelöst:
NotifyPropertyChanged("Done")

In der Klasse Send befindet sich eine Schleife, die Zählvariable möchte ich nun an den Textblock übergeben.

Bitte beachte bei sehr schnellen GUI-Aktualisierungen immer: [FAQ] Warum blockiert mein GUI?

Gruß
Michael

05.01.2012 - 16:01 Uhr

Hallo RobiWanKenobi,

kann dir zwar nicht direkt weiterhelfen, aber oft treten solche unerklärlichen Fehler auf wenn von einem x64-Prozess auf eine x86-Assembly zugegriffen wird.

Teste mal ob das Programm in x86, x64 oder AnyCpu gestartet wurde.
Letzere Einstellung wird dann auf einem x64 System als x64 Prozess gestartet.

Gruß
Michael

05.01.2012 - 14:06 Uhr

Wieso klappt denn nicht einfach

Per Default werden Ressource aus der Einstiegs-Assembly geladen. Diese erhälst du mit Assembly.GetEntryAssembly. Wenn du Ressourcen aus einer anderen als der Einstiegs-Assembly referenzieren willst musst du die Assembly-Referenz in der URI mit angeben.

Nehmen wir an du hast 2 Projekte in deiner Anwendung
Project1
Project2

Dann wäre Project1 bzw Project2 (wenn nicht anderweitig umgestellt) der Assembly Name.
Project1 wurde als Startprojekt gewählt, jedoch befinden sich sämtliche XAMLs, sei es Windows, UserControls, Resources in Project2. Dann muss die Assembly bei den URLs mitangegeben werden. In Project1 und für Resourcen aus Project1 ist dies nicht zwingend nötig.

Gruß
Michael

05.01.2012 - 11:56 Uhr

Hallo torberry,

du wirst den Pfad zur MainWindowResource falsch eingetragen haben, oder die BuildAction nicht auf Page.
Versuch es mal itentisch der Unteren zu machen nämlich:


Source="/Assemblyname;component/Pfad/Datei.xaml"

Gruß
Michael

04.01.2012 - 14:47 Uhr

muss dauernd neu geladen werden

Das hängt davon ab wie viel du beim Erstellen der VirtualList eingestellt hast.

Außerdem finde ich die Ladeanimation ziemlich störend, wenn die während dem Scrollen erscheint

Du kannst den Code ja umschreiben dass er deinen Wünschen entpricht!

Gruß
Michael

04.01.2012 - 14:47 Uhr

Hallo Kongkook,

der Unterschied von beiden ist:

Struckt werden im Stack gespeichert Klassen jedoch im Heap.
Der Stack ist schneller als der Heap. Auch die Speicherverwaltung durch den GC funktioniert anders.
Struckts können nicht vererbt werden. Sie können jedoch Interfaces implementieren.

Beachte aber folgendes:


Digit d = new Digit(5);
AddOne(d);
Debug.WriteLine(d.val);

public void AddOne(Digit d)
{
    d.val +=1;
    Debug.WriteLine(d.val);
}

public [struct | class] Digit
{
    public Digit(double d) { val = d; }
    public double val;
}

Ob Digit nun ein Struckt oder eine Klasse ist, wird das Ergebnis (6,5) respektive (6,6) sein.

Gruß
Michael

03.01.2012 - 21:45 Uhr

Hallo Voidcore,

ok ich könnte sie einfach mit übergeben

MeineKlasse sollte nicht wissen dass es die GUI-Klasse gibt.

oll meine klasse ein event auslösn das sie fertig ist und daraufhin die form die daten aus der Klasse abholen?

Die ist die übliche Vorhergehensweise, welche sich aber mit einem BackgroundWorker besser erledigen lässt, u.a. dadurch dass du direkt nach Beendigung der Arbeit benachrichtigt wirst und auch dadurch, dass du dich dann bei Beenden des BackgroundWorkers wiederum im GUI-Thread befindest und auf .Invoke verzichten kannst.

meine Klasse einfach die Daten in ein DataTable schreiben welches nicht der GUI gehört und der GUI sagen sie soll ihre bindings darauf machen?

Durch ähnliches vorgehen wie im vorhergehenden Paragraph beschrieben.

Gruß
Michael

03.01.2012 - 21:39 Uhr

Hallo #coder#,

Um diese löschen zu können muss der jeweilige Service existieren.

erstelle eine Minimaldatenbank, damit du imstande bist zu Testen. D.h. füge all jene Daten in die Datenbank vor dem Test ein, belasse die, teste und räum dann auf, damit die Minimaldatenbank vor und nach dem Test dieselbe bleibt.
Mach dir evtl ein Script welche bei Bedarf die Datenbank neu erstellt und die Daten füllt. Dies lässt sich wunderbar mit einem Datenbank-Pojekt machen. Kort kann man sich bei Bedarf vor dem Unit Test die Datenbank mit dem Datenbank-Projekt neu erstellen lassen, und ein Post-Deployment Skript durchlaufen lassen, welches alle INSERT-Statements beinhaltet.

Gruß
Michael

03.01.2012 - 17:38 Uhr

Hallo c#+"beginner",

die Methode addRow ist im Kontext von button1_Click nicht sichtbar, da sich die Methode ziemlich sicher in einer anderen Klasse befindet.
Leider sind dies Grundlagen welche wir in [Hinweis] Wie poste ich richtig? 1.1 und 1.1.1 voraussetzen. Bei Compilerfehler siehe bitte: [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen).

Gruß
Michael

02.01.2012 - 23:13 Uhr

Hallo WinstonSmith,

willkommen im Forum

du hast beide Möglichkeiten angesprochen. Sowie das eine so funktioniert, so funktioniert auch das Andere. Jedoch bei Enums musst du evtl. über ein CustomAttribut gehen, welche du dann durch zuhilfenahme von Reflections ausliest

Jedoch spricht komplett nichts dagengen die Steuerzeichen als statische Felder zu deklarieren.

Gruß
Michael

02.01.2012 - 12:11 Uhr

Hallo TheCode,

nein, dies funktioniert nicht und hat auch keinen Sinn.
Von einer statische Klasse kann kein Objekt erstellt werden. Und was nicht erstellt werden kann, kann auch nirgendwohin übergeben werden.
Generell kann man auf eine statische Klasse sowieso von überall drauf zugreifen.

Der breitgefächerte Einsatz sollte desshalb auch minimiert werden, da das Programm unnütz durch komplizierte Abhängigkeiten komlex wird.

Gruß
Michael

02.01.2012 - 09:53 Uhr

Das die Event-Triggernde Klasse mit der Bearbeitung wartet bis das Event "abgearbeitet" ist, war mir neu.

Ein Triggen eines Events ich eigentlich nichts anderes als ein Aufrufen einer Methode. Dadurch, dass die methodenaufrufende Methode auch nicht weiterarbeitet solange die aufgerufene Methode nicht abgearbeitet ist, dürfte es etwas leichter verständlich sein warum die Methode welche das Event feuert nicht weiterverarbeitet wird.
Wie man dieser Tatsache entgegenwirkt wurde von meinen Vorrednern bereits vermittelt.

Gruß,
Michael

28.12.2011 - 22:37 Uhr

Kann es sein dass der SQL Server Configuration Manager unter Programme seperat unter SQL Server 2008 und SQL Server 2008 R2 gelistet ist?
Dann könnte sein dass die Console bereits nur jene Server listet für welche sie zuständig ist, ansonsten müsste unter SQL Server Services in Klammer der SQL Server Instanz Name stehen.

Hab leider zuhause nicht den Server installiert, damit ich es mit 100%er Sicherheit sagen könnte.