Laden...
Avatar #jVxXe7MDBPAimxdX3em3.jpg
Peter Bucher myCSharp.de - Experte
Software Entwickler Zentralschweiz Dabei seit 17.03.2005 5.941 Beiträge
Benutzerbeschreibung
Mein Name ist Peter Bucher, seit langer Zeit beschäftige ich mich schon mit Webtechnologien. Angefangen habe ich mit Html und Classic ASP. Jetzt arbeite ich vorallem mit .NET-Technologien.

Forenbeiträge von Peter Bucher Ingesamt 5.941 Beiträge

10.11.2009 - 17:29 Uhr

Salute Norbert

Wenn du das jetzt mit dieser Komponente umsetzen möchtest, könnte das bspw. so gehen:


public class DelegateSearchOption : ISearchOption
{
    private readonly Func<FileInfo, bool> _filter;

    public DelegateSearchOption(Func<FileInfo, bool> filter)
    {
        this._filter = filter;
    }

    public bool Match(FileInfo fileInfo)
    {
        return this._filter();
    }
}

Und die Benutzung bspw.:


XYZ.Options.Add(new DelegateSearchOption(f => File.GetExtension(f.Name).Equals("gif")));

// [...]

Gruss Peter

10.11.2009 - 17:14 Uhr

Salute Steini

An der Replace-Methode liegt es nicht, sondern daran wie du sie verwendest.

Schau dir mal die Signatur der Methode an
und wirf einen Blick darauf:

Gruss Peter

10.11.2009 - 14:50 Uhr

Salute schuppsl

Dein verlinkter Artikel zeigt, wie man eigene Events bei CustomControls definieren kann, hat aber direkt nichts mit deinem Problem zu tun und ist so auch keine Lösung.

Gruss Peter

10.11.2009 - 14:46 Uhr

Hallo schuppsl

Nein, keine Chance.
Am besten einfach mal die Links durchlesen, die ich dir gepostet habe.
Eine einfache Lösung wäre, X Controls immer zu erstellen und dann auf sicht- unsichtbar schalten.

Ansonsten wirds ziemlich knifflig, das ist so.

Gruss Peter

10.11.2009 - 10:42 Uhr

Hallo haargel

Hört sich einfach an, ist es aber nicht 😉.
Das ist unmöglich, so wie du es möchtest.

Crossposts werden auf beiden Foren nicht geduldet, der Vollständigkeitshalber die den zweiten Thread auf ASP.NET Zone:

Gruss Peter

10.11.2009 - 10:35 Uhr

Hallo ZeroQool

Das Problem ist mir nicht bekannt.
Wie und wo rufst du Server.Transfer() genau auf?

Gruss Peter

10.11.2009 - 10:33 Uhr

Salute Phil

Du solltest Events so früh wie möglicht (OnInit) und spätestens in OnLoad registrieren. Das Control braucht auch zwingend eine ID und muss zum gleichen Zeitpunkt zur Control-Hierarchie hinzugefügt werden, sonst funktionierts nicht.

Zum Thema dynamische Controls, kannst du dich hier mal einlesen:

Gruss Peter

10.11.2009 - 10:24 Uhr

Salute zusammen

Die aufgezählten "Nachteile" sehe ich eher als Fakten und nicht als Nachteile.
Die Laufzeitfehler bekommt man schon zur Entwicklungszeit zu sehen, bei der Produktion bzw. dem Deployment weiss man ja, das es dann funktioniert.

m.E. gibt es keine Nachteile bei der Verwendung von Dependency Injection, nur Vorteile.

Vorteile sind unter anderem auch:

  • Automatisch lockere Koppelung
  • Einhaltung von Seperation of concerns ist einfacher
  • Komplexität von Klassen wird automatisch verringert

Grus Peter

10.11.2009 - 10:20 Uhr

Hallo Martin

Scott Hanselman hat eine Liste aufbereitet:

Ich habe gute Erfahrungen mit autofac gemacht.
Aber Ninject und StructureMap sehen soweit auch ganz gut aus.

Gruss Peter

06.11.2009 - 16:26 Uhr

Hallo Cmorpheus

