Laden...
Avatar #avatar-2533.jpg
schaedld myCSharp.de - Member
.NET Web Developer Schweiz Dabei seit 05.04.2006 1.433 Beiträge
Benutzerbeschreibung

Forenbeiträge von schaedld Ingesamt 1.433 Beiträge

20.04.2011 - 16:06 Uhr

Wenn Du das Feld Property impelemntierst, kannst Du mit INotifyPropertyChanged bei jeder Änderung darauf reagieren.

25.03.2011 - 10:45 Uhr

Google liefert mit dem suchbegriff xsd to sql foglende Ergebnisse.

25.03.2011 - 10:41 Uhr

Ich will mich da jetzt nicht in die Nesseln setzen, aber für mich wären solche Sachen die Du da machen möchtest in der VIEW oben.

Das MVVM Pattern sieht ja vor die UI mit dem Rest mittels Vermittler (ViewModel) zusammen zubringen ohne dass diese von einander was wissen.

Canvas etc. sehe ich nicht als Bestandteil, dass man im MVVM verwenden sollte hierfür müsstest Du dir ja entsprechende UserControls machen und auch die Styles dementsprechend dort oder in einem ResourceDictionary definieren.

16.03.2011 - 14:01 Uhr

@MarsStein
Die kenne ich leider nicht X(

16.03.2011 - 13:47 Uhr

TableRowEventArgs dieses Event ist gemäss Suche auf Google nur im Infragistics Grid vorhanden. Ich beziehe mich auf das Standard GridView von .NET.

16.03.2011 - 13:23 Uhr

Also mein vorgeschlagener Ansatz hat bis jetzt immer funktioniert 😉

16.03.2011 - 11:21 Uhr

Wenn ich ein Control suchen will, dass in einem Template vorhanden ist, dann mache ich dass im OnRowDataBound. Dort kannst Du mit


foreach(var cell in e.row.cells){
    Control myControl = (Control)cell.FindControl("MyControl");
}

Danach suchen.

Wichtig ist, dass Du am Anfang überprüfst ob die Row eine Header oder eine DataRow ist. Wenn das Control in keiner Header-Row vorhanden ist, dann hast Du die NULL-Reference Exception darum prüfe ich immer so:


if (e.Row.RowType == DataControlRowType.DataRow){
                foreach (DataControlFieldCell cell in e.Row.Cells.OfType<DataControlFieldCell>().ToList())
                {
                    if (cell.Controls.OfType<CheckBox>().FirstOrDefault<CheckBox>() != null && cell.Controls.OfType<CheckBox>().FirstOrDefault<CheckBox>().ID.Contains("SmartCardExpress"))
                    {
                        smartcardexpress = cell.Controls.OfType<CheckBox>().FirstOrDefault<CheckBox>();
                    }

                    if (cell.Controls.OfType<CheckBox>().FirstOrDefault<CheckBox>() != null && cell.Controls.OfType<CheckBox>().FirstOrDefault<CheckBox>().ID.Contains("PermanentService"))
                    {
                        permanentservice = cell.Controls.OfType<CheckBox>().FirstOrDefault<CheckBox>();                        
                    }
                }
}

So funktionierts bei mir eigentlich immer. Und wenn Du die DropDownListBox gefunden hast, kannst Du dort wiederum

MyDropDonwListBox.Controls.OfType<TreeView>()

zum suchen verwenden.

15.03.2011 - 06:17 Uhr

Das sieht so aus wie MarsStein vermutet. Es sind wohl zuwenige Einträge vorhanden als dass die Button's aktiviert werden. Vielleicht noch schnell hier (ListView Web Server Control Overview) vergleichen, soweit ich gesehen habe, wird dort Schritt-für-Schritt eine Einführung ins ListView gegeben.

Das DataPaging ist etwa in der Mitte der Seite erklärt.

25.02.2011 - 10:20 Uhr

Vielleicht hilft Dir Page.Request.Params weiter, was in diesem Artikel (Understanding the JavaScript __doPostBack Function) erklärt wird.

24.02.2011 - 15:31 Uhr

UpdatePanels können auch Controls erhalten und das würde dann so aussehen:


UpdatePanel childPanel = new ChildPanel();
MyParentPanel.Controls.Add(childPanel);

Soweit ich dann aber weiss muss der Update Mode auf Conditional stehen, wenn Aktionen vom Codebehind her kommen.

Gibt es eine Möglichkeit das eleganter zu Lösen um unnötige Ladezeit zu verkürzen und den Traffic zum Datenbankserver zu minimieren?

Gibt es, aber Performananz und Seitensource-Quelltext werden mit MS-Ajax immer grösser. Alternativ würde ich Dir raten JQuery und JQueryTemplates anzuschauen.

24.02.2011 - 10:18 Uhr

Wenn Du sowas wie Page_Load() etc nutzen willst, bist Du mit MVC nicht richtig bedient.

Würde ich jetzt auch meinen. Du hast immer nur den Controller /View /Model zur Verfügung und machst alle Logik im Controller und die "Controls" werden mithilfe des InlineCode in der ASPX mit dem HtmlHelper generiert /erstellt.

24.02.2011 - 08:13 Uhr

Wenn Du ein Grid in MVC brauchen willst, musst Du mit MVC 3 arbeiten. Dort haben sie die neue Razor-Engine (glaub ich sie heisst so) implementiert, dass per Templating ein Grid herstellt. Hier ein Einstiegspunkt.

24.02.2011 - 08:11 Uhr

Ich würde mal behaupten dass dass beim Trim das String-Objekt noch gar nicht vorhanden ist. Darum würde ich vorher mit string.IsNullOrEmpty überprüfen ob überhaupt was daher kommt.

24.02.2011 - 08:08 Uhr

Vielleicht findest Du hier noch ein paar Inputs oder hier.

20.12.2010 - 12:42 Uhr

Vielleicht hilft Dir das hier ein wenig weiter.

Ich selber vewende zu 80% immer $find, da ich auch schon an Dein Problem gestossen bin. Mittlerweile verwende ich JQuery zum finden der Controls.

08.11.2010 - 15:38 Uhr

.FetchSize, dort kannst Du angeben wieviele Treffer zurück kommen sollen. sowei ich weiss kannst Du mit Hibernate Query Language eingreifen.

02.11.2010 - 10:50 Uhr

Dann frage ich mich aber welche Existenzberechtigung Silverlight noch hat? Müsste man sich aber auch bei Flash fragen...

02.11.2010 - 10:21 Uhr

Dacht ich's mir doch 😃 Freu, Silverlight bleibt auch weiter bestehen 😃

02.11.2010 - 09:21 Uhr

Bis der Standard HTML5 etabliert und vollständig bei den Browserherstellern implementiert ist gehen noch Jahre vorbei, dann reden wir ob Silverlight 8 oder 9 noch eine Rolle neben Flash und HTML5 spielt...

13.09.2010 - 14:56 Uhr

Der Overhead entsteht aber hauptsächlich in Richtung Server -> Client beim de rAntwort, und nicht im Request, da für den ScriptManager und die UpdatePanels jede Mange Script-Code generiert werden muss. Und genau das ist ja das Problem (ich dachte ich hät's erwähnt 😉 )

13.09.2010 - 09:32 Uhr

Auch die UpdatePanels generieren viel Overhead.

13.09.2010 - 08:36 Uhr

Meine Frage: Gibt es irgendwelche Nachteile (Performance?), wenn ich so "viele kleine" UpdatePanels erzeuge?

Gibt es. Das AjaxControlToolkit generiert sehr viele Scripts, die sehr gross sein können. Aus diesem Grund würde ich so ausgrauen etc. mittels JQuery realisieren. Ist performanter und bläht den Seitenquelltext nicht so auf.

Ich habe mal einen Vergleich mit einem TabPanel vom AjaxControlToolkit gemacht und dasselbe in grün mit JQuery. Der Seitensource steigt exponentiell zu jedem Control dass Du vom AjaxControlToolkit verwendest.

08.09.2010 - 15:55 Uhr

Vielleicht die bessere Alternative zur Darstellung ListView WebServerControl.

Gibt zwar mehr Aufwand als der Repeater, ist aber umso mächtiger. Vgl. auch diesen Artikel.

08.09.2010 - 15:52 Uhr

Wenn du ein identisches Objekt brauchst, also 1 zu 1 Copy dann würde ich mal ICloneable anschauen.

08.09.2010 - 06:46 Uhr

Vielleicht findest Du in diesem Learning Guide etwas dass Dir weiterhelfen kann.

06.09.2010 - 14:10 Uhr

Dann wäre es auch schon wenn der Post als gelöst markiert werden würde und man auch an der Lösung teilhaben könnte.

06.09.2010 - 14:08 Uhr

Mach es doch so:

1.) Wenn OK geklickt wird, dann geht ein asynchroner Call an die Codebehind
2.) In der codebehind wird gewerkelt
3.) Wenn alles i.O ist hat jede PageMethod einen onSucced und einen onError Handler (Funktion) in welchen Du reagieren kannst
4.) Wenn alles i.O. ist und ein Postback geschehen soll, kann Du den PageRequestManager anweisen einen Postback zu machen.
5.) Versehe alle Buttons mit einem

