derzeit bin ich bei world4you: World4You
Habe dort einen DOmainserver Pro mit 4 gb derzeit mit .net 2.0 am laufen
für 15 euro im monat ist das sehr günstig, ich weis nicht wie das mit den rootserver so ist aber dort gäbe es auch einen start server für 39 ,- wäre auch eine überlegung
derzeit benützen wir in der firma nur noch für unseren online shop php und mussten daher einen extra windows server anmieten für die asp.net sachen ....
da sich world4you damals schon weigerte php auf einem windows server zu installieren ....
keine ahnung ob es zum preis leistungsverhältnis bessere miet server gäbe ....
es geht mir darum das .net 3.5 installiert wird
ob das viel arbeitsaufwand ist oder wenig die server lafuen derzeit mit .net 2.0
das die feature liste nicht wirklich viel großer ist ist mir bewusst 🙂
dennoch muss man auf manche sachen verzichten mit .net 2.0
Hallo liebe Community,
Heute habe ich bei meinem Provider angefragt ab wann asp.net 3.5 / .net 3.5 zur verfügung steht, da ich gerne mit Silverlight 1.1 web apps entwickeln würde und auch andere neuheiten von .net 3.5 gerne nutzen möchte...
der Provider schrieb mir zurück das eine asp.net 3.5 unterstützung in absehbarer zeit nicht vorgesehen ist ....
nun stellt sich die Frage:
Ist es wirklich soviel arbeit .net 3.5 am server zur verfügung zu stellen oder kennt sich da etwa der provider nicht aus ?
so weit ich weis muss man doch einfach nur .net 3.5 am server installieren um die features nutzen zu können oder irre ich mich da etwa?
ich kenn mich mit der materie leider nicht so aus und würde morgen halt gerne ein paar gute argumente beim Provider vorbringen um doch zu meinem ziel zu kommen.
da vs 2008 die tage bei mir eintrifft 🙂
lg Jabi
kleines beispiel
private delegate void SetLabelTextDelegate(Control ctrl, Label lbl, string value);
private static void _SetLabelText(Control ctrl, Label lbl, string value)
{
lbl.Text = value;
}
public static void SetLabelText(Control ctrl, Label lbl, string value)
{
ctrl.Invoke(new SetLabelTextDelegate(_SetLabelText), new object[] { ctrl, lbl, value });
}
private void button1_Click(object sender, EventArgs e)
{
Thread t = new Thread(MyThread);
t.Start();
}
// label1 wird hier als beispiel label genommen
private void MyThread()
{
SetLabelTex(this,label1,"TEST");
}
sollte dir weiterhelfen
Dort solltest du fündig werden 🙂
ja klar hab ja mit dem passwort vollen zugriff auf den ftp
bei meiner probe solange das file am ftp server ist kann kein neues raufgespielt werden also kann was beil löschvorgang nicht stimmen..... als exception kommt glaub ich dann ein timeout ... wäre vielleicht intressant die ftp logs mitzuschreiben beim update ...
heist pure ftp
das hat der server ausgespuckt wenn ich mich mit filezilla conecte
Antwort: 220-Welcome to Pure-FTPd.
Antwort: 220-You are user number 5 of 400 allowed.
Antwort: 220-This is a private system - No anonymous login
Antwort: 220 You will be disconnected after 15 minutes of inactivity.
das hat jetzt ncihts mit dem ISS ftp zu tun aber
wenn ich die server version aktualisieren wollte konnte er das nciht weil er dieverse Dateien nciht löschen könnte weil keine rechte war aber mit passwort angemeldet ....
irgendwie haut mit der neuen version nicht mehr viel hin ...
der updater wird manchmal nicht gestartet nach dem download des paketes
der download startet manchmal nicht und angegebene Prozesse werden ab und an nciht beendet weis nicht wieso ...
edit:
was noch oft passiert das der updater beim punkt lösche alte daten einfach stehen bleibt und zwar bei der letzten zu löschenden datei
habe noch was gefunden
wie ich die server version aktualisieren wollte gings bei mir auch nicht, erst als ich die daten vom ftp server gelöscht habe gings auch mit dem upload
hier findest du sicher die passende lösung
kann ich nur weiterempfehlen
Also Anwendungspfad ish nicht umbedingt gleich Pfad von K_Update.dll!
Bei mir ist die dll und die assembly die es ausführt zwei unterordner drunteer!
Also vielleicht in den K_Settings den application Path zum angeben machen - sonst eben die oben genannte sache.
das update wird ja von der update.exe ausgeführt die heruntergeladen wird ?
dort sollte die methode mit dem programmpfad eingefügt werden
oder habe ich da irgendwas falsch verstanden
den programmpfad beim admin mitgeben geht ja nciht da jeder wo anders das programm installiert haben könnte
heikles thema 🙂
zum löschen
die update exe wird ja mit ins programmverzeichnis gespielt ?
einfach die zu löschenden daten + eventuelle unterordner in die xml datei mit einbinden dann mit
// using System.Reflection;
// using System.IO;
public static string ApplicationPath
{
get
{
return Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
}
}
den programmpfad rausholen und dann einfach ein FileInfo Object erstellen
prüfen ob das file existiert wenn ja dann löschen
so in etwa hätt ich mir das vorgestellt
ich kann dir auch gerne eine klasse dazu zusammen schreiben damit wir das update schneller bekommen
müsstest dann nur für die xml datei sorgen wo die ganzen pfade bzw dateinamen drinnen stehen ...?
frage ...
wird in der nächsten version das löschen von dateien enthalten sein ?
also ich habe bei der ganzen sache ein bischen gemogelt....
und zwar hab ich mir ein Project (dll) erstellt in dem ich meine ganzen resourcen rein gestellt habe ....
dann bin ich ins Resource designer file hinein und hab einfach internal mit public getauscht und schon waren die resourcen zugänglich für mich
einfach einen using hinzugefügt: (remResourceCore = namespace )
using images = remResourceCore.Properties.Resources;
und dann ausgelesen mit
Image img = images.arrow_right;
vielleicht nicht ellegant aber stort mich ned .....
soviel dazu wenn du alles in einem project/projectmappe hast ....
ansonsten kann ich auch nur auf JuyJuka verweisen
kopier doch einfach die nötigen files und schreib die namespaces um
eine fehlermeldung wäre vielleicht sehr hilfreich 🙂
die Ajax dll einfach in den Bin Ordner legen und in die webconfig einbinden so wie beschrieben dann funktionierts
// DataGridView = dgvWork
string strValue = null;
for (int i = 0; i < dgvWork.Rows.Count; i++)
{
//auslesen:
strValue = dgvWork.Rows[i].Cells["Columnname"].Value.ToString()
// oder über Column index hier die 3te Spalte
strValue = dgvWork.Rows[i].Cells[2].Value.ToString()
}
könntest du den Source bitte als .cs Datei anhängen? Das Rauskopieren ist nervig.
kleingeschnitten und vorgekaut auch ? 🙂
sei doch nicht so faul
War sicher mehr als genug arbeit für Ihn das ganze zu schreiben 🙂
@kleines eichhörnchen.. das problem ist ja das die sounds ja schon nacheinander abgespielt werden es sollte funktionieren das mehrere zugleich wiedergegeben werden oder das wenn sound 1 bei der hälfte ist schon sound 2 starten kann
@ svenson danke für die links ich seh mir das mal an 🙂
Hallo liebe Community,
Grundszenario:
Ich lasse in meiner Anwendung in verschiedenen Methoden Sounds abspeilen, mit dem System.Media.Soundplayer.
Meine ganzen Sounds sind in einer Klasse definier folgend:
public class Play
{
private static MCIPlayback soundplayer;
private static Assembly assembly;
private const string ResourceAssemblyName = "remResourceCore.dll";
private const string ResourceAssemblyNamespace = "remResourceCore.Resources";
//private static Thread tMainSound;
public enum Sounds
{
Current_Exception_Sound,
Exception_Sound2,
transfer_updater_complete,
ProgramAlreadyExists,
rem_signal,
auth_denied,
}
private static void ThreadedPlay(object sp)
{
try
{
SoundPlayer spl = (SoundPlayer)sp;
spl.PlaySync();
spl.Dispose();
}
catch (ReminderException) { }
catch (MCIPlaybackException) { }
catch (Exception) { }
}
private static void ThreadedMCI_Mp3Play(object filepath)
{
try
{
soundplayer = new MCIPlayback();
soundplayer.Open((string)filepath, "mpegvideo");
soundplayer.Play();
}
catch (ReminderException) { }
catch (MCIPlaybackException) { }
catch (Exception) { }
}
public static void Sound(Sounds sounds)
{
switch (sounds)
{
case (Sounds.rem_signal):
try
{
assembly = Assembly.LoadFile(CCentral.ApplicationPath + "\\" + ResourceAssemblyName);
SoundPlayer sp = new SoundPlayer(assembly.GetManifestResourceStream(ResourceAssemblyNamespace + ".rem_signal.wav"));
Thread tMainSound = new Thread(new ParameterizedThreadStart(ThreadedPlay));
tMainSound.Start(sp);
sp.Dispose();
}
catch (ReminderException) { }
catch (MCIPlaybackException) { }
catch (Exception) { }
break;
case (Sounds.got_mail_master):
try
{
assembly = Assembly.LoadFile(CCentral.ApplicationPath + "\\" + ResourceAssemblyName);
SoundPlayer sp = new SoundPlayer(assembly.GetManifestResourceStream(ResourceAssemblyNamespace + ".got_mail_master.wav"));
Thread tMainSound = new Thread(new ParameterizedThreadStart(ThreadedPlay));
tMainSound.Start(sp);
sp.Dispose();
}
catch (ReminderException) { }
catch (MCIPlaybackException) { }
catch (Exception) { }
break;
case (Sounds.receive_transmission_kirk):
try
{
assembly= Assembly.LoadFile(CCentral.ApplicationPath +"\\"+ResourceAssemblyName);
SoundPlayer sp = new SoundPlayer(assembly.GetManifestResourceStream(ResourceAssemblyNamespace + ".st_kirk1.wav"));
Thread tMainSound = new Thread(new ParameterizedThreadStart(ThreadedPlay));
tMainSound.Start(sp);
sp.Dispose();
}
catch (ReminderException) { }
catch (MCIPlaybackException) { }
catch (Exception) { }
break;
case(Sounds.Current_Exception_Sound):
try
{
assembly= Assembly.LoadFile(CCentral.ApplicationPath +"\\"+ResourceAssemblyName);
SoundPlayer sp = new SoundPlayer(assembly.GetManifestResourceStream(ResourceAssemblyNamespace + ".unableToComplete.wav"));
Thread tMainSound = new Thread(new ParameterizedThreadStart(ThreadedPlay));
tMainSound.Start(sp);
sp.Dispose();
}
catch (ReminderException) { }
catch (MCIPlaybackException) { }
catch (Exception) { }
break;
case (Sounds.Exception_Sound2):
try {
assembly= Assembly.LoadFile(CCentral.ApplicationPath +"\\"+ResourceAssemblyName);
SoundPlayer sp = new SoundPlayer(assembly.GetManifestResourceStream(ResourceAssemblyNamespace + ".exception_sound2.wav"));
Thread tMainSound = new Thread(new ParameterizedThreadStart(ThreadedPlay));
tMainSound.Start(sp);
sp.Dispose();
}
catch (ReminderException) { }
catch (MCIPlaybackException) { }
break;
case (Sounds.ProgramAlreadyExists):
try {
assembly= Assembly.LoadFile(CCentral.ApplicationPath +"\\"+ResourceAssemblyName);
SoundPlayer sp = new SoundPlayer(assembly.GetManifestResourceStream(ResourceAssemblyNamespace + ".app_already_inUse.wav"));
Thread tMainSound = new Thread(new ParameterizedThreadStart(ThreadedPlay));
tMainSound.Start(sp);
sp.Dispose();
}
catch (ReminderException) { }
catch (MCIPlaybackException) { }
break;
case (Sounds.transfer_updater_complete):
try
{
assembly= Assembly.LoadFile(CCentral.ApplicationPath +"\\"+ResourceAssemblyName);
SoundPlayer sp = new SoundPlayer(assembly.GetManifestResourceStream(ResourceAssemblyNamespace + ".transfer_updater_complete.wav"));
Thread tMainSound = new Thread(new ParameterizedThreadStart(ThreadedPlay));
tMainSound.Start(sp);
sp.Dispose();
}
catch (ReminderException) { }
catch (MCIPlaybackException) { }
catch (Exception) { }
break;
}
}
}
aufgerufen wirds in der Anwendung dann logischerweise so:
Play.Sound(Play.Sounds.Current_Exception_Sound);
Zum Problem:
Obwohl ich jeden Sound( SoundPlayer ) in einem eigenen Thread starte, kann ich immer nur einen Sound abspielen
hab ich in meiner anwendung jetzt einen aufruf:
Play.Sound(Play.Sounds.Current_Exception_Sound);
Play.Sound(Play.Sounds.rem_signal);
Wird rem_signal so lange nicht abgespielt bis Current_Exception_Sound beendet ist
dabei wird doch für jeden sound ein eigener thread bzw ein neuer thread verwendet
vielleicht kann mir jemand bei der lösung des Problems helfen bzw .... vielleicht hab ich ja vom ansatz her etwas falsch gemacht ?
lg Jabi
was auch toll wäre wenn man zu einem datei update auch eine msi datei ausführen könnte ... also erst die daten updaten und dann eventuell etwas neues hinzuinstallieren oder bestimmte komponennten registireren dann müsste man nicht das ganze msi paket ziehen ....
Du kannst die MSI ja dem Update beipacken, und hinterher ausführen lassen nach dem Update. Das geht ja bereits!
stimmt ... 🙂
also ich würd gern mithelfen beim entwickeln
was ich noch schnell benötigen würde das man beim updaten auch bestimmte datein löschen kann ( wenn vorhanden )
da bei meinem programm einige daten verschlüsselt gespeichert werden und diese gegebenen falls erweitertwerden und somit nach einem update neu erstellt werden müssen oder ganz wegfallen
was auch toll wäre wenn man zu einem datei update auch eine msi datei ausführen könnte ... also erst die daten updaten und dann eventuell etwas neues hinzuinstallieren oder bestimmte komponennten registireren dann müsste man nicht das ganze msi paket ziehen ....
Da in der Doku nicht die ganzen Codes abgefangen werden bekommt ihr hier meine liste als zusatz, vielleicht werden SIe ja auch in die Doku AUfgenommen
Hier eine kleine vorlage zum abfangen des KResult:
K_Updater.UpdateCheckResult KResult = SUpdate.Check();
if (KResult.Code == 0)
{
// Kein Update nötig hier euren weiteren code einfügen
}
else if (KResult.Code == 1)
{
//Update nötig !
SUpdate.DoUpdate();
}
else
{
string strError = null;
switch (KResult.Code)
{
case 2: strError = @"Update kann nicht verarbeitet werden. K_Updater.dll zu alt
/ nicht unterstütztes Protokoll. Programm muss manuell
über die Homepage aktualisiert werden.
URL steht in UpdateDescription !";
break;
case 3: strError = @"Programmversion wird nicht mehr unterstützt.
Updatebeschreibung steht in UpdateDescription !";
break;
case 10: strError = @"Verbindungsfehler. Proxy-Einstellungen oder
Verbindungseinstellungen überprüfen !";
break;
case 700: strError = @"Unbekannter Credentials-Fehler !";
break;
case 800: strError = @"Unbekannter Ausnahmefehler bei Download von
updates.xml !";
break;
case 400: strError = @"Die Anforderung kann nicht ausgeführt werden !";
break;
case 401: strError = @"Client ist nicht berechtigt, auf diese Seite zuzugreifen !";
break;
case 403: strError = @"Ausführung der Methode verweigert !";
break;
case 404: strError = @"URL wurde nicht gefunden !";
break;
case 405: strError = @" Methode für diese Seite nicht erlaubt !";
break;
case 406: strError = @"Verarbeitung der Header ist nicht möglich !";
break;
case 407: strError = @"Proxies sollen verifiziert werden !";
break;
case 408: strError = @"Die Methode konnte innerhalb einer Zeitspanne
nicht ausgeführt werden !";
break;
case 409: strError = @"Konflikt entsteht, wenn neuere Änderungen
überschrieben werden !";
break;
case 410: strError = @"Die gewünschte Seite ist nicht mehr vorhanden !";
break;
case 900: strError = @"Unbekannter Proxy-Fehler !";
break;
default: strError = @"Unbekannter Update Fehler !";
break;
}
throw new Exception(strError);
}
Vielleicht kann man noch was einbauen und zwar:
Wenn eine Version nicht mehr Upgedatet werden kann... gleich ein neues msi paket runterladen => alte version deinstallieren und neue installieren....
kann man sogar bei den setup projecten einstellen :
Remove Previous versions
das wäre vielleicht noch etwas 😉
Grundsätzlich ist das schon möglich, nur sollte der Anwender immer die möglichkeit haben ein Programm bzw einen Prozess zu schließen, egal aus welchen Gründen.
wer soll das moderieren ? was glaubst du was da für ein chaos dabei raus kommt 🙂 ...
ich find das schon gut so wies ist such funktion nutzen kann ja ned so schwer sein 🙂 ansonstem wird einem ja eh geholfen oder man hilft 🙂
Mein Problem ist das ich zur MySQL DB keine verbindung herstellen kann
Da DieDatenbank beim Provider hinter der Firewall liegt und ich nur vom webserver aus zugreifen kann ....
vielleicht kannst du da was machen das die daten in eine config datei geschrieben werden und dann von den php daten am webserver ausgelesen werden ?
edit: kleinen fehler ausgebessert 🙂
Da ich oftmals einen Md5 Hash von einem string brauche hab ich mir mal ganz fix ein kleinen Programm geschrieben das das für mcih erledigt....
Vielleicht können dies ja andere leute auch noch benötigen
Das Programm ist auch für Anfänger zum ansehen geeignet das ich
zu einem ein Eventmodel eingebaut habe
Sollten es die Admins es für gut befinden könnte man den Thread ja auch in die Faq geben für Events und Controls in Threads aktualisieren ....
delegates und EventArgs :
public delegate void HashFinishedEventHandler(object sender, HashFinishedEventArgs e);
public class HashFinishedEventArgs : EventArgs
{
private string _hashedString;
public string HashedString
{
get { return this._hashedString; }
set { this._hashedString = value; }
}
public HashFinishedEventArgs(string HASHEDSTRING)
{
this._hashedString = HASHEDSTRING;
}
}
public delegate void HashStartEventHandler(object sender, HashStartEventArgs e);
public class HashStartEventArgs : EventArgs
{
private string _stringToHash;
public string StringToHash
{
get { return this._stringToHash; }
set { this._stringToHash = value; }
}
public HashStartEventArgs(string STRINGTOHASH)
{
this._stringToHash = STRINGTOHASH;
}
}
public delegate void HashProgressPercetEventHandler(object sender, HashProgressPercetEventArgs e);
public class HashProgressPercetEventArgs : EventArgs
{
private int _bytesHashed;
public int BytesHashed
{
get { return this._bytesHashed; }
set { this._bytesHashed = value; }
}
private int _bytesToHash;
public int BytesToHash
{
get { return this._bytesToHash; }
set { this._bytesToHash = value; }
}
public int PercentState
{
get { return Convert.ToInt32(Math.Round((double)((BytesHashed * 100) / BytesToHash), 0)); }
}
public HashProgressPercetEventArgs(int BYTESHASHED, int BYTESTOHASH)
{
this._bytesHashed = BYTESHASHED;
this._bytesToHash = BYTESTOHASH;
}
}
einbau der Events in die Klasse :
#region Events
public event HashStartEventHandler HashStart;
internal virtual void OnHashStart(string strToHash)
{
if (this.HashStart != null)
{
this.HashStart(this, new HashStartEventArgs(strToHash));
}
}
public event HashFinishedEventHandler HashFinished;
internal virtual void OnHashFinished(string strHashedString)
{
if (this.HashFinished != null)
{
this.HashFinished(this, new HashFinishedEventArgs(strHashedString));
}
}
public event HashProgressPercetEventHandler HashPercentState;
internal virtual void OnHashPercentState(int BytesHashed, int BytesToHash)
{
if (this.HashPercentState != null)
{
this.HashPercentState(this, new HashProgressPercetEventArgs(BytesHashed, BytesToHash));
}
}
#endregion
Verwendung des events:
public void Hash()
{
OnHashStart(StringToHash);
string buffer = null;
try
{
buffer = get_Md5HashString(StringToHash);
}
catch (Exception ex) { throw new Exception("Fehler beim hashen :\n" + ex.Message); }
OnHashFinished(buffer);
}
und zum anderem mit Threads in Windows Forms arbeite und dort auch die Controls in einem anderem Thread aktualisieren lasse.
delegate und Methode :
public class FormDelegates
{
//--------------------------------------------------------------------------------------------------
private delegate string GetTextBoxTextDelegate(Form frm, TextBox txt);
private static string _GetTextBoxText(Form frm, TextBox txt)
{
return txt.Text;
}
public static string GetTextBoxText(Form frm, TextBox txt)
{
return frm.Invoke(new GetTextBoxTextDelegate(_GetTextBoxText), new object[] { frm, txt }).ToString();
}
//--------------------------------------------------------------------------------------------------
}
Verwendung in der Form:
private void _DoWork()
{
FormDelegates.SetButtonEnabled(this, btnHash, false);
FormDelegates.SetTextBoxText(this, txtHashed, "");
FormDelegates.SetTextBoxEnabled(this, txtToHash, false);
FormDelegates.SetProgressbarValue(this, pgrBarHashState, 0);
Md5Hash md5 = new Md5Hash(FormDelegates.GetTextBoxText(this, txtToHash));
md5.HashStart += new HashStartEventHandler(md5_HashStart);
md5.HashPercentState += new HashProgressPercetEventHandler(md5_HashPercentState);
md5.HashFinished += new HashFinishedEventHandler(md5_HashFinished);
md5.Hash();
}
private void btnHash_Click(object sender, EventArgs e)
{
Thread worker = new Thread(_DoWork);
worker.Start();
}
Der komplette SourceCode ist dann im Anhang zu finden und ich hoffe es hilft einigen leuten
Hier soltlest du auch fündig werden die bieten recht viel an und wenn nciht kannst du ja per mail anfragen ob sie das bereitstellen ... oder du rufst dort an ...
würde auch eine dll draus amchen und namespaces nützen
also ohne weiteres funktioniert das so nicht da auch für dich wenn du dich an der seite anmeldest oder sie betretest wird für dich eine eigene session angelegt .....
es gibt hier schon noch andere sachen wie man an sessions kommen kann das ist aber nicht legal und ich möchte das stichwort nicht nennen ... aber im google wirst sicher fündig ....
zum abspielen des mp3 entweder bei self html nachschauen dort gibt es eine erklärung oder mit dem Silverlight mediacontrol das ganze bewerkstelligen ....
für die enabled true/false bei den controls kansnt du Ajax nehmen
oder wenn du das nicht machen willst kannst du das ganze ja in Silverlight oder Flash machen
sollte genug sein um die wundzulesen mit den themen
Meiner Meinung nach sehe ich das gespalten.....
Ich ahb mir auch immer leichter getan wenn mir jemand etwas erzählt hat bzw erklärt hat ... hat mir oftmals sehr geholfen das ganze besser zu verstehen ... auch mit beispielen/samples ....
andererseits wenn wegen jeder kleinen frage 100 selbe Threads generiert werden geht das auf die arme arme Datenbank ... und müllt alles zu und lässt eventuell wichtigere Threads untergehen .....
vielleicht sollte man doch auch ein anfänger forum zur verfügung stellen wo speziell solche fragen geklärt werden können oder wo man anfängern helfen kann grundlegendes besser oder zu verstehen....
vielleicht nimmt sich ja den Vorschlag jemand zu herzen ... dann gibts auch keine hitzigen diskusionen wegen solchen sachen .....
zum abschluss....
ich bin froh das es mycsharp.de gibt und sehr froh das es Leute gibt die so etwas freiwillig auf die beine stellen .... und viel freizeit dafür opfern .... mir helfen viele sachen hier und ich denke anderen geht es auch so ......
ein zufriedener mycsharp.de user
ps: ich war in eile rechtschreibfehler und große buchstaben dürfen behalten werden 😜
Original von wassertrinker
Ich baue die neue XML-Datei aber selber zusammen, nicht per Framework.
Gab beim Versuch es mit Framework zu machen Probleme mit der Hardware.
Der PDA war wohl zulangsam.
du kannst doch
Thread.Sleep(100); // oder mehr
verwenden dann is dein PDA nicht so überlastet
einfach in die schleife oder onst wo reingeben wo viel wiederholt wird
für größere tabellen mit merheren spalten geht auch
ds.Tables[0].Rows[2]["mein_SpaltenName"].ToString();
mag sein das du dies einfach empfindet ...
ich ahbs so gelöst weil ich das Page object ja auch noch für andere sachen brauche databind etc ....
also entwerder hab ich mich fals ausgedrückt oder du hast meinen post nicht gelsesen.....
den "this" operator nimmst du natürlich auf der code behind datei bei deiner webseite her
App_Code:
public static class SessionClass
{
public static string getLanguageSession(System.Web.UI.Page page)
{
string sprache = null;
try
{
sprache = page.Session["Language"].ToString();
}
catch
{
sprache = "de-DE";
}
return sprache;
}
}
private void setSpeech(System.Web.UI.Page page)
{
//Die Startsprache einstellen, wenn die Seite geladen wird
string sprache = SessionClass.getLanguageSession(page));
}
und jetzt kansnt du beide klassen im Code-Behind verwedenen und für
System.Web.UI.Page page nimmst du dann "this" her
Entweder fehlts dir an Grundlagen oder es ist echt nicht verständlich geschrieben
Die Klassen die du im App_Code hast verwendest du ja auf deinen seiten das heißt die Klasse muss irgendwo geöffnet/initialisiert werden und dort kannst du dann deine Seite mit this angeben
Hier mal ein bespiel von mir:
App_Code:
// Auszug aus einer Klasse
public static class remSecurity
{
public static void LogOut(System.Web.UI.Page page)
{
page.Session.Clear();
page.Session.Abandon();
page.Response.Redirect(System.Configuration.ConfigurationManager.AppSettings.Get("LoginPath"), true);
}
public static void LogOut(System.Web.UI.MasterPage page)
{
page.Session.Clear();
page.Session.Abandon();
page.Response.Redirect(System.Configuration.ConfigurationManager.AppSettings.Get("LoginPath"), true);
}
}
Jetzt meine Asp.NET seite wo der LogOut statt findet:
Auf der Seite ist ein Button der btnLog heißt
In der COde Behind Datei ist das Click event definiert:
private void btnLog_Click_Abmelden(object sender, EventArgs e)
{
remSecurity.LogOut(this);
}
Das sollte jetzt aber keine weiteren Fragen aufwerfen denn noch einfacher kann ichs dir nciht erklären
lg Jabi
rechtschreiber und fehler dürfts behalten 🙂
public static class TestClass
{
public static string MeineApp_Code_Methode(System.Web.UI.Page page)
{
string strTest = null;
return strTest = page.Session["meineSessionVariable"].ToString();
}
}
sollte helfen 🙂
edit: und so auf der seite einbinden
private void Irgendwas()
{
string strIrgendwas = null;
strIrgendwas = TestClass.MeineApp_Code_Methode(this);
}
Hallo,
danke für den netten tipp aber der versuchts ja wieder mit nem Dataset.
ich weis nun nciht wie ich die gernerische lsite als datasource hernehmen kann
der eine im letzten post hats ja auch nicht geschafft
edit:
ich werd mal probieren ein typisiertes dataset ohne assistenten zu erstellen und dann den report damit zu befüllen und dann fülle ich das dataset einfach beim page_Load event manuell auf und übergebe es an den report viewer vielleicht funktioniert das so .....
edit 2:
funktioniert wunderbar
kann jedem der das selbe problem das raten:
Typisiertes DataSet ohne assistenten erstellen und dann in der codebehind datei wo der reportviewer ist das data set füllen und dann übergeben
Hallo leute,
Ich habe eine Web Application mit ASP.net und AJAX erstellt.
Dort möchte ich auch eine Seite bereitstellen die diagramme aufbereitet.
So weit so gut... mein Problem ist das ich die daten die ich dem Diagramm geben möchte in Klassen aufbereitet werden und nicht in einem typisierten DataSet.
Hat jemand erfahrungen damit einen ms report ohne ein typisiertes dataset bereitzustellen ?
über google hab ich leider ncihts hilfreiches gefunden ....
auf msdn gab es einen artikel ein Business-Object zu erstellen das dann in den Webseiten-Datenquellen angezeoigt wird ... aht aber leider nicht funktioniert bei mir
eventuell kann mir jemand helfen....
Ich benütze VS 2005 std edt ... keine crystal reports enthalten deswegen nehme ich die ms reporting WebForms
lg Jabi
ja schon aber wenn wer das ding versehentlich aus der registry gelöscht hat dann ist bei " reparieren" auch nochmal die abfrage da ob autostart schon existiert ansonsten wirds nochmal eingetragen ... ich habe in meinem programm auch die möglichkeit autostart zu deaktivieren deswegen hab ichs so gelich in das snippet eingetragen
eine frage
wo kann ich den pfad einstellen an den weitergeleitet wird sobald die session abgelaufen ist ?
hallo
hab dass jetzt mal so auf die schnelle probiert und es funktioniert aber der bildschirm bleibt grau und es scheint noch die form offen zu sein obwohl sie nicht mehr da ist
this.Close();
wurde aber ausgeführt
hab leider keine zeit mehr werds mr abends oder morgen nochmal ansehen und die lösung posten wenn ich sie finde g
ich ahb mal versucht das ganze als dialog result zu machen
bildschirm wird grau ... die form ist aktiv ( kann sie mit alt + f4 schließen )
aber die form ist nicht zu sehen
hier diene abgeänderte methode:
public DialogResult ShowShadowDialog()
{
_shadowForm.TopMost = true;
_shadowForm.FormBorderStyle = FormBorderStyle.None;
_shadowForm.Opacity = 0;
this.Owner = _shadowForm;
this.TopMost = true;
//wenn ich scho dialog hier einsetze wo vorher das show war geht gar ncihts .....
//_shadowForm.ShowDialog();
_shadowForm.Location = Screen.GetBounds(new Rectangle(int.MinValue / 2, int.MaxValue / 2, int.MaxValue, int.MaxValue)).Location;
_shadowForm.Size = new Size(int.MaxValue, int.MaxValue);
switch (ActiveShadowMode)
{
case ShadowMode.GreyOut:
{
Bitmap bitmap = new Bitmap(_shadowForm.Width, _shadowForm.Height, PixelFormat.Format32bppArgb);
using (Graphics graphics = Graphics.FromImage(bitmap))
{
graphics.CopyFromScreen(_shadowForm.Location, new Point(0, 0), _shadowForm.Size);
}
_shadowForm.BackgroundImage = GrayScaleImage((Image)bitmap);
break;
}
case ShadowMode.Darken:
_shadowForm.BackColor = GreyOutModeBaseColor;
break;
}
_shadowTimer.Interval = TimerInitWait;
_shadowTimer.Tick += new EventHandler(shadowTimer_Tick);
_shadowTimer.Enabled = true;
return _shadowForm.ShowDialog();
}
wo liegt der fehler ?