Lies dich mal in die Grundlagen von AJAX ein, dann verstehst du auch, das es anders nicht geht.
Silverlight oder Flash ist dann wieder was anderes, dort läuft alles nur auf dem Client, aber man kann dort natürlich Daten vom Server anfordern.

Das Prinzip wäre dort dann das gleiche, aber ich denke das ist nicht das was du willst, denn einfacher ist es nicht 😉.

Gruss Peter

05.11.2009 - 14:43 Uhr

Salute Lion1984

Das geht m.E. nur, wenn du die zu schützenden Dinge in eigene Sections auslagerst, bzw. eigene AppSettings und dir den Connectionstring dann zusammenbaust.

Oder so wie du es im Moment hast, allerdings sollte das auch ohne Reflection gehen. So wie es im Artikel per Code gezeigt wurde.

Gruss Peter

05.11.2009 - 14:21 Uhr

Hallo Lion1984

Kannst du doch nicht. Entweder ist er verschlüsselt und muss beim Ändern auch wieder verschlüsselt werden, oder er ist nicht verschlüsselt und alles bleibt beim alten.

Oder missverstehe ich dich da jetzt total?

Gruss Peter

05.11.2009 - 14:04 Uhr

Hallo math55

Wie lautet den der "tempPath" und wie sieht deine Ordnerstruktur, die Anwendungkonfiguration und deine Berechtigungen aus?

Gruss Peter

05.11.2009 - 14:03 Uhr

Hallo talla

Von der Zeichenanzahl wäre es mit der Nutzung von StringComparison jedoch nicht kürzer, aber eleganter, da hast du Recht 😃.

Gruss Peter

05.11.2009 - 14:01 Uhr

Hallo Lion1984

Im ersten Link (4guysfromrolla) ist eine Lösung ohne und mit Code für genau deine Anforderung.

Gruss Peter

05.11.2009 - 13:19 Uhr

Hallo Lion1884

Das gibt es schon eingebaut, dafür musst du keine Handstände mit Reflection machen, auch wenn du es per Code machen willst.

Gruss Peter

05.11.2009 - 13:14 Uhr

Hallo zusammen

Noch kürzer:


var pdfFiles = File.ReadAllLines("C:/PfadZurDatei").Where(l => l.ToLower().EndsWith(".pdf"));
File.WriteAllLines("C:/Zieldatei",pdfFiles.ToArray()); 

Gruss Peter

05.11.2009 - 12:17 Uhr

Salute #coder#

Im einfachsten Fall so:

Das kannst du ausbauen, wie du willst.
Die Lösungen in deinem Link finde ich ehrlich gesagt nicht so prikelnd, da gibt es zuviele Redundanzen und das geht auch sauber ohne SessionState.

Gruss Peter

05.11.2009 - 11:55 Uhr

Hallo ZeroQool

Wieso verwendest du überhaupt Threading?
Wenn der Aufruf zu lange geht, würde ich über Caching nachdenken.

Ausserdem greifst du auf ein GridView zu, das erstens in einem anderen Thread läuft (Ohne Synchronisierung) und zweitens evt. gar nicht mehr besteht.

Wie gesagt, schau dir mal Caching oder aber asynchrone Handler / Pages an.

Gruss Peter

05.11.2009 - 11:34 Uhr

Hallo ZeroQool

Zeig doch mal ein bisschen Code.
Was meint der Debugger dazu?

Gruss Peter

05.11.2009 - 11:02 Uhr

Salute MoreThanWords

Server.Transfer() wäre eine Alternative und stellt ein serverseitiges "Redirect" dar.
Du musst aber beachten, das clientseitig die Url nicht aktualisiert wird, d.h. bei einem F5 clientseitig, wird wieder die vorherige Seite geladen.

Gruss Peter

05.11.2009 - 10:59 Uhr

Salute Phil_B

Die ObjectDataSource erstellt eine neue Instanz deines angegebenen Typs, wenn das Page oder ein Control ist, wird dort nichts initialisiert, Session / etc... ist also null.

Funktionieren würde es, wenn du statische Methoden nimmst.
Aber wie schon geschrieben, nimmst du am besten eine dedizierte Klasse dafür, die nur das macht und keine zusätzlichen Abhängigkeiten hat.

Gruss Peter

04.11.2009 - 15:51 Uhr

