Laden...

Forenbeiträge von Raptor 2101 Ingesamt 119 Beiträge

10.09.2008 - 16:47 Uhr

Wohl eher so:

  
protected void HabDaWas(object sender, EventArgs e)  
{  
    this.lblDebug.Text = this.ddlWasAuchImmer.SelectedIndex.ToString();  
}  
  

Und siehe:

jow wenn er noch nen label zu testzwecken anlegen will ... es würde auch einfach der Debuger reichen 🙂

Dann muss der Code aber - sorry - schlimm aussehen.
Und auch dann ist das nicht eine Patentlösung, denn die Datenbindung muss je nach Aufgabe auch an anderen Orten geschehen.

er sieht es heul wenn ich keinen NDA unterschrieben hätte würd ich ihn posten und du würdest mich verstehen. Nur ein kleines beispiel: es werden alle einstellungen in der Session gespeichert (teilweise xmldokumente von mehreren MB...) obwohl sich selbige nie ändern ... noch fragen?

das es keine Patentlösung ist/gibt ist normal... den verstand sollte man immer gebrauchen, deswegen sagte ich ja "Ich ... bevorzuge" das war als anregung und kein gesetzt gedacht 😉

10.09.2008 - 15:50 Uhr

Aha, irgendwie scheint mir dass du nichte genau weisst, was du schreibst.
Was willst du den normalen EventArgs entnehmen?

ok dann halt beispielcode ist wahrscheinlich eindeutiger


protected void HabDaWas(object sender, EventArgs e)
        {
            Response.Write(((DropDownList)sender).SelectedIndex);
        }


<asp:DropDownList ID="DropDownList1" runat="server" OnSelectedIndexChanged="HabDaWas" AutoPostBack="true">
    <asp:ListItem>tEST</asp:ListItem>
    <asp:ListItem>NOCHWAS</asp:ListItem>
    </asp:DropDownList>

es geht mir nur darum ob und wo er den selected value überschreibt zurücksetzt...

Und was soll mir das sagen?
Eine Erklärung oder Stellungname zu deiner bzw. deinen Aussagen ist das nicht.

Das soll dir sagen, dass ich die Methode mit den PreRender bevorzuge, weil das datenbinden dann an einem Ort passiert und somit die fehlersuche erleichtert wird (solange man kein ViewState benutzt)

10.09.2008 - 12:43 Uhr

Hallo zusammen

Den Unterschied ob das Databinding im Load- oder PreRender-Event gemacht wird, um damit ein fehlen zu vermeiden musst du mir erstmal erklären.

ich sitzte gerade über entsprechenden code und darf durchgehen wo der gute herr das DataBind gemacht hat und wo nicht. Zumal er die referenzen über mehrere Klassen verteilt hat...

10.09.2008 - 12:39 Uhr

eigentlich nicht... aber ich denke das ist nicht wichtig, wenn der Button ja schon die Funktion ausführt oder?

korrekt, es ging mir nicht darum darin eine funktion auszuführen sondern zu schauen ob die EventArgs den neuen Index (ausgewählten) enthalten...

edit: btw hast du mal geschaut was in der selectedValue-Eigenschaft drinne steht (im btn_Click-Eventhandler)

10.09.2008 - 12:12 Uhr

@Peter Bucher: jow wenn du entsprechende Einstellungen in den ViewStates speichert. Aber die hab ich bewusst immer ausgeschalte.

Das mit dem "Gefrickel" war nicht abwertend gemeint. Blos bei 20 events (oder mehr) wird es halt ein gefrickel, besonders wenn der schreiberling seine "Strategie" nicht sauber durchzieht... "wo fehlt nochmal das DataBind..."

da find ich die PReRender variante komfortabler aber das wird OT 🙂

@Iceskaarj: hast du mal einen SelectedIndexChange für deine DropDownList gemacht?

10.09.2008 - 09:19 Uhr

Eine Javascript Funktion geht, mit dem OnClick-Event, das ist schon klar.
Aber wenn ich eine Seite habe, die von einer Masterseite abhängt, also in einem Placeholder, kann ich da eine C# Funktion aufrufen, wenn ich auf einen Button Clicke?

Das geht so schonmal gar nicht