return false;

Nachfolgend mache ich in etwa was ähnlliches.


//Function to to printermodel change when in the appropriate
//modalpopupextender the ok button was clicked
function OnReplacePrinterModel(args) {
    var gridView = document.getElementById(args.split('/')[0]);
    var netBiosName = args.split('/')[1];
    var selectedRow = null;
    var hiddenField = null;

    for (var index = 0; index <= gridView.rows.length; index++) {
        if (gridView.rows[index] != null) {
            if (gridView.rows[index].style.backgroundColor.search('#ffffcf') != -1) {
                selectedRow = gridView.rows[index];
                break;
            }
        }
    }

    hiddenField = $('input', selectedRow);
    var articleId = hiddenField[0].value;

    PageMethods.ReplacePrinterModel(netBiosName, articleId, OnSuccededReplacePrinterModel, OnErrorReplacePrinterModel);
    ShowPopUp('ProgressModalPopUpExtender');
}

function OnSuccededReplacePrinterModel(result, usercontext, methodname) {    
    var prm = Sys.WebForms.PageRequestManager.getInstance();
    prm._doPostBack();
}
06.09.2010 - 14:04 Uhr

Dennoch weiß ich nicht genau: Kann ich mit ajax auch einfügen oder nur auslesen?

AJAX beschreibt auch nur die asynchrone Weise wie man Daten holt und schreibt. Das schreiben und lesen geschieht immer noch im Code-behind, es passiert aber kein Postback.