Hallo thepixel

Eine Erweiterungsmethode meinst du?
Und von welchem Typ ist "ucsession"?

Wie ist das Ding implementiert?
Debugger schon mal angeworfen und das Problem damit nachvollzogen?

Gruss Peter

04.11.2009 - 15:42 Uhr

Hallo thepixel

Und was ist "ucsession", ein Integer der die Rekursionstiefe angibt?
Bitte bessere Namen wählen, mich hat das verwirrt.

Ich persönlich habe diese Überladung nie benutzt, da man so eine Zahl drin hat die konstant drin steht und jedes Mal geändert werden muss.

Als Best Practice habe ich mir angewöhnt, entweder zu verketten, root.Find().Find()...... oder komplett rekursiv durchzugehen.

Gruss Peter

04.11.2009 - 15:33 Uhr

Hoi thepixel

<Control>.FindControl(<Id>) sucht nur innerhalb des Controls und geht nicht weiter in den Baum hinein.
Du musst dann entweder mehrere FindControl-Aufrufe miteinander verketten oder auf den Root eine rekursive bzw. iterative Suche starten.

Beispiele einer solchen Implementierung findest du auf meinem Blog:

Gruss Peter

04.11.2009 - 15:31 Uhr

Salute Phil_B

Naja, aber mal eine andere Frage: Wieso benutzt du da überhaupt eine ObjectDataSource?
Die erscheint mir relativ sinnlos, wenn du sowieso nur auf die Session delegierst und dort auch eine Referenz auf System.Web.dll brauchst.

Wieso nicht einfach direkt Laden und Databinding machen?

Gruss Peter

04.11.2009 - 15:11 Uhr

Salute thepixel

Probiere mal folgenden Code:


document.getElementById('<%= <IDDeinesUserControls>.FindControl("tbSessionStartSateTime") %>').value = pStartDateTime;

Klappt dennoch nicht... bekomme aber weder einen Compiler noch einen Javascript Fehler?!

Einen Javascript Fehler müsste kommen, einen Kompilerfehler kann mit deinem Code so gar nicht ausgelöst werden.

Gruss Peter

04.11.2009 - 15:02 Uhr

Hallo Ifoko

Klar geht das dann, aber das ist eigentlich nicht das Problem, wenn ich es richtig verstanden habe.

Gruss Peter

04.11.2009 - 14:51 Uhr

Salute Phil_B

Du solltest eine dedizierte Klasse als Typ bei der ObjectDataSource angeben.
Also nicht das UserControl, sondern bspw. eine PersonManagementDataSource Klasse.

Gruss Peter

04.11.2009 - 14:48 Uhr

Hallo thepixel

Wo steht <%= Control.ClientID %> drin?
Wenn das im ASPX-Teil der Seite steht, müsstest du natürlich FindControl benutzen, um an das Control im UserControl zu kommen.

Skripttags werden auch zur Kompilezeit ausgewertet und ergeben so die Fehlermeldungen.

Gruss Peter

04.11.2009 - 14:33 Uhr

Salute thepixel

Evt. mal das Projekt cleanen und den Ordner "Temporary ASP.NET Files" leeren, falls der Name eigentlich stimmen würde.
Und schau zusätzlich noch hier rein:

Gruss Peter

04.11.2009 - 14:08 Uhr

Hallo thepixel

äh.... ja ok alles klar und was ist daran nun die Neuigkeit? 😉

Öhm, das du "Control" als Namen verwendest und das so natürlich nicht gefunden wird? 😉
Oder bin ich jetzt voll auf dem falschen Dampfer?

Gruss Peter

04.11.2009 - 12:55 Uhr

Hallo #coder#

Entweder nimmst du das ListView und das DataPager Control (System.Web.Extensions.dll / ASP.NET 3.5):

Oder du nutzt die PagedDataSource, die AFAIK in ASP.NET 2.0 schon drin sein sollte:

Gruss Peter

04.11.2009 - 11:57 Uhr

Hallo thepixel

Dann musst du es auch mit diesem Namen ansprechen.

Gruss Peter

04.11.2009 - 11:06 Uhr

Hallo thepixel

Wie heisst denn dein Control?

Gruss Peter

04.11.2009 - 11:02 Uhr