HTML und Java Script werden nur am Clienten ausgeführt
.NET Code (ASPX Tags, C# und alle .NET Sprachen) werden nur am Webserver ausgeführt...

wenn du also willst das eine C# funktion aufgerufen wird hast du zwei möglichkeiten.
Nutzt das ASP Button element, das macht alles für dich
oder ließ dich in Ajax ein ...

10.09.2008 - 08:56 Uhr

PS: pack das DataBind doch in Page_PreRender event handler, dann kannste auf das IsPostBakc verzichten
Das wäre mir neu. http://msdn.microsoft.com/en-us/library/ms178472.aspx

Laut dieser quelle wird PreRender aufgerufen nachdem alle ControlEvents aufgerufen wurden und alle Controls mit DataSourceID gebunden worden sind. Wenn du da deine Controls mit Dynamischen DataSource bindest sparst du dir folgendes "gefrickel"


Page_Load()
{
if(!IsPostBack) control.BindData();
}
OnControlEvent()
{
//mach was sinnvolles
control.BindData();
}

wird zu...


Page_Load()
{

}
OnControlEvent()
{
//mach was sinnvolles

}
Page_PreRender()
{
control.BindData();
}

so zerschießt man sich in jedem fall nicht das Eventhandling durch binden der DataSource

allerdings nur mit einer Spalte, nämlich den Usernamen. ob es daran liegt?

"sollte" eigendlicht nicht, der SelectedIndex sollte immer anschlagen (hoffe ich 😄) aber versuch es doch einfach mal... wäre wieder was auf meiner langen watchlist

09.09.2008 - 20:59 Uhr

bekommen wir mal den ASPX zu gesicht 😁

Edit: fang mal den Event für das ChangeEvent ab...

09.09.2008 - 20:27 Uhr

Ist das der ganze PageLoad code?

lass dir mal den Selected index angeben, steht der auch auf 1?

PS: pack das DataBind doch in Page_PreRender event handler, dann kannste auf das IsPostBakc verzichten

09.09.2008 - 14:37 Uhr

Ja mach ich gerade 🙂 ich hab ein ähnliche "Problemstellung" wie du, geh es blos aus einer anderen Richtung an (ohne DynamicData) siehe Posting:
Eigene ASP Tags einführen?
TemplateField, Dynamisch

und sämtliche weitere Postes von mir...G

ich bin aber sehr schnell von der SQL und LINQ datasource weggegangen und auf eine ObjectDataSource gewechselt.

es kann jetzt bei dir an zwei sachen liegen

  1. der session-Parameter wird nicht korrekt ausgelesen
  2. die Where Bedingung hackt

nimm den SQL-Server Profiler und trace mal mit welche anfrage beim aufbauen der seite an deinen server gesendet werden. wenn du daraus nicht schlau wirst, meld dich wieder hier🙂

09.09.2008 - 14:05 Uhr

stimmt schon, aber vorerst würde es mir reichen wenn ich einfach 1 zu 1den quelltext bekommen könnte, von der Seite die mir im Browser angezeigt wird.

das reicht dir ja gerade nicht...

Eine AJAX Seite ist veränderlich. Mit der Zeit wird der Quellcode (das DOM) verändert.

Mit anderen/simplen Worten: der HTML Quellcode nützt dir nichts. du musst die Aktionen des User "nachbauen"

wenn der gewünschte Text auf deiner Zielwebseite erst geladen wird, wenn der User auf einen Button drückt. Dann kannst du mit deinem Parser so viel HTML-Code parsen wie du möchtest. Die informationen ist noch nicht auf der Webseite.

Durch den Klick auf den Button wird ein JavaScript ausgelöst, der den Text von einem Webservice läd -> diese Abfrage musst du ausführen, das parsen der Webseite ist (fast) überflüssig...

09.09.2008 - 13:42 Uhr

Das Problem (andere nennen es auch vorteil😉 ) bei AJAX ist ja gerade, dass beim ersten (oder x-ten) laden der Webseite nicht alle informationen verfügbar sind, sondern erst "bei bedarf" nachgeladen werden müssen.

wie du an diese informationen rannkommst, ganz einfach (sogar leichter als mit reg exp parsen...) geh durch den JavaScript. Dort sind die Zielanfragen definiert. Wenn du diese ausführst, bekommst du meistens eine wunderschöne XML Datei mit allen infos die du brauchst...

ich würd dir empfehlen selber eine AJAX webseite zu basteln, dann findest du dich in dem wust der JS-Scriptes leichter zurecht...

09.09.2008 - 13:34 Uhr

Wäre doch was für ein CMS.
Am Code und auch an den deklerativen Angaben (ASPX / ASCX) hat der Endbenutzer m.E. nichts zu suchen.

die Entscheidung ob und was eingesetzt wird, obliegt leider nicht mir. Der Kunde will das so... ich hab nur die Wahl wie ich diesen Wunsch umsetze...

wobei ich die Sache mit dem ASPX-umbiegen ganz geschickt finde. Hab zu Testzwecken nen privates Projekt damit gerade angefangen. Für nen CMS ist dieses Projekt zu klein und den ASPX code fasse nur ich an ... Da hat man sich geschwind mal ein paar seiten zusammengeklickt...

09.09.2008 - 12:43 Uhr

Aha, interessant.
Dürfte eigentlich nicht gehen, da das Direktiven sind und nicht Eigenschaften.

wie es scheint hat MS das direkt vorgesehen. Wenn du ein Attribute angibst, was in der Klasse nicht als Eigenschaft (public memberVariable oder Attribute) existiert bekommst du eine Exception...

bei MS selber hab ich dazu aber noch nichts gefunden. Deswegen hab ich hier ja mal so gefragt.

Alles

Das ist doch auch ohne irgendwelches Parsing und eigene Direktiven möglich.

ja sicher aber dazu noch das Attribute "idiotensicher" 😉
Es soll halt filebasiert parametrierbar sein, am besten "klicki-bunti" (WYSIWYG).
wenn du eine bessere Methode hast, ohne das der endgültige "Bediener" eine Zeile C# code schreiben muss immer her mit den Ideen 🙂

09.09.2008 - 12:33 Uhr
  1. prüf ob eine session existiert
  2. prüf ob die session einen gesetzten key mit dem namen UserKey existiert. setzten solltest du diesen key beim login bevor du zur hauptseite redirectest

ich würde vieleicht auch auf eine ObjectDataSource umsteigen... damit hast du ein wenig mehr kontrolle und kannst alle Sicherheitskritischen Zugriffe bündeln... (für spätere Fehlersuche...)

09.09.2008 - 12:22 Uhr

Und wie sieht das aus?

wir reden wohl öffters aneinander vorbei 😉

erster post von mir, der Beispielcode funktioniert. es wird halt blos eine Warnung geworfen... Das Attribute Right aus der Deklaration wird in die Klasseneigenschaft Right kopiert (Groß/Kleinschreibung) wird dabei ignoriert...

Deine Beschreibung wieso das was, wie lösen möchtest, habe ich nicht verstanden.

Welchen part des Was/Wie denn nicht?
Es wird ein Vollständig dynamischer Dialog benötigt der zur Laufzeit geändert werden kann

09.09.2008 - 11:27 Uhr

Wie schon geschrieben, geht sowas nicht deklerativ.
Du kannst das nur per Code erledigen.

Und was willst du parsen?

gut dann muss der kunde/ich damit leben

was ich machen will? Eine WebAnwendung soll einen Haufen von Datenbank Informationen anzeigen. Einige Seiten müssen immer spezijell an ein problem gebunden werden (da komme ich um das Codebehind nicht drumherum) andere hingegen sollen "in wenigen Minuten, von einem Laien zusammengeklickt werden können"

Ergo hab ich eine Klasse (TableView zb Standartanzeige für Tabellen) die als Codebehind Zugriffskontrolle übernimmt und Validierungen übernimmt.

jetzt habe ich die Wahl das aussehen der Seite per "eigenen" XML-File zu defieneren. Diese zu parsen und die Webseite im codebehind aufzubauen...

die zweite möglichkeit, die übrigens prima funktioniert, im ASPX unspezifizierte Parameter mitliefern. Diese werden automatische in der Zielklasse verfügbar gemacht... so hab ich in der TableView-Klasse wirklich nur noch den benötigten code und in der ASPX file das komplette "MakeUp" + den ASP internen funktionen wie Caching und sowas 🙂

09.09.2008 - 11:01 Uhr

das es über die BasePage geht ist mir bekannt, aber das will ich gerade nicht.

Es sollen Änderungen / Anpassungen zur Laufzeit möglich sein, ohne das eine Entwicklungsumgebung nötig ist. Daher war die ürsprüngliche Idee alles über XML-config Files zu machen...

wenn ich es über diese Veriante mache, spar ich mir das doppelte parsen von xml files (einmal der ConfigFile und einmal das ASPX File).

daher müssten alle Parameter im ASPX setzbar sein...

mal abgesehen davon das der Compiler ne Warnung schmeißt, spricht irgendwas gegen so eine Vorgehensweise...

09.09.2008 - 10:54 Uhr

wenn ich das Versuche dann zerballert er mir irgendwie alles. Dann verliert er zum einen alles was ich ihm in der "Partials"-Klasse beigebracht habe. (Feldnamen, Validierungen (Wobei die Validierungen zZ auskommentiert sind) etc.

Der "Einfügen" Button lässt sich dann auch nicht mehr betätigen. Hier mal zum Vergleich der Kram den er daraus generiert.

asp handelt korrekt, du hast dieses verhalten ja so parametriert 😉

  
            <asp:LinqDataSource ID="DetailsDataSource" runat="server"   
                ContextTypeName="CDatenDataContext"  
                Select="new (UserKey, BVon, BBis, BUnternehmen)"   
                TableName="tbBerufe" Where="UserKey== @UserKey">  
                <WhereParameters>  
                    <asp:SessionParameter DefaultValue="0" Name="UserKey" SessionField="UserKey"   
                        Type="Int32" />  
                </WhereParameters>  
            </asp:LinqDataSource>  

Hast du vll noch ne Idee?

entweder das SELECT komplett weg oder einfach nur SELECT="{ClassName}"

wobei du {ClassName} durch tbBerufe ersetzen solltest (oder wie du deine Klasse im LINQtoSQL file definiert hast

08.09.2008 - 21:33 Uhr

die LinqDataSource hat eine Angabe "SelectParameters" und "WhereParameters", und die kannst du den Session Parameter übergeben. Das kannste bequem über die eigenschaften (Assistent) der datasource machen...

sorry das ich so spät geantwortet habe, auf arbeit war ein wenig stress 🙂

08.09.2008 - 14:58 Uhr

ok ein kleines beispiel.

du hast zwei Tabellen eine mit den UserRechten und eine mit den Daten. Entweder kommst du über die SessionID an die UserID rann oder denkst dir was anderes aus... der einfachheit halber arbeite ich mit der UserID....

du bastelst dir eine View

SELECT * FROM daten,userrechte WHERE daten.Recht=userrechte.Recht

jetzt musst du nur noch beim auslesen der Werten einen Filter einbauen nach dem Motto:

SELECT * FROM viewdaten WHERE UserID=eingelogteID

in dem von mir genannten webcast findest du eine möglichkeit wie du aus einem "DynamicData"-context einzelne Dialoge rausziehen kannst und dafür eigene Definition anlegen kannst (ziehmlich am ende)

für die dialoge die du absichern willst, legst du nach der gezeigten methode neue apsx-files an und biegst die DataSource entsprechend auf die View mit dem oben genannten SQL-Statement um.

hoffe das war ein wenig verständlicher 🙂

08.09.2008 - 13:28 Uhr

Wie in meinen bisherigen Post in diesem Forum zu sehen ist, spiel ich einige Varianten durch wie man effizient dynamisch parametrierte Seiten erzeugt.
Da ich nun mitbekommen hab, dass eine ASPX Seite nicht an eine Klasse gebunden ist, kam mir der Gedanke, dass ich eigendlich ständig versuche das Rad neu zu erfinden...

lange rede kurzer sinn, ich schieß den VS2008 Assisten ab und erstelle mir die seiten selber.

ich hab eine Dialogklasse die wie folgt aussieht:


public class TableView:Page
    {
        private string right;

        public string Right
        {
            get { return right; }
            set { right = value; }
        }
        
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Right.Equals("keine Ahnung")) MachIrgendEtwas();

        }
    }

hier eine der möglichen Parametrierungen


<%@ Page Language="C#" AutoEventWireup="true" Inherits="Wolfpack.Admin.TableView" MasterPageFile="~/Admin/Admin.Master" Right="ACPMenu" %>
<asp:Content ID="Content2" ContentPlaceHolderID="Content" runat="server">
Tolle parametrierte Seite.
</asp:Content>

Super Sache, jetzt hab ich alle vorteile des VS-Editors und dennoch muss ich nur einmal für alle WebForms die Logik schreiben...

eine Sache "stört" mich jedoch. der Parameter Right, den ich im ASP-Tag mitgebe wird (zurrecht) vom Compiler als "undefiniert" angesehen. gibt es irgendwie eine Möglichkeit, dass ich dem Compiler mitteilen kann, dass in einer gewissen Umgebung die verfügbaren Parameter erweitert wurden (so dass ich vielleicht sogar intelli-sense bekomme ...)

ps: falls es andere Anregungen zu dieser Vorgehensweise gibt, bitte her damit...

08.09.2008 - 13:17 Uhr

Kann ASP.Net das gleiche wie ein Servlet? Wird die Platformunabhängikeit durch das "Project Mono" erreicht.

definier die aussage "Plattform unabhängig" mal genauer. Da ich nicht weiß aus welchem Zusammenhang dir die frage gestellt wurde gibt es mehrere Interpretationsarten (danke an die Rechtsabteilungen 😄)

Plattformunabhängig aus technischer Sicht: http://de.wikipedia.org/wiki/Mono-Projekt. .NET 3.5 ist noch nicht umfassend implementiert... weiß nicht ob du da alles brauchst. da musst du recherchieren welche features du benötigst und dann nachschlagen ob sie unterstützt werden...

neben dieser (mir wichtigigeren) technischen Sicht, gibt es aber noch die Kaufmänner/Advokaten. Ich weiß nicht ob du in einer Uni oder Firma deine DA schreibst. In einigen Firmen herrscht die Kultur das prinzipjell kein OpenSource eingesetzt wird und schon gar kein GPL (viraler Vaktor und sowas) hier must du einen abgleich mit den bestehenden interna machen...

06.09.2008 - 09:39 Uhr

verwendetes Datenbanksystem: MSSQL 2005 + .NET 3.5

Ich hab eine Frage zu LINQ abfragen. Wenn man sich den Interpreter anschaut werden LINQ abfragen ja in handelsübliches TSQL übersetzt...
Ist das nur um den Programmierer/Tester zu beruhigen oder gehen die Abfragen wirklich so raus?

Falls ja würde mich interessieren ob dann noch die trennung von code und parameter gewährleistet (im hinblick auf SQL Injections)

05.09.2008 - 16:30 Uhr

achte mal bei den Dateipfaden auf Groß/Kleinschreibung. Am besten alles klein... auch die physikalischen Namen der Dateien...

05.09.2008 - 15:56 Uhr

ok wie bekomme ich es dann hin, das nach meinem PostBack der wert des SelectedValue (geändert durch den Benutzer) erhalten bleibt?

05.09.2008 - 15:09 Uhr

Autsch - wenn dann nur die reinen Daten (ListItems) in die Session, nicht ein komplettes Control.

nope ich brauch das Control, da mir sonst beim Postback die Referenz auf das Control verloren geht und somit den SelectedValue nicht mehr ermittelt werden kann...

05.09.2008 - 14:24 Uhr

Schick finde ich aber die Anzeige (in der Scrollbar) wo ein gesuchtes Wort sich in der Website befindet.
Ja 👍
Da wird doch hoffentlich bald ein Plugin für den FF erscheinen, das dieses Feature nachrüstet :evil:

ich hoffe das sich die anderen Browser (besonders Opera) einiges technisches vom Chrome abschauen...

Der Opera mit der Leistung des Chrome... hmmm und nie wieder was anderes

05.09.2008 - 14:13 Uhr

ich hab das Problem jetzt so gelöst


public class ComboBoxField : DataControlField
    {

        AdminSession adminSession;
        public ComboBoxField()
        {
            adminSession = new AdminSession();
        }
        public ComboBoxField(String sqlData,String key,String value)
        {
            adminSession = new AdminSession();
            DropDownList dropDownList = new DropDownList();
            ObjectDataSource dataSource = new ObjectDataSource();

            dataSource.SelectMethod = sqlData;
            dataSource.TypeName = typeof(Database).ToString();

            dropDownList.DataSource = dataSource;
            dropDownList.DataTextField = value;
            dropDownList.DataValueField = key;
            dropDownList.AppendDataBoundItems = true;
            dropDownList.SelectedValue = adminSession.EditItem.Rows[0][key].ToString();
            adminSession.PostBackSave = dropDownList;
        }

        protected override DataControlField CreateField()
        {
            return new ComboBoxField();
        }
        public override void ExtractValuesFromCell(System.Collections.Specialized.IOrderedDictionary dictionary, DataControlFieldCell cell, DataControlRowState rowState, bool includeReadOnly)
        {
            DropDownList dropDownList = (DropDownList)adminSession.PostBackSave;
            dictionary.Add(HeaderText, dropDownList.SelectedValue);

        }
        public override void  InitializeCell(DataControlFieldCell cell, DataControlCellType cellType, DataControlRowState rowState, int rowIndex)
        {
 	        base.InitializeCell(cell, cellType, rowState, rowIndex);
            if (cellType == DataControlCellType.DataCell)
            {
                DropDownList dropDownList = (DropDownList)adminSession.PostBackSave;
                cell.Controls.Add(dropDownList);
            }
        }
    }

wer eine ressourcenschonendere Variante kennt (zb unter kompletter Umgehung der Session) darf sich verpflichtet fühlen hier zu posten....

05.09.2008 - 13:47 Uhr

steht das BeginUpdate/EndUpdate auch um das clear?

interpretier ich das richtig PPC=PocketPC?

05.09.2008 - 13:38 Uhr

schon mal mit LINQ versucht?

sowas wie


var a = from row in dataSet.table[0].rows
           select {row.nummer}


wird zwar länger sieht aber unglaublich lesbar aus 😁

05.09.2008 - 12:46 Uhr

einfach die Views über deine LinqToSql ziehen... das problem ist den dynamic-sites mitzuteilen das sie beim query ein "where user=@userid" anhängen (oder halt ein and...)

wenn du dir aber das Video von Scott Gutherie anschaust (http://weblogs.asp.net/scottgu/archive/2007/12/14/new-asp-net-dynamic-data-support.aspx) oder angeschaut hast, da wird am ende gezeigt, wie du deine Templates individualisierst. dort kannst du auch deine Validierung einbauen...

04.09.2008 - 20:54 Uhr

ja das mein ich, wenn du eine "mittleschicht" dazwischen hast, zb views, kannst du über den angemeldeten User (userID) in die view mit einbeziehen und so verhendern, dass daten dargestellt werden die nicht angezeigt werden dürfen...

04.09.2008 - 18:13 Uhr

Du kannst den Page_Load aber einfügen ...

nein damit hast du noch keine filterung, dazu müsste ich deine Verarbeitungslogigk kennen. Wie und wo du die rechteverwaltung speicherst usw...

04.09.2008 - 17:42 Uhr

Wenn du deinen dynamischen Seiten eine Masterpage verpasst hast, kannst du im Load Event des Masters prüfen ob die ID gesetzt ist und wenn nein mit Transfer den request umleiten....

04.09.2008 - 16:57 Uhr

Nein, das keine Lösung funktioniert hat.

ich hab nicht gesagt, dass keine lösung funktioniert hat, nur das ich keine gefunden habe, die meine Problematik im CodeBehind angeht

Okay, dann bin ich schon mal auf deinen Bericht gespannt.

wie du siehst war ich ein Tick schneller im tippen 😁

04.09.2008 - 16:49 Uhr

Ok peter das grundlegende Problem bleibt:


public class ComboBoxField : DataControlField
    {
        
        private CompositeDataBoundControl control;
        DropDownList dropDownList;

        
        public ComboBoxField(String sqlData,String key,String value,CompositeDataBoundControl control)
        {
            
            dropDownList = new DropDownList();
            ObjectDataSource dataSource = new ObjectDataSource();
            this.control = control;
            OnFieldChanged();
            dataSource.SelectMethod = sqlData;
            dataSource.TypeName = typeof(Database).ToString();

            dropDownList.ID = "123456789";
            dropDownList.DataSource = dataSource;
            dropDownList.DataTextField = value;
            dropDownList.DataValueField = key;
            dropDownList.AppendDataBoundItems = true;
        }
        public ComboBoxField()
        {
            
            
        }
}

Ich erstelle das ComboBoxField mit dem ersten (ausführlichen) Construktor. Die Celle wird angezeigt, alles bestens. Beim ändern des Inhaltes und des anschließenden Postback steh ich allerdings im Wald.

Es kommt zwangsweise zum Aufruf des Parameterlosen Constructor (irgendwie wird CreateField von DetailsView ignoriert). Nun bleibt mir nur die wahl die ich oben schon hatte: ViewState, Cache oder Session missbrauchen um die Parameter beim erneuten Aufbau der Zelle zur Verfügung zu haben.

Oder überseh ich schlicht was?

04.09.2008 - 15:56 Uhr

Das glaube ich dir schlichtweg nicht, sorry.

das ich nicht gesucht habe oder das es bei mir im DetailView nicht tut ? 😁 Ich kann als zeugen meine Kollegen anführen :p

Denn alles was deklerativ geht, geht immer auch per Code.

das dem nicht so ist sieht man schon beim DataGridView und dem UpdatingEventArg. Dort gibt es einen Unterschied ob die DataSource Deklarativ oder CodeBehind zugewiesen ist. Prinzipjell wünsch ich mir aber das es so währe

Da musst du was gehörig falsch gemacht haben.

davon geh ich aus, deswegen hab ich hier gepostet
Behandelt zwar nicht ein DropDown, aber evt. kannst du trotzdem was abschauen:

darum wollte ich mich eigendlich Drücken, aber wie es scheint sind die StandartControlFields (TemplateField und co) nicht zu gebrauchen... dann mal los...

04.09.2008 - 14:35 Uhr

Wieso das Rad zweimal erfinden?
->
>

Ich müsste selber auch gucken, wo / wie / was falsch ist.

Hi Peter

glaub mir,ich bin schon google, MSDN und einige foren via Suche durchgegangen. ich hab keine Lösung gefunden, die das im Codebehind-Only löst. Und ich will das rat nicht neu erfinden. Ich bin es eigendlich (von FormsApplication) gewohnt, dass ich alles via Code erledigen kann, was der Designer auch erledigt aber irgendwie steh ich gerade auf dem schlauch...

04.09.2008 - 13:46 Uhr

Ich erstelle momentan dynamisch GridViews und DetailViews. Für die darstellung brauch ich eine ComboBox/DrownDownList. Nachdem ich verwundert festgestellt habe, das MS dieses feld nicht OutOfTheBox anbietet hab ich mir kurzerhand ein eigenes Field Gebastelt

public class ComboBoxField : TemplateField, ITemplate
    {
        private DropDownList dropDownList;
        private CompositeDataBoundControl control;

        public ComboBoxField()
        {
        }
        public ComboBoxField(String sqlData,String key,String value,CompositeDataBoundControl control)
        {
            dropDownList = new DropDownList();
            ObjectDataSource dataSource = new ObjectDataSource();
            this.control = control;

            dataSource.SelectMethod = sqlData;
            dataSource.TypeName = typeof(Database).ToString();

            dropDownList.ID = "123456789";
            dropDownList.DataSource = dataSource;
            dropDownList.DataTextField = value;
            dropDownList.DataValueField = key;
            dropDownList.AppendDataBoundItems = true;
            this.EditItemTemplate = this;
            this.ItemTemplate = this;
        }
public void InstantiateIn(Control container)
        {
            container.Controls.Add(dropDownList);
            container.
            container.DataBinding+=new EventHandler(container_DataBinding);
        }

        void container_DataBinding(object sender, EventArgs e)
        {
            String value = ((DataTable)control.DataSource).Rows[0][dropDownList.DataValueField].ToString();
            dropDownList.SelectedValue = value;
        }

beim ersten aufruf ist alles super, beim bostback fall ich jedoch auf die nase.
Meine Klasse wird neu instanziert und ich hab keinen Dunst woher ich die daten aus dem letzten seitenaufbau herholen soll.
also folge ist das entsprechende Feld einfach leer... der Witz dabei ist, nur die DropDownList verschwindet. Die Column/Field bleibt vorhanden, nur die Cell bleibt leer...

ich könnte jetzt Frickeln und alles in der Session ablegen aber irgendwie hab ich das gefühl, das ich tierisch auf dem holzweg bin und das MS bei ASP das Codebehind nicht so wirklich "vorgesehen" hat. wenn man alles im aspx file macht, ist das leben wesentlich einfacher...

jemand ne Idee ?

02.09.2008 - 15:14 Uhr

Salute Raptor
[...Aussage zu Session...]

gut das war mir klar/logisch

gibt es eine performantere Userauthentifiaction die über alle Betriebssysteme und im WWW funktioniert (also keine insellösungen...)?
?

die frage erübrigt sich, klang so als ob du ne bessere alternative zu session kennen würdest...

02.09.2008 - 15:07 Uhr

sorry dein edit war schneller als mein edit 😁 muss nochmal bereinigen

was den cache betrifft danke für den link

02.09.2008 - 14:51 Uhr

Session ist ganz, ganz schlecht.
Das geht gegen die Performance, siehe auch:

Ich würde auch auf den Cache plädieren, ggf. mit Lazy Loading.
D.h. erst bei der ersten Anforderung parsen und cachen.
Siehe:

wie ich schon sagte, die SessionVariante ist "quick and dirty" ich wollte erstmal test wie ich am besten "individualisiere" und mich erst danach um die performence kümmern. Bin wie geschrieben in der "ausprobier" phase (zwei aspx seiten samt login G) und teste mich daher durch...

Edit: ich finde in deinem Link keine wirklichen anhalspunkte zum thema Session-Leistungsverbrauch... Da ich (wie in einem anderen Posting erwähnt) ein Port von PHP auf ASP mache, plane ich die Session nur primär zur Authentification zu nutzen. SessionID samt IP (werden in einer HTTPS sitzung abgefragt) werden in einer DB-Table als Freigeschaltet markiert.

gibt es eine performantere Userauthentifiaction die über alle Betriebssysteme und im WWW funktioniert (also keine insellösungen...)?

02.09.2008 - 14:24 Uhr

Ich würde zu einem Singleton plädieren, das aber ein Cache-Objekt zurückgibt, welches die gleiche Basis (vorzugsweise Interface) hat wie deine Settings-Klasse. Die Cache-Klasse ließt die Datei dann nur alle x-Minuten ein, ansonsten werden diese aus dem Speicher genommen.

letzteres muss nicht mal passieren, die config files werden nur beim start einmal eingestellt. Sollten sich die config files im laufen ändern, will ich per event ein reload machen...

gibt es irgendeine begründung für deine vorlieben ?

02.09.2008 - 13:07 Uhr

In meiner Test-ASP.Net applikation bin ich bei dem Punkt angelangt wo es um mir um die optimierung der Performence geht.

ich hab webseiten, die über XML dateien konfiguriert werden. Zum beispiel, eine einfache seite, die eine GridView enthält deren Colums und DataSource über die XML datei geändert werden können...

nun ist es aber wenig sindvoll, bei jedem PageLoad das XMLFile aufs neue zu parsen... daher hab ichs momentan in die session ausgelagert (nicht schön aber egal)

nun ist meine überlegung alle files einmal bei Applikations-Start zu parsen und in einzelnen HTTPHandler abzulegen. Bei einem Aufruf würde nicht mehr die eigendliche ASPX seite geladen werden sondern schon ein fertig konfiguriertes Abbild.

soweit die Theorie nun meine Frage: was ist performter, das gute alte Singelton (also if(instanz==null) instanz=create...) oder über Application_Start den anstoß zu geben.

ihr könnt ruhig grundlegende Designvorschläge zu diesem thema machen, bin gerade im "ich will lernen" modus 🙂

02.09.2008 - 12:44 Uhr

Für alle die ein ähnliches Problem haben, hier ein workaround.

wie in http://www.developersdex.com/asp/message.asp?p=2908&ID=%3CuvU%24WBARGHA.3052%40TK2MSFTNGP09.phx.gbl%3E beschrieben, gibt es mit den New/Old-Values das verhalten von MS erwünscht.

daher sollte man eine eine ObjectDataSource benutzen, diese mit einer gecachten DataTable versorgen und man ist das problem los...

die old values stehen in der Table, die newValues muss man sich aus der gridView extrahieren...

nicht schön, hab aber keinen anderen weg gefunden...

31.08.2008 - 15:26 Uhr

Generell würde ich soetwas lieber so

  
this.flowLayoutPanel1.Invoke ((Action<ucPhotoThumb>)delegate () { //Code });  
  

hat das irgendeinen besonderen grund, warum du diese "schreibweise" vorziehst

30.08.2008 - 15:59 Uhr

Liegt dien programm auf den gleichen server wie das WebDav verzeichniss oder wie das sendende programm.

ich persöhnlich würde über WEBDav arbeiten. muss der Admin das WebDav-Root mal verbiegen, arbeitet dein Programm mit gleicher parametrierung schlicht weiter.... gehst du auf den "physikalischen pfad" muss dieser mit angepasst werden. eine config file mehr...

30.08.2008 - 15:24 Uhr

Poste mal den code

und prüf im object wann du den Focus bekommst und wann du ihn wieder verlierst

30.08.2008 - 12:47 Uhr

wie herbivore schon angedeutet hat "wer zuletzt malt..."

das problem ist, dass die Windows.Forms pe definition keine Transparenz beherschen. Diese Pseudotransparenz funktioniert nur mit elementen hörer ebene (parent) dort wird das gezeichnete bild zurechgeschnitten usw

Die Transparenz kann nur von einer höheren Hirarchieebene "durchgereicht" werden.
Elemente in der gleichen ebene (iin der gleichen Controls-collection zb) können sich nicht gegenseitig beeinflussen (transparenztechnisch...)

wenn du also diesen effekt willst musst du deine Elemente so ineinader verschachteln, dass das Element welches topmost ist, das unterste Child ist...

brauchst du 2 objekte die sich gegenseitig beeinflussen, muss du das zeichnen selber übernehmen. Also dir das image der objekte als Graphic holen und "zeichen" aber das geht performanter mit DirectX