Ich habe das Problem, an dem ich fest hing, gelöst. Wenn auch nur weitestgehend befriedigend.
Vorweg: Ich habe noch versucht, die Textboxen zu übernehmen, in der Hoffnung, dass diese bereits bearbeitet wurden. Hab nicht an Erfolg geglaubt, habe damit auch keinen gehabt.
Ich sichere mir ja wie bereits beschrieben die Validatoren, um später wieder auf diese zugreifen zu können. Das mit dem Ersetzen der Neuen durch die alten Validatoren war ja ... nicht funktional.
Was aber funktioniert ist, die Property IsValid auszulesen und entsprechend darauf zu reagieren.
Wenn jemand ne bessere Idee hat, dann immer her damit. Wie gesagt - vieleicht bin ich ja auch schon im Ansatz falsch im Bezug auf Validatoren gewickelt.
LG
Hi,
ich bin mir schonmal nicht sicher, ob ich die Funktionsweise der Validatoren richtig verstanden habe. Aus diesem Grund nochmal eine kleine Zusammenfassung dessen, was mir mit meinem Problem wichtig erscheint...
[Ein Validator kann auch im CodeBehind geprüft werden. Wenn ein Validator Alarm schlägt, taucht dieser, wenn vorhanden, in dem/einem ValidationSummary auf. Wenn ein Validator in einem GridView steht und dieses neu gebunden wird, geht der Validatorzustand verloren.]
Gerade die letzte Eigenschaft fällt mir mächtig gewaltig auf die Füße, da, immer wenn dass Formular zurückkommt, alle getroffenen Einstellungen überprüft werden und ein kleines Script im Fehlerfall für die jeweilige Zeile erzeugt wird, welches eine weitere Zeile einschiebt. Dieses "einschieben" geschieht im Event RowDataBound.
Jetzt hab ich mir überlegt, dass, wenn alle Validatorenzustände scheinbar dahinscheiden, ich mir ein Hilfsarray schaffe, in das ich die Validatoren zwischenlagere und mit dem RowIndex einfach wieder auslese. Beim RowDataBound die entsprechendend "neuen" Validatoren ersetze ich dann durch die Alten. Funktioniert leider nicht.^^
//Ausschnitt Button_Click
...
Page.Validate();
...
_reqValidatoren = new RequiredFieldValidator[GridView.Rows.Count];
...
foreach (GridViewRow row in GridView.Rows) {
...
RequiredFieldValidator reqFiledValidator = (RequiredFieldValidator)row.FindControl("ReasonUserValidator");
...
_compValidatoren[row.RowIndex] = CompareValidator;
...
}
//Ausschnitt RowDataBound
...
RequiredFieldValidator reqFiledValidator = (RequiredFieldValidator)e.Row.FindControl("ReasonUserValidator");
if (_reqValidatoren != null) {
if (_reqValidatoren[e.Row.RowIndex] != null) reqFiledValidator = _reqValidatoren[e.Row.RowIndex]; else Page.ClientScript.RegisterStartupScript(GetType(), e.Row.RowIndex.ToString() + "reqNull", "alert('reqnull');", true);
}else{
Page.ClientScript.RegisterStartupScript(GetType(), e.Row.RowIndex.ToString() + "reqNull", "alert('reqmeganull');", true);
}
...
reqFiledValidator.DataBind();
Die Alerts bleiben beim Postback aus, es muss also irgenwie was da sein...
Ich hoffe, es ist halbwegs verständlich ausgedrück, was genau ich eigentlich möchte^^
LG
Ich hab es herausgefunden...
Der Weg führt über das PreRender des Controls modul1.
Dort suche ich mein Control aus up2 und bearbeite es.
Zu Beginn konnte ich mein Control as:Button nicht finden, da dies mit einem einfachen "findControl" nicht möglich ist. Das hatte mich dazu gebracht, eine Alternativlösung zu suchen. Ich habe eine rekursive Methode zu Hilfe genommen und schon finde ich es. Konnte ich mir also schenken^^
Grüße
Hi,
ich möchte 2 Updatepanel verbinden, sodass Updatepanel 2 mit aktualisiert wird, wenn Updatepanel 1 dies tut.
(Scheinbares) Problem an der Sache: Die Controls in Updatepanel 1 sind alle direkt in einem eigenem Control, das ich nur einbinde.
<asp:updatepanel id="up1" runat="server" updatemode="Conditional">
<contenttemplate>
<as:modul id="modul1" runat="server" visible="true" autopostbacks="true" verticalalign="false" />
</contenttemplate>
</asp:updatepanel>
...
<asp:updatepanel id="up2" runat="server" updatemode="Always">
<contenttemplate>
<as:Button id="AssignButton" runat="server" cssclass="reload" />
</ContentTemplate>
<triggers>
<asp:asyncpostbacktrigger controlid="modul1" />
</triggers>
</asp:updatepanel>
Das Control in Updatepanel 1 aktualisiert sich selbst super, funtzt also.
Wenn ich das System von Cross-Updatepanels allerdings richtig verstanden habe, muss ich in Updatepanel 2 den Trigger auf ein Control in Updatepanel 1 setzen und alle gewünschten Änderungen in das Event, das von modul1 aufgerufen wird, einpflegen.
Wie kann ich das Problem lösen?
Ich verwende Framework .NET 2.0 mit C#.
Ok, also gehts nicht anders...
War blos verwundert, weil die Beispiele im Internet so einfach erschienen und meins nicht demnach entsprechende Werte lieferte.
Danke
Hi,
ich habe wohl ein Verständnisproblem in bezug auf das Durchlaufen aller Controls meiner aktuellen Seite.
Im Internet finde ich dazu nur Zugriffe via Page.Controls in einer foreach-Schleife.
Ergibt so auch Sinn, nur wenn ich dieses Page.Controls mir ansehe, ist da nur ein Eintrag drin.
Ich habe jetzt mal folgenden Testcode geschrieben, um zu sehen, was in den tieferen Verschachtelungen von Controls.Controls... drin ist.
List<List<List<List<string>>>> liste = new List<List<List<List<string>>>>();
int e1 = 0;
foreach(Control control in Page.Controls) {
liste.Add(new List<List<List<string>>>());
int e2 = 0;
foreach (Control control2 in control.Controls) {
liste[e1].Add(new List<List<string>>());
int e3 = 0;
foreach (Control control3 in control2.Controls) {
liste[e1][e2].Add(new List<string>());
int e4 = 0;
foreach (Control control4 in control3.Controls) {
liste[e1][e2][e3].Add(control4.ID);
e4++;
}
e3++;
}
e2++;
}
e1++;
}
Da gehe ich in die 3. Verschachtelung rein und bin scheinbar immer noch nicht da, wo ich sein will. Es liefert nicht die Elemente (Textboxen und Labels), die ich brauche.
Macht es einen Unterschied, ob ich mit verschachtelten Masterpages arbeite?
Kann man mir nochmal erklären, wie ich meine gewünschten Controls finde?
Im Falle, das ich hier nur kauderwelsch schreibe - bitte nochmal nachfragen^^
LG AoE
Hallo,
gibt es in ASPX die Möglichkeit und wenn ja - ist es sinnvoll, meine Textboxen auf existenz zu prüfen?
Ich bin das von PHP so gewohnt, das man sicherheitshalber schaut, ob ein Element existiert.
Man könnte die Seite verändern und dieses abschicken...
LG
Es war von der Funktion nur der Kopf angegeben.
create function dbo.monatspanne (@date datetime)
returns @datum monat_spanne
as
begin
....Anweisungen
inserte etwas in @datum
return
end
Die Funktion ist noch nicht fertig, daher nur erstmal pseudocode. Ist ja auch nicht schlimm. Der Rumpf interessiert grundlegen auch nicht.
@date und @datum sind weitestgehend unabhängig von einander. @date kommt rein, berechnen, @datum kommt raus.
Meine Frage ist jetzt, wie bzw ob es zu bewerkstelligen ist, dass die Tabelle @datum mit einem userdefined type (via Create Type) versehen wird.
Folgende Funktion geht
create type testDC from decimal(6,2)
go
create function dbo.test (@zahl testDC)
returns @rueck table (wert money)
as
begin
declare @schritt money = (Convert(money, @zahl * 5))
insert into @rueck
values (@schritt)
return
end
select * from dbo.test(4)
(Beispiel nur um meine Syntax nochmal zu verdeutlichen)
nur wäre hier ebenfalls die Frage offen, ob es möglich ist, für den return-datentyp einen userdefined type anzugeben
MSSQL 2008 R2
Hi, ich sitze gerade an einer Funktion, die als Rückgabewert eine von der Struktur immer wieder auftauchende Tabelle hat.
Da ich via
create type monat_spanne as table (anfang datetime, ende datetime)
meinen Typ erstellt habe, möchte ich diesen nun auch verwenden, nur klappt das nicht.
create function dbo.monatspanne (@date datetime)
returns @datum monat_spanne
as
wirft mir einen Fehler wegen Syntax.
Geht das an sich garnicht oder mach ich wieder mal was falsch?
MfG AoE
Das Unternehmen, für das ich arbeite hat auf der obersten Masterpage in der methode selectedindexchanged eine
response.redict(Context.Request.Url.AbsoluteUri);
drin
Warum die das so gemacht haben und wie die somit bisher sinnvoll das Datum auslesen konnten werde ich wohl noch erfragen müssen...man stelle ich vor allem db-einträge vor.
also ist es garkein Fehler in diesem Sinne und vor allem nicht von mir (hehe, soviel Zeit sinnlos dahin).
Dennoch danke
Ich hab nochmal recherchiert und bin mehrfach darauf gestoßen, unter Anderem auch direkt auf der MSDN von Microsoft, dass das mehrfache Verschachteln der Masterpages gelobt und angepriesen wird.
Ich habe bis jetzt mal ein paar weitere Verschachtelungen versucht, ohne das ein solches Problem wieder ausgetreten ist.
Ich guck nochmal wegen dem selectedIndexChanged. Schließlich gerät ja alles aus dem Lot, nachdem ich das Event hervorgerufen habe.
Hi,
ich arbeite an einer WebApplikation in ASPX für eine Bestandsführung.
Die Struktur ist für meinen Teil des Projektes folgende
MasterPage -> MasterPage -> ContentPage
Die 2. Master enthält eine DDL (DropDownList), über die man ein Datum angibt. SelectedIndexChanged sendet als Event die Seite zum Server.
Ist selectedIndexChanged nicht urheber des Aufrufes, funktioniert alles einwandfrei.
Ist selectedIndexChanged Urheber, wird die gesamte Seite 2 mal durchgearbeitet.
Das wäre ja im Grunde nicht soo das Problem (naja, später beim Werte in DB schreiben schon^^), nur sind im 2. Durchlauf alle Seitenwerte weg - so auch die selectedValue der DDL.
Im ersten existiert sie, im 2. nicht mehr.
Wenn die Seite dann wieder aufgebaut ist, wird aber in der DDL der Inhalt des zuletzt angewählten Index vorselektiert.
Mein Gedanke war schon, dass der was verwift, sodass sich der Index der DDL wieder ändert und das Event erneut gefeuert wird...
Dass ich 2 MasterPages durchlaufe ist sicher nicht der Fehler oder?
Bitte um Rat
Mit freundlichen Grüßen
AngelOfEffekt
danke, denke es kann geschlossen werden
Ok, also wenn ich das richtig sehe, werde ich somit in jeder contentpage das ein Objekt aus der Klasse erzeugen und diese dann nutzen. Also wieder so, wie es am Anfang war^^
Das wollte ich halt umgehen, aber wenns nicht geht...hehe.
Danke erstmal
Hi,
ich arbeite an einer WebApplikation in ASPX für eine Bestandsführung.
Dabei habe ich auf mehreren Seiten immer wieder die gleichen Teile die vorkommen (Tabellenauswertungen, Aufrufen zu SQL-Funktionen etc.), die Darstellung dessen bzw. programmtechnische Verarbeitung aber anders ist.
Ich habe jetzt angefangen, mit einer statischen Klasse zu arbeiten, da man damit von überall aus auf bestimmte Methoden und benutzerspezifische Daten zugreifen kann.
Was ich nicht bedacht habe ist, das die statische Klasse über den Seitenaufruf hinaus weiterbesteht. Also hat der nächste Besucher Zufgriff auf die Daten des vorherigen bzw. stören diese sich dann gegenseitig.
Vieleicht steh ich einfach auf dem Schlauch, nur finde ich kein sinvolles System, eine Klasse global zu definieren und beim Seitenende wieder verschwinden zu lassen.
Einfach bei Page_Unload die Werte rücksetzen geht ja auc nicht, da 2 User, die direkt nacheinander zugreifen, die Daten des anderen ändern bzw. stören.
Mein Gedanke ist, in einer Masterpage diese evtl zu initialisieren (BenutzerID etc.) und dann in den ContentPages nutzen zu können und am Ende des Seitenaufbaus wieder zu entladen.
Bitte um Rat
Mit freundlichen Grüßen
AoE
Hi,
Ich lerne zur Zeit die Grundlagen von Direct3D mit dem Riemers-Tutorial.
Dort wird gesagt, man kann Transform und Rotation multiplizieren, um beides zu erreichen.
Also so:
device.Transform.World = Matrix.Translation(-5, -10 * 1 / 3, 0) * Matrix.RotationAxis(new Vector3(0,0,1), angle);
Ich hab aus Neugier anstatt einer Multiplikation eine Addition draus gemacht. Das Ergebnis kann ich mir nicht erklären.
Ich konnte bisher nirgendwo Informationen darüber finden.
Ich hab mal beide Versionen angehangen, einfach mal schauen...
AoE