Hallo schuppsl

Ich habs doch oben schon ausgeschrieben 😉.
Schau mal hier, und such einfach danach:

Gruss Peter

04.11.2009 - 10:20 Uhr

Hallo schuppsl

Du musst auch ASP.NET spezifisch suchen, dann findest du schon eine Lösung:

Abgesehen davon, würde ich dir sowieso raten, das Web Application Project (WAP) zu benutzen, und nicht wie bisher das Website-Project.
Dort hättest du diese Probleme nicht mehr und viele Vorteile.

Gruss Peter

03.11.2009 - 17:39 Uhr

Salute KroaX

Einfach einen generischen Parameter für die Methode nehmen,
der Typ sollte dann automatisch erkannt werden.


public void AddUnit<T>(Unit<T> unit);

Allerdings musst du dann intern wissen was T ist,
da ich dein komplettes Szenario nicht kenne, kann ich nur den Rat geben,
evt. auch noch ein untypisiertes Interface hinzuzufügen, damit
du eben nicht immer T wissen muss, wie bspw. bei IEnumerable / IEnumerable<T>.

Gruss Peter

03.11.2009 - 13:39 Uhr

Hallo Dawamaha

Wenn es serialisierbar ist, bspw. mit dem BinarySerializer.

Gruss Peter

02.11.2009 - 12:21 Uhr

Hallo zusammen

Am Mittwoch dem 11.11.2009 um 19:00 trifft sich der .NET Stammtisch Konstanz-Kreuzlingen wieder in der FH Konstanz, Brauneggerstrasse 55, 78462 Konstanz; Raum F023; Gebäude F.

Infos zur Anfahrt: http://dotnetkk.de/Content/Show/Anfahrt

Das achte .NET-Stammtisch Treffen findet mit Gregor Biswanger und folgendem Thema statt:

TDD / BDD

Ein neues Software Projekt beginnt. Das Design der Architektur steht auch schon. Nun können die hoch motivierten Entwickler starten, ihre Fachbereiche mit Code zu füllen. Doch kommt es schon nach kurzer Zeit zu großen Problemen! Die Anwendung macht an unterschiedlichen Stellen alles andere als das, was gefordert wurde. Keiner kann am Ende sagen woran das liegt, jeder versucht seine Position zu verteidigen. Ist das Projekt nun zum Scheitern verurteilt? Wird nun der Fertigstellungstermin noch weiter nach hinten geschoben, der sowieso schon an der Schmerzgrenze lag?! Nein, durch Test Driven Development kann dieses Problem verringert werden. Damit ist nicht die Fehleranfälligkeit gemeint, sondern das rechtzeitige Erkennen, an welcher Stelle es gerade nicht funktioniert wie es soll.

Einführung in Test Driven Development
Was ist überhaupt TDD? Wie kann ich TDD für neue oder bestehende Projekte richtig nutzen? Welche Arten von Testmöglichkeiten für heutige Softwareprojekte geboten wird, soll auch verdeutlicht werden. Dabei wird einmal die Theorie und anschließend die Praxis genauestens durchleuchtet. Dementsprechend werden dabei folgende Punkte besprochen: Unit-Tests, Integrations-Tests, Akzeptanz-Tests und Mocking.

Theorie & Praxis: Code-Coverage
Sehr oft wird beim Schreiben von Codes genau an denn Tests geschrieben, die niemals zu Problemen eintreffen werden. Somit passieren Fehler, die bis heute im Unbekannten weiter leben. Damit diese Horrorvisionen nicht Wirklichkeit wird, spielt die Testabdeckung eine wichtige Rolle!

Einführung in Behavior Driven Development
Durch eine Erweiterung von TDD durch Behavior-Driven Development (kurz BDD) werden Tests strukturierter nach den Anforderungen aufgebaut. Hier wird unverkennbar der Kern von TDD für qualitative Softwareprojekte genutzt, und durch die Erweiterung von BDD die funktionalen Anforderungen in den Mittelpunkt gestellt.

Über den Sprecher
Gregor Biswanger ist Consultant bei der Firma TRIA IT-solutions in München. Seine Schwerpunkte liegen im Bereich der .NET-Architektur und agilen Prozessen.
Biswanger ist auch freier Autor, Speaker und Microsoft CLIPler der INdotNET (Ingolstädter .NET Developers Group).