AJAX OverView on MSDN

06.09.2010 - 10:52 Uhr

Nochmals versuchen: Artikel

06.09.2010 - 08:40 Uhr

Ergänzend findest Du hier sehr viele gute Beispiele wie das ListViewControl verwendet werden kann.
Alle DataControls von ASP.NET auf einen Blick. Prima Einstiegspunkt.

06.09.2010 - 08:37 Uhr

Also eingentlich nichts anderes als der ModalPopUpExtender des AjaxControlToolkits. Der hat nähmlich Ok und Cancel.

06.09.2010 - 08:23 Uhr

Vielleicht ein guter Einstiegspunkt für Deine Problematik.

  1. bei jeder Änderung die Seite neu laden muss
  2. ändern und löschen, aber einfügen über Visual Studios automatisch erzeugte SQL-Befehle (nur in der GridView) nicht möglich ist.

1.) Da ist AJAX notwendig. Vorzugsweise würde ich JQuery verwenden. Bedingt aber relativ viel Programmieraufwand (Kleines Beispiel wie die Zeilenweise Aktualisierung realisiert werden könnte). Wenn Du Dritthersteller Controls verwenden kannst, dann wäre Infragistics sicherlich nicht schlecht.
2.) Die DataSourceControl sind schlecht. Mache das Binding manuell und Du hast keine Probleme bei der Wartbarkeit. Hier ein guter [URL=1. bei jeder Änderung die Seite neu laden muss 2. ändern und löschen, aber einfügen über Visual Studios automatisch erzeugte SQL-Befehle (nur in der GridView) nicht möglich ist.Artikel dazu.

06.09.2010 - 08:10 Uhr

Meinst Du sowas in der Art?


<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
    </asp:ToolkitScriptManager>
    <p>
        <asp:Label Text="Wieviele AccordionPanes sollen erstellt werden?" runat="server" />
        <asp:TextBox ID="CounterTextBox" runat="server" />
        <asp:Button Text="Erstelle AccordionPanes" runat="server" OnClick="Button_OnClick" />
    </p>
    <div id="AccordionContainer">
        <asp:Accordion ID="RootAccordion" runat="server">
        </asp:Accordion>
    </div>
</asp:Content>

protected void Button_OnClick(object sender, EventArgs e)
        {
            TextBox CounterTextBox = (TextBox)this.Form.Controls.OfType<ContentPlaceHolder>().ToList().First().Controls.OfType<TextBox>().First();
            int anzahl = Int32.Parse(CounterTextBox.Text);

            IList<AccordionPane> panes = new List<AccordionPane>();

            for (int index = 0; index < anzahl; index++)
            {
                AccordionPane pane = new AccordionPane();
                pane.ID = string.Format(@"AccordionPane_{0}", index.ToString());
                pane.HeaderContainer.ID = string.Format(@"AccordionHeader_{0}", index.ToString());
                pane.HeaderContainer.Controls.Add(new Image() { AlternateText = "Hier wäre ein Bild der Pane." });

                pane.ContentContainer.ID = string.Format(@"AccordionContent_{0}", index.ToString());
                pane.ContentContainer.Controls.Add(new Label() { Text = string.Format(@"Ich bin der Inhalt des Accordion Panels {0}", index.ToString()) });
                panes.Add(pane);
            }

            foreach (var accpane in panes)
            {
                Accordion RootAccordion = (Accordion)this.Form.Controls.OfType<ContentPlaceHolder>().ToList().First().FindControl("RootAccordion");
                RootAccordion.Panes.Add(accpane);
                //AccordionContainer.Controls.Add(accpane);
            }
        }

Ist nur Husch-husch zusammengebastelt, hoffe es hilft Dir aber trotzdem weiter.

25.08.2010 - 15:34 Uhr

Vielleicht noch ein Input, trotzdem dass Du es als gelöst "geflagged" hast.

19.08.2010 - 09:39 Uhr

Eine dritte Variante wäre, in dem Control in welchem der Text angezeigt wird, dass Du cleintseitig mit JavaScript zuerst

overflow="hidden"

machst und wenn ein Klick darauf geschieht den overflow wieder zulässt.

Als Beispiel (Ist VS2010 und daher JQuery-Syntax)


<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" 
    CodeBehind="Default.aspx.cs" Inherits="ASP.NET.LangenTextperKlickeinUndAusklappen._Default" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
        <script type="text/javascript" language="javascript" src="Scripts/jquery-1.4.1-vsdoc.js" ></script>
        <script type="text/javascript">
            $(document).ready(function () {
                $("#Header").click(function () {
                    var headerBefore = $("#Header");
                    $("#Header").css("width", "auto");
                    $("#Header").css("height", "auto");
                    $("#Header").css("background-color", "Yellow");
                });
            });
        </script>
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <h2>
        Welcome to ASP.NET!
    </h2>
    <div id="NewsContent" style="width:auto; height:auto; overflow:hidden;">
    <div id="Header" style="width:50px; height:15px; overflow:hidden; border:2px; border-bottom-style:groove;">Dies ist ein öffentlicher oder freigegebener Computer</div>
    <br />
    <div id="Content" style="width:auto; height:auto;">
    Ok. Super. Werde ich morgen noch machen...
    Ich habe vorhin (um ca. 20.00 uhr) noch schnell darauf geschaut. Diagramm eins (Aufg.a) finde ich ok. Bei B&C musst du mehr oder weniger nur die 2 Buchungen (objekte) reinzeichnen. Sonst sahen die ok aus! Also näm z'lang...


    Ha geng no kes UML Buech ufta... I maag eifach nid ;-)
    Hilbä!
    </div>
    </div>