Verlosung: Fuzzing-Tests für .NET mit CrashTest.Net
CrashTest.Net ist ein Testwerkzeug, das explizit auf .NET-Projekte zugeschnitten ist und eine bisher für das .NET-Umfeld ungenutzte Testmethode verwendet. Bei der Testmethode handelt es sich um Fuzzing. Es hilft Entwicklern ihre Software zu optimieren und zeigt ihnen unbedachte Fälle, die später beim Endnutzer fatale Folgen haben können. Ohne notwendige Einstellungen führt es vollautomatisch eine sehr große Anzahl von Tests an ihrer .NET-Assembly durch. Es versucht alle Methoden mit sehr vielen Parametern auszuführen. Und all das, ohne vorher komplizierte Einstellungen zu vorzunehmen oder im Quellcode irgendwelchen Test-Code zu implementieren. Fuzzing birgt ein sehr großes Potential. Dieses Potential wird der .NET-Welt mit CrashTest.Net einen entscheidenden Schritt näher gebracht.

CrashTest.Net unterstützt uns freundlicherweise mit 1 Lizenz zur Verlosung

Anschließend wird wie immer beim gemütlichen Bierchen weiter diskutiert.
Mehr Infos gibts auf der der Stammtisch-Seite.

Gruss Peter

02.11.2009 - 12:07 Uhr

Hallo math55

Schau dazu hier:

Gruss Peter

02.11.2009 - 11:35 Uhr

Hallo math55

Was ist deine Datenquelle?
Eine DataTable?

Gruss Peter

02.11.2009 - 11:13 Uhr

Hallo math55

Wieso sortierst du nicht schon die Datenquelle, das wäre wesentlich einfacher als da gross was drum rum zu bauen.

Gruss Peter

30.10.2009 - 14:12 Uhr

Hallo #coder#

Ja, über AJAX. Das Feature nennt sich: Auto Completion / Suggest.

Gruss Peter

30.10.2009 - 13:24 Uhr

Hallo gfoidl

Macht nicht wirklich Sinn, das ist ziemliche Compiler Magic 😕.

LINQ:


var result = from data in Enumerable.Range(0, 10)
             let variable = data.ToString()
             select variable;

result.ToList().ForEach(Console.WriteLine);

Generiert:


        Enumerable.Range(0, 10).Select(delegate (int data) {
            return new { data = data, variable = data.ToString() };
        }).Select(delegate (<>f__AnonymousType0<int, string> <>h__TransparentIdentifier0) {
            return <>h__TransparentIdentifier0.variable;
        }).ToList<string>().ForEach(new Action<string>(Console.WriteLine));

Und wieso schreibst du dein Beispiel von oben nicht so?


float maxLength = fooList
                           .Select(f => g.MeasureString(f.Name, font).Width)
                           .Max();

😃

Gruss Peter

30.10.2009 - 12:49 Uhr

Hallo sth_Weird

Du hast die Lösung doch schon fast...


Foo foo = fooList.Where(f => f.Name.Length == maxLenght).SingleOrDefault();

Oder halt die Liste holen (Nicht SingleOrDefault) und
nach dem Messen siehst du dann, welche Buchstaben der längsten Strings am meisten Platz benötigen. Das kann ja auch variieren.

Gruss Peter

30.10.2009 - 12:46 Uhr

Hallo meisteralex

Sagt mir bitte nicht, dass immer der Default-Browser gestartet wird.

Ist aber so, wenn du nicht änderst 😉

Gruss Peter

29.10.2009 - 13:45 Uhr

Hallo sth_Weird

Meine Aussage sollte eigentlich sein:
Ja, ich habe Regions früher auch benutzt und geschätzt, aber mit Cleancode braucht man diese schlicht und ergreifend nicht mehr.

Partial Classes werden auch viel missverstanden und missbraucht, diese sind "eigentlich" nur dazu da, um autogenerierten Code von eigenen Änderungen physikalisch zu trennen.

Gruss Peter

[EDIT=herbivore]Nehmt das mal als Schlusswort. Man kann es mit offtopic auch übertreiben.[/EDIT]