</asp:Content>

Wenn man dann auf das entsprechende Div klickt wirds gelb und der ganze Inhalt wird sichtbar. Bei einem weiteren Klick passiert noch nichts. (Quick and dirty)

16.07.2010 - 08:04 Uhr

Oder Du kann den DatePicker von JQuery verwenden.

08.07.2010 - 13:46 Uhr

Um das richtig zu verstehen:

  • du hast eine ASPX Seite
  • in welcher ein ASCX Control vorhanden ist
  • und in welchem eine DropDownList platziert ist
  • und Du willst von der Codebehind des Usercontrols oder ASPX Seite auf die DropDownListBox zugreifen?

Dann müsstest Du zuerst diese Suchen Page. FindControl("ControlName"). Achtung Verschachtelung der Controls beachten.

01.07.2010 - 11:05 Uhr

Meistens über den Mittag 3x die Woche Kraftsport, viel mit der Familie unterwegs und mit dem Rad zur Arbeit.

29.06.2010 - 15:22 Uhr

Ich mache es immer so dass ich das Control, welches ich verändern will, bei der statischen WebMethode mitgebe und dann im Resultat auch speichere. So kann ich dann im OnSucceded des Ajax Auftrufs mit

 $('clientIddesUserControls')

holen und gleich mit dem Resultat manipulieren.

24.06.2010 - 09:14 Uhr

hm...aber sonstige Funktionen kann ich aufrufen, oder?
Geht nämlich irgendwie auch nicht...

Nein leider nicht, dass ist der Nachteil von statischen WebMethoden.

Am besten rufst Du per JQuery eine solche Methode auf und baust Dir dann die Controls dynamisch mit JTemplates auf.

EDIT: Sowas in der Art hier.

24.06.2010 - 08:36 Uhr

Wenn ich jetzt noch auf die Controls in der zugehörigen aspx Seite zugreifen könnte wäüre ich glücklich. 👶

Ist leider nicht möglich, da es eine statische Methode ist.

22.06.2010 - 13:48 Uhr

Ist zwar in ASP.NET, aber vielleicht ein kleiner Input wie das MVP-Pattern umgesetzt werden kann, denke aber das kann man auch in Windows Forms einbringen.

22.06.2010 - 13:35 Uhr

Hallo schuppsl,

Du liegst nur halb daneben: um Ajax kommst Du nicht drumherum, um das UpdatePanel schon.
Das UpdatePanel hat den Nachteil, daß der Lifecycle der Seite (inklusive Page_Load) ausgeführt wird. Das willst Du ja eben verhindern. Deshalb der Hinweis von schaedld auf WebMethodAttribute und EnablePageMethods, damit geht's auch ohne Page_Load. Sieh Dir mal die Doku zu den fett markierten Begriffen an.

Gruß, MarsStein

Danke @MarsStein für den Hinweis, vielleicht habe ich mich auch unglücklich ausgedrückt...

22.06.2010 - 11:03 Uhr

Also mir ist überhaupt nicht klar, was dieser Blogeintrag mit meinem Problem zu tun haben könnte...

  1. Soll er Dir zeigen dass es auch ohne Postback geht
  2. Ohne UpdatePanel und daher die Seite schlanker ist
  3. Das der Timer auch selber implementiert werden kann
22.06.2010 - 09:51 Uhr

Eventuell findest Du hier mit was Du etwas anfangen kannst.

22.06.2010 - 09:45 Uhr

Eigentlich brauchst Du analog Facebook folgendes:

  • Nehme teil
  • Nehme nicht teil
  • Vielleicht

Das Ganze könntest Du ja so gestalten und wenn der Benutzer der den Link erhalten hat bereits in der DB zu diesem Event eine Antwort gegeben hat, dann ist es für ihn nicht mehr möglich an diesem Event teil zu nehmen.

Vielleicht findest Du was bei DotNetNuke oder Mojoportal.