Grundsätzlich geht es bei anderen Windows Installer benutzenden Installern nicht anders. Das stimmt.
Welcher Server kommt zum Einsatz -2008?
Ich kenne die Problematik unter Vista. Software die im Programmverzeichnis installiert wurde konnte nicht in ihre Einstellungsdatei schreiben. Man musste Sie dann als Administrator ausführen. Ursache ist, dass das Programmverzeichnis ab Vista auch zu den Systemverzeichnissen gehört. Du hast zwar geschrieben, das die Systeme nicht großartig verglichen werden können aber das Betriebsystem sollte man schon vergleichen können.
Diesen Beitrag muss ich in der Suche übersehen haben. Oder er passte nicht auf mein Suchraster. Klingt aber interessant und werde ich mal testen.
Die GetNodeAt Variante werde ich auch noch mal testen. Und dann mal abwägen.
Edit:
Zum Abschluß möchte ich meine Lösung kurz zeigen. Ich habe mich dann doch für die GetNodeAt Methode entschieden.
void tvBuildingProperties_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
tvBuildingProperties.SelectedNode = tvBuildingProperties.GetNodeAt(e.Location);
}
}
void tvBuildingProperties_AfterSelect(object sender, TreeViewEventArgs e)
{
if (e.Node.Tag != null)
{
e.Node.ContextMenuStrip.Enabled = true;
}
}
Danke für eure Hilfe.
Hallo trib,
das Setup unter VS ist etwas eingeschränkt. Wenn du dich mit xml auskennst ist vielleicht WiX (Windows Installer XML) etwas für dich. Dies gibt es sogar mit VS Integration.
Ich habe die Erfahrung gemacht, dort viele Setup-Bedingungen schnell und einfach lösen zu können. Mit WiX wurde auch das Office 2007 Setup erstellt. Nur um mal die vielseitigen Möglichkeiten hervorzuheben.
Mfg Sebastian
Ich benötige den Index um das zugrundeliegende Objekt auch aus der Datenbank löschen zu können.
Ich habe mein Code nun etwas anpassen können. So klappt es auch allerdings muss nun immer erst mit der Maus auf das Node geklickt werden bevor ich das Kontextmenü nutzen kann,
tvBuildingProperties.Nodes [tvBuildingProperties.SelectedNode.Parent.Parent.Index].Nodes [tvBuildingProperties.SelectedNode.Parent.Index].Nodes.RemoveAt (tvBuildingProperties.SelectedNode.Index);
Schön wäre jedoch, das man gleich mit der rechten Maustaste das Kontektmenü nutzen kann. Tut man das wird das Node auch selektiert man bekommt aber das RootNode als selektiert zurück.
Hallo Forum,
ich habe mal wieder ein Problem. In meiner Form wird ein TreeView dynamisch erzeugt das so aussehen kann:
Root
|
Node1
| |
| SubNode1
| | |
| | SubSubNode1
| | SubSubNode2
| SubNode2
|
Node2
Auf SubSubNode1 und SubSubNode2 liegt ein ContextMenueStrip zum Löschen des SubSubNodes. Der Code sieht bisher so aus:
private void löschenToolStripMenuItem_Click(object sender, EventArgs e)
{
if (DialogResult.Yes == MessageBox.Show(this, "Möchten Sie das Element wirklich löschen?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question))
{
if (this.service.DeleteElement(this.building.Elements[tvBuildingProperties.SelectedNode.Index]) == true)
{
tvBuildingProperties.Nodes[0].Nodes.RemoveAt(tvBuildingProperties.SelectedNode.Index);
}
else
{
MessageBox.Show(this, "Fehler beim Löschen", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
Mein Problem ist, das SelectedNode.Index mir zwar den richtigen Index unterhalb von SubNode1 zurückgibt ich habe dann das falsche aus dem TreeView Löschen würde.
Nun gibt es ja die Methoden HitTest und GetNodeAt aber dort bekam ich jedesmal null zurück beim Versuch mit Mauskoordinaten zu arbeiten.
Ich denke ich sehe vor lauter Suchen die Lösung nicht. Denn eigentlich ist es ja ein banales Problem.
Danke Schamese,
die Komponente sieht gut aus. Allerdings sollte man das BackgroundImage über eine Property zuweisen können. Oder kann man das und ich habs nicht gesehen?
Hallo Forum,
ich bin gerade dabei eine eine kleine Warteanimation in mein Programm einzubauen. Das Prinzip ist ähnlich dem eines SplashScreens nur das es halt auch genutzt wird, wenn die Hauptform schon geladen ist.
So weit funktioniert es auch schon nur wird das Backgroundimage nicht angezeigt, was dazu führt das nur der Ladebalken frei auf dem Desktop lädt. Das Background Image wird im Designer angelegt mit:
this.BackgroundImage = global::AdministrationClient.Properties.Resources.StartSplash;
Anbei mal etwas Code:
private void createMemberToolStripMenuItem_Click(object sender, EventArgs e)
{
Splash splFrm = new Splash();
splFrm.MaxValue = 100000;
splFrm.MinValue = 0;
splFrm.Show(this);
MemberForm frmMember = new MemberForm();
frmMember.MdiParent = this;
//Zeitverzögerung für Tests
for (int i = 4; i < 100000; i++)
{
splFrm.setStatusValue(i);
}
splFrm.Close();
frmMember.Show();
}
Der "Splash"
public partial class Splash : Form
{
public delegate void statusDelegate(int status);
public Splash()
{
InitializeComponent();
}
public void setStatusValue(int Status)
{
this.Invoke(new statusDelegate(test), Status);
}
public void test(int value)
{
progressBar1.Value = value;
}
public int MinValue
{
set
{
progressBar1.Minimum = value;
}
}
public int MaxValue
{
set
{
progressBar1.Maximum = value;
}
}
}
Hallo Forum,
ich habe nun herausgefunden, das es an meiner Signierung liegt. Allerdings möchte ich mein Klassenbibliothek nur ungern unsigniert auf einem Server liegen haben. Hat einer ähnliche Erfahrungen gemacht und kann mir weiterhelfen?
mfg Sebastian
Hallo Forum,
Mein WebService hat zwei Methoden:
bool Login(string username, string password)
orders GetOrders()
Das ganze läßt sich auch prima über die URL aufrufen und auch in einer Beispiel-Clientanwendung konsumieren.
Versucht der Client sich nun aber mit "Login" anzumelden bekomme ich immer die Meldung:
System.ServiceModul.FaultException
"Die Anforderung konnte vom Server nicht verarbeitet werden. ---> Die Assembly lässt keine Aufrufer zu, die nicht voll vertrauenswürdig sind."
Ich weiß nun nicht mehr wo ich noch ansetzen kann.
Hallo,
@dN!3L: Die Wsdl.exe kenne bisher nur vom Konsumieren fremder WebServices. Das darauf nicht gekommen bin. ?(
@Xynratron: Ich schreibe sowohl Client als auch Service selbst. Aber dann brauche ich doch nicht vererben, wenn ich im Client die generierten Klassen entferne und durch ein using ersetze. Und eigentlich falle ich doch dann wieder dahin zurück, das beim Aktualisieren des Service alles noch mal angepasst werden muss, oder?
Hallo an alle.
@Rainbird: Die Anwendung kommuniziert übers Internet. Remoting wäre schön gewesen. 😉
@dN!3L: Wie kann ich denn die Proxies selbst generieren? Hast du dazu vielleicht ein paar Links oder ein kleine Anleitung?
Danke für die bisherigen Antworten.
Was dann bedeutet, dass ich beim Aktuallisieren des WebService im Projekt auch die Proxy-Klasse wieder anpassen muss, oder?
Hallo Forum,
ich erstelle gerade ein WebService, dieser stellt eine öffentliche Methode bereit mit einem Parameter. Dieses Parameterobjekt stammt aus einer Bibliothek, die sowohl im WebService als auch im WinForm Projekt referenziert ist. Rufe ich nun in meiner WinForm die WebService Methode auf, ist der Parametertyp auf einmal anders. Was mache ich an dieser Stelle falsch?
Beispiel:
WebService
public void CreateAccount(myLib.User)
...
WinForm
public void CreateAccount(WinForm.Test.WebService.User)
...
vbprogger, ich danke dir. Damit klappt es nun.
Danke talla,
genau das war das Problem.
SeeQuark, danke auch dir allerdings denke ich ist das doch etwas zu viel Aufwand um nur zwischen zwei Fenster zu wählen. Insgesamt aber ein sehr interessanter Artikel, der den Weg zu meinen Favoriten gefunden hat.
Hallo Forum,
ich bin absoluter Neuling im Bereich WPF und taste mich langsam ran.
Im Moment spiele ich mit der App.xaml und versuche dort je nach übergebenen Parameter window1 oder window2 anzeigen zu lassen. Mit WinForms war das recht einfach in der program.cs zu erledigen aber unter WPF will es einfach nicht.
In der App.xaml habe ich das StartUp-Event registriert.
Mein Code bisher:
private void Application_Startup(object sender, StartupEventArgs e)
{
string[] args = e.Args;
if (args.Length > 0)
{
if (args[0].ToLower() == "window1")
{
Window1 window1 = new Window1();
window1.Show();
Application.Current.MainWindow = window1;
}
else if (args[0].ToLower() == "window2")
{
Window2 window2 =new Window2();
window2.Show();
Application.Current.MainWindow = window2;
}
}
else
{
Window1 window1 = new Window1();
window1.Show();
Application.Current.MainWindow = window1;
}
}
Leider macht er mir immer das Window1 mit auf, wenn er Window2 öffnen soll. Nun gibt es ja die WindowCollection, diese hat aber keine Remove oder Add Methoden.
Aber auf der Maschine ist keine Firewall an. Auf meinem lokalen System ist eine an und es geht. Ich werde es ausprobieren.
Ja das Klassengerüst ist nicht von mir, sondern wurde von mir nur auf .net 2.0 umgestellt und ich habe noch weiter FTP-Befehle implementiert. Aber das hatte ich auch geschrieben.
Hallo Forum,
meine Problemstellung verlangt in einem regelmäßigem Zeitintervall Daten per FTP abzuholen und diese in einem weiteren Step abzuarbeiten.
Ich habe das ganze als Dienst mit einer in teilen selbstgeschriebenen FTP-Klasse gelöst. Diese Klasse nutzt den "RETR" Befehlt um Daten herunterzuladen.
Ursprünglich wurde das Programm auf Windows XP Maschinen betrieben und funktioniert dort auch nachwievor. Nun soll das Programm auf Windows Server 2003 betrieben werden, was leider bisher zu nicht nachvollziehbaren Problemen beim herunterladen führt.
Der Dienst meldet, das er den angegebenen Host nicht finden kann, obwohl zuvor ein Login erfolgreich durchgeführt worden ist. Meine Vermutung ist, das die Datenverbindung möglichweise in diesem Fall nicht funktioniert.
Nachfolgend noch etwas Code aus dem Service und der FTP Klasse:
Service Timer_Elapsed-Methode:
myFTP.FTPClient ftp = new myFTP.FTPClient();
ftp.RemoteHost = this.ftpHost;
ftp.RemoteUser = this.ftpUser;
ftp.RemotePassword = this.ftpPassword;
ftp.Login();
ftp.SetBinaryMode(false);
ftp.Download("TestDaten.txt", myFTP.FTPClient.DownloadCommand.GET);
ftp.Close();
...
FTP-Download-Methode (von mir auf .net 2.0 angepasst)
public void Download(string RemoteFileName, DownloadCommand CommandType)
{
if(!logined)
{
Login();
}
if (LocalFileName.Equals(""))
{
LocalFileName = RemoteFileName;
}
if(!System.IO.File.Exists(LocalFileName))
{
System.IO.Stream st = System.IO.File.Create(LocalFileName);
st.Close();
}
System.IO.FileStream output = new System.IO.FileStream(LocalFileName, System.IO.FileMode.Open);
System.Net.Sockets.Socket cSocket = createDataSocket();
long offset = 0;
if(resume)
{
offset = output.Length;
if(offset > 0)
{
sendCommand("REST " + offset);
if(this.returnValue != 350)
{
offset = 0;
}
}
if(offset > 0)
{
long npos = output.Seek(offset, System.IO.SeekOrigin.Begin);
}
}
//sendCommand("GET " + RemoteFileName);
//sendCommand("RETR " + RemoteFileName);
sendCommand(Enum.GetName(typeof(DownloadCommand), CommandType) + " " + RemoteFileName);
if(!(this.returnValue == 150 || this.returnValue == 125))
{
throw new System.IO.IOException(this.reply.Substring(4));
}
while(true)
{
this.bytes = cSocket.Receive(this.buffer, this.buffer.Length, 0);
output.Write(this.buffer,0,this.bytes);
if(bytes <= 0)
{
break;
}
}
output.Close();
if (cSocket.Connected)
{
cSocket.Close();
}
readReply();
if( !(this.returnValue == 226 || this.returnValue == 250) )
{
throw new System.IO.IOException(this.reply.Substring(4));
}
}
Datenkanal (von mir auf .net 2.0 angepasst)
private System.Net.Sockets.Socket createDataSocket()
{
sendCommand("PASV");
if(this.returnValue != 227)
{
throw new System.IO.IOException(this.reply.Substring(4));
}
int index1 = this.reply.IndexOf('(');
int index2 = this.reply.IndexOf(')');
string ipData = this.reply.Substring(index1 + 1, index2 - index1 - 1);
int[] parts = new int[6];
int len = ipData.Length;
int partCount = 0;
string buf="";
for (int i = 0; i < len && partCount <= 6; i++)
{
char ch = Char.Parse(ipData.Substring(i,1));
if (Char.IsDigit(ch))
{
buf+=ch;
}
else if (ch != ',')
{
throw new System.IO.IOException("Malformed PASV reply: " + this.reply);
}
if (ch == ',' || i+1 == len)
{
try
{
parts[partCount++] = Int32.Parse(buf);
buf="";
}
catch (Exception)
{
throw new System.IO.IOException("Malformed PASV reply: " + this.reply);
}
}
}
string ipAddress = parts[0] + "."+ parts[1]+ "." + parts[2] + "." + parts[3];
int port = (parts[4] << 8) + parts[5];
System.Net.Sockets.Socket s = new System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp);
System.Net.IPEndPoint ipEndPoint = new System.Net.IPEndPoint(System.Net.Dns.GetHostEntry(ipAddress).AddressList[0], port);
try
{
s.Connect(ipEndPoint);
}
catch(Exception)
{
throw new System.IO.IOException("Can't connect to remote server");
}
return s;
}
Eine Firewall oder gesperrte Ports scheiden aus. Als Basis für meine FTP-Klasse diente dieser Code: http://www.csharphelp.com/archives/archive9.html
Danke vbprogger,
allerdings handelt es sich bei meiner Anwendung um eine Klassenbibliothek. Da ist ein registry-Zugriff im späteren Einsatz sicher ungewünscht. Trotzdem danke.
Danke euch beiden. Ihr habt mir sehr weitergeholfen. Frohe Ostern.
Hallo Forum,
ist es möglich mit dem Framework den Ländercode des Betriebsystems abzufragen?
Also bei einer deutschen Installation DE und bei einer englischen US usw. zu erhalten.
mfg Sebastian
Hallo kleines_eichhoernchen,
vielen Dank für den Hinweis. Ich denke da werde ich mich schnellstmöglich Einlesen.
Inzwischen habe ich auch den Fehler für die fehlerhafte Ausgabe gefunden. Es war ein fehlendes writeEndElement();
@mirkom76: entschuldige, Ich wurde über deinen Beitrag nicht informiert. Somit habe ich ihn nicht bemerkt.
verwendetes Datenbanksystem: <xml>
Hallo Leute,
ich habe zwei Klassen:
Klasse A stellt eine Methode getNode, der eine xmlTextWriter Instanz übergeben wird. Diese Methode macht nichts anders als ein spezielles Node zu schreiben.
Klasse ACollection ist eine Klasse, die IList, ICollection und IEnumerable erbt und Member vom Typ Klasse A aufnimmt. Zusetzlich hat sie die Methode GetNodes, der eine xmlTextWriter Instanz übergeben wird.
Die Methode ist so aufgebaut
public void GetNodes(XmlTextWriter writer)
{
foreach(ClassA classObject in classACollection)
{
classObject.getNode(writer);
}
}
Aussehen sollte das Ganze dann so:
<NodeA>
...
</NodeA>
<NodeA>
...
</NodeA>
Aussehen tuts aber so:
<NodeA>
...
<NodeA>
...
</NodeA>
</NodeA>
Hat jemand eine Idee was ich falsch mache? Ich finde meine Logik ok, aber sie ist es ja offensichtlich nicht.
Ah, ok. Ist also was, was ich für später auf jedenfall benötigen werden, wenn das Mini-Framework wächst.
Sieht auf dem ersten Blick umständlich aus. Dafür brauche ich ein wenig Freizeit am Wochende. Wo ist der Vorteil, wenn es auf ein ähnliches Ergebnis hinausläuft?
Hallo Bernd,
der Datenbankname fehlt natürlich nur im Pseudocode 😉
Dein Tipp ist im Moment die Lösung für mich. Danke dir.
Vielleicht hat der ein oder andere aber auch noch andere Lösungsansätze, dann immer her damit.
Hallo Forum,
ich bin gerade zu Lernzwecken dabei ein kleines "Shopping"-Framework zu entwickeln. Alle meine Klassen mit Properties, Methoden und Felder sind designed.
Da ich für die Nutzung die Datenbankstrukur und -system festgelegt habe, habe ich in meinen Klassen auch Methoden wie etwa SaveProduct vorgesehen. Weiterhin habe ich in meinem Framework, die Konfiguration der allgemeinen Datenbankverbindung vorgesehen, in der etwa der Server und der Datenbankbenutzer und Kennwort angegeben wird.
Mein Problem besteht nun darin, dass ich im Moment immer eine Property für die Datenbankverbindung in meinen Klassen haben muss. Ich mir aber vorstelle, einfach einmal eine Instanz der Datenbankkonfiguration erstelle und diese dann automatisch - quasi im Verborgenen- an meine Klassen weitergebe.
PseudoCode wie es bisher ist:
Test.Shopping.Configuration.DataBase dbconfig = new Test.Shopping.Configuratio.DataBase(dbServer,dbUser,dbPassword);
Test.Shopping.MasterData.Product pr = new Test.Shopping.MasterData.Product();
pr.DataBaseSettings = dbconfig;
pr.Name = "Testproduct";
pr.SaveProduct();
PseudoCode wie es sein sollte:
Test.Shopping.Configuration.DataBase dbconfig = new Test.Shopping.Configuratio.DataBase(dbServer,dbUser,dbPassword);
Test.Shopping.MasterData.Product pr = new Test.Shopping.MasterData.Product();
pr.Name = "Testproduct";
pr.SaveProduct();
Könnt ihr mir hier Hilfestellung, Literaturhinweise oder Denkanstöße geben?
Ich bin mir bewußt, dass es sich eigentlich so gehört die Datenbindung zu trennen. Aber für ein privates Projekt denke ich geht es schon in Ordnung, es ist ja nur zum lernen da.
Mfg Sebastian
Hallo Leute,
ich bin auf der Suche nach einem Control oder Codesnippet, dass mir den Text eines Word 2007 Dokuments inklusive Formatierung usw. auslesen kann. Hat einer schon mal so ein Control benötigt oder gar erstellt?
Das Auslesen des Inhalts bekomme ich schon hin nur mit den Formatierungen komme ich im Moment nicht klar.
Ziel ist es, diesen Text später in einer Anwendung zum Lesen anzuzeigen.
Ich habe auch schon nach fertigen Controls gesucht und bin auf das TX Textcontrol gestossen. Es ist nur leider etwas zu teuer für meine kleine Anwendung.
Mfg Tequila
Hallo herbivore,
mir ging es nicht um die Fehlermeldung fehlt eine Using Direktive. Was ich gesucht habe war System.ComponentModel. Das hatte ich auf dem MSDN Artikel einfach übersehen.
Es war wohl einfach schon zu spät.
Danke trotzdem.
Hallo Forum,
ich arbeite gerade sehr viel mit dem PropertyGrid und frage mich die ganze Zeit, wie ich es anstellen muss um Kategorien in die Auflistung einzufügen. Zudem würde ich für meine Objekteigenschaften auch gerne Hilfetexte anbieten.
Laut google könnte man das so realisieren:
[Description("Beschreibung fuer Vorname")]
[RefreshProperties(RefreshProperties.Repaint)]
public string Name
{
...
}
Allerdings bekomme ich dann immer die Fehlermeldung: Fehlt eine Using Direktive.
Habt Ihr noch eine Idee für mich?
Hallo Jürgen,
die Erscheinungsjahre liegen zwischen 2003 & 2004, was ja .net 1.1 vermuten läßt. Amazon stellt leider kein Inhaltsverzeichnis zur Verfügung.
Wenn die Bücher für .net 1.1 geschrieben sind kennt vielleicht einer von Euch von gleicher Qualität zu den Themen für .net > 1.1?
Danke Sebastian
Hallo Forum,
Ich interessiere mich für zwei schon etwas ältere Bücher und würde gerne wissen ob es sich bei diesen um das Framework 1.1 oder schon um 2.0 handelt.
Die Bücher um die es geht:
.NET Softwareentwicklung - Analsysverfahren und Designprinzipien ISBN: 3-446-22019-4
XML Web Services ISBN: 3-446-22236-7
Vielleicht hat ja einer von euch die Bücher und könnte kurz nachsehen. Bei Amazon ist es nicht ersichtlich bzw. sind die Bücher nicht mehr lieferbar.
Danke.
Danke Jürgen,
eigentlich hatte ich verstanden was da passiert. Dachte ich zu mindest. Aber nun ist es klar. Danke dir noch einmal.
Hallo,
@serial: das Problem ist, dass nach dem Verarbeiten der Daten das Fenster automatisch geschlossen werden soll.
@Jürgen Gutsch: Danke für den mir schon bekannten Link. Ich habe darauf hin das Beispiel mal versucht auf mein Problem umzumünzen. Dazu habe ich die Zeilen entsprechend angepasst:
String csname2 = "WindowsCloseScript";
Type cstype = this.GetType();
ClientScriptManager cs = this.Page.ClientScript;
if (!cs.IsClientScriptBlockRegistered(cstype, csname2))
{
System.Text.StringBuilder cstext2 = new System.Text.StringBuilder();
cstext2.Append("<script type=\"text/javascript\"> function DoClick() {");
cstext2.Append("parent.Shadowbox.close(); } </");
cstext2.Append("script>");
cs.RegisterClientScriptBlock(cstype, csname2, cstext2.ToString(), false);
}
Mein LinkButton bevor ich meine Frage stelle:
this.btAccept = new LinkButton();
this.btAccept.ID = "btAccept";
this.btAccept.Text = "Auswahl übernehmen";
this.btAccept.Click += new EventHandler(btAccept_Click);
//this.btAccept.OnClientClick = "parent.Shadowbox.close()";
Ich verstehe im Moment noch nicht, wie mein onClick Event ausgeführt werden kann, wenn ich statt btAccept_Click die JavaScript Funktion aufrufe. So steht es ja im Beispiel, wo der Button auch nicht mit runat=Server beschrieben ist.
Irgendwie stehe ich gerade auf dem Schlauch. ?(
Ich habe ein Formular, dass in einem separaten Fenster angezeigt wird. Durch drücken auf einen Linkbutton sollen die Daten in die Datenbank gespeichert werden und anschließend das Fenster geschlossen werden.
Ich habe da schon mal was von einem ClientScriptManager gesehen. Im Moment steige ich da aber noch nicht so durch - habe ihn mir aber auch noch nicht richtig angesehen. Oder kann man das JavaScript auch anders ausführen?
Hallo Forum,
ich habe ein Problem. In einem Formular gibt es LinkButton um die Daten des Formulars zu übernehmen. Dieser Button benutzt sowohl die onClientClick- als auch die onClick-Methode.
Wenn ich mich richtig belesen habe ist es nun so, dass erst die OnClientClick-Methode ausgeführt wird und dann erst die onClick-Methode. Wie kann ich die Reihenfolge vertauschen, damit erst meine Daten verarbeitet werden und dann das Fenster geschlossen wird?
mfg
Mahlzeit Peter,
du stehst aber früh auf. 8o.
Ich verwende doch auch nur ein Formular pro Seite. Ich habe dennoch in der Masterpage das runat="server" entfernt.
Das Firebug Add-On ist richtig klasse. Aber meinen Fehler bekomme ich einfach nicht weg, weil mir der Ansatz bzw. die Ursache für das Problem nicht klar ist.
Fehlt das __doPostBack nun in der prototype.js oder einfach in meiner Default2.aspx Seite?
Hallo hobofan,
meiner Meinung nach hat kleines_eichhoernchen bedingt recht. Es gibt fertige nutzbare Engines. Aber der Lernprozess ist dort nicht so hoch wie durch die Einarbeitung in den Planungsprozess und die Herausforderung auftretende Problemestellungen zu lösen.
Lass dich nicht abbringen.
Hallo Peter,
Im Lightbox Beispiel habe ich meine Testanwendung mal zusammen gepackt.
Du brauchst nun nur noch die Default3.aspx aufrufen. Diese enthält zwei Links auf die Default2.aspx - einmal als Lightbox Aufruf und einmal als normalen Link.
Mfg Sebastian
Hallo Peter,
der Breakpoint wird nicht erreicht.
Ein Minianwendung ist schnell gebaut man braucht nur zwei Seiten. Ich kann gerade kein Code posten, da ich hier kein VS habe - deshalb poste ich die Vorgehensweise ich hoffe das ist ausnahmsweise ok.
Seite 1: Default.apsx:
Hier muss im Headbereich rein:
<link rel="stylesheet" href="css/lightbox.css" type="text/css" />
<script src="scripts/prototype.js" type="text/javascript"></script>
<script src="scripts/lightbox.js" type="text/javascript"></script>
Im Body kann dann über den speziellen Link <a href="Default2.aspx" class="lbOn"> zeigt die Lightbox an</a> die Seite in die Lightbox geladen werden.
Seite 2: Default2.aspx:
Hier reicht es am besten zwei Checkboxen zu setzen und diese dann mit einem Button im Click Event prüfen zu lassen, welcher gechecked wurde.
Weiterhin brauchst du noch den Link zum Schliessen der Seite einzubinden:
<a href="#" class="lbAction" rel="deactivate">Close Lightbox.</a>
Hallo Peter,
nachfolgend mal die Version in dem ich es mit einem extra Button zum Übernehmen der Auswahl versucht habe.
Mein Button:
<body>
<form id="form1" runat="server">
<div>
<br />
Der Artikel wurde Ihrem Warenkorb hinzugefügt.<br />
<asp:PlaceHolder ID="PlaceHolderIngrediends" runat="server"></asp:PlaceHolder>
<br />
<asp:LinkButton ID="lbtTest" runat="server" OnClick="lbtTest_Click">Test</asp:LinkButton><p>
<a href="#" class="lbAction" rel="deactivate">Close</a>
</p>
</div>
</form>
</body>
Das Page_Load
protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString.Count != 0)
{
this.PlaceHolderIngrediends.Controls.Clear();
this.lbtTest.Visible = false;
string[] commandArguments = Request.QueryString["id"].Split(new char[] { '|' });
int articleID = int.Parse(commandArguments[0]);
int articleSizeID = int.Parse(commandArguments[1]);
Guid guid = (Guid)Session["basket"];
//einige SQL Operationen
System.Data.SqlClient.SqlDataReader reader = query.ExecuteReader();
this.ingredientItemsList = new System.Collections.Generic.List<CheckBox>();
int ingredientCount = 0;
while (reader.Read())
{
CheckBox ingredient = new CheckBox();
ingredient.Text = reader["articleName"].ToString();
ingredient.ID = reader["ArticleIngredientID"].ToString();
this.ingredientItemsList.Add(ingredient);
this.PlaceHolderIngrediends.Controls.Add(ingredient);
ingredientCount++;
}
reader.Close();
query.Dispose();
connection.Close();
if (ingredientCount != 0)
{
Label test = new Label();
test.Text="Sie können den Artikel um weitere Zutaten ergänzen:<br />";
this.PlaceHolderIngrediends.Controls.AddAt(0, test);
this.lbtTest.Visible = true;
}
}
else
{
Response.Redirect("Default.aspx", true);
}
}
Und das Button_Click Event
protected void lbtTest_Click(object sender, EventArgs e)
{
if (this.ingredientItemsList[0].Checked == true)
{
int articleID = int.Parse(this.ingredientItemsList[0].ID.ToString());
Guid guid = (Guid)Session["basket"];
System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection(ConfigurationManager.AppSettings["SQLConnectionString"]);
System.Data.SqlClient.SqlCommand query = new System.Data.SqlClient.SqlCommand("INSERT INTO baskets(basketGuid, articleGuid,articleID,quantity) VALUES(@basketGuid, @articleGuid,@articleID,@quantity)", connection);
query.Parameters.AddWithValue("@basketGuid", (Guid)Session["basket"]);
query.Parameters.AddWithValue("@articleGuid", System.Guid.NewGuid());
query.Parameters.AddWithValue("@articleID", articleID);
query.Parameters.AddWithValue("@quantity", 1);
connection.Open();
query.ExecuteNonQuery();
connection.Close();
query.Dispose();
}
}
Im Event habe ich die SQL Sachen mal dringelassen auch wenn ich nicht glaube das hier ein Fehler liegt. Wie gesagt wenn es nicht im Lightbox läuft geht alles soweit prima.
Also angebrummt hat dich keiner.
Was du brauchst ist eine Methode, der du einen Pfad mitgibst und die sich beim vorhandensein von weiteren Ordnern selbst erneut aufruft.
Vereinfacht und ohne sprachspezifisch zu sein etwa so:
pruefeAufVerzeichnisse( Startverzeichnis)
{
Hat Startverzeichnis Unterverzeichnisse?
ja: pruefeAufVerzeichnisse( Unterverzeichnis)
nein: pruefeAufDatei(...)
}
Hallo Leute,
ich experimentiere gerade sehr viel mit dem JavaScript 'Lightbox gone Wild'.
Viele kenne es vielleicht von Bildergalerien, nur das man mit dieser Variante HTML-Dokumente anzeigen lassen kann.
Meine Beispielanwendung ist ein kleiner Webshop in dem man Artikel nach dem man sie in den Warenkorb gelegt hat noch via Checkboxen konfiguriere bzw. ergänzen kann.
Dazu nutze ich dann die Lightbox. Nun habe ich das Problem, dass ich mit dem speziellen Lightbox-Link zum Schließen der Lightbox nicht mehr meine Checkboxen prüfen kann um die Änderungen mit in den Warenkorb zu legen.
Also versuche ich das Problem zu lösen in dem ich ein LinkButton Control zur Übernahme der Auswahl heranziehe, in dem ich ein ClickEvent anfüge.
Wird die Seite in der Lightbox angezeigt, wird das Event nicht gefeuert. Rufe ich die Seite direkt im Browser auf klappt alles prima.
Lightbox Gone Wild gibts hier: http://particletree.com/features/lightbox-gone-wild/
Hat von Euch jemand Erfahrung mit der Lightbox? Auf Wunsch kann ich auch etwas Code posten.
Hallo felifell,
was du brauchst nennt sich Rekursion.
Das heißt du gehst jeden Ordner rekursiv durch und schaust nach ob weitere Ordner enthalten sind oder ob deine Dateien enthalten sind.
Die History-Ordner kannst du ja ausgrenzen.
Wenn das dann läuft, kannst du dich um das Verarbeiten der Dateien kümmern, was dann wohl der leichtere Part sein dürfte.
herbivore war schneller.
Hallo Peter,
ich habe mich gerade in der MSDN über den ClientScriptManager informiert.
Nun habe ich nur noch das Problem, dass ich von JavaScript überhaupt keine Ahnung habe. Kannst du mir da helfen?
Guten Morgen,
ja genau das möchte ich.
Hallo Peter,
meine Frage:
Wie bekomme ich asp.net dazu bei erfolgreicher Prüfung für weitere Konfigurationsmöglichkeiten den Link zu aktivieren - sprich ihn automatisch anzuklicken, so das es der Benutzer nicht mehr tun muss?
Hallo Forum,
ich baue gerade ein kleines Warenkorbsystem, das ein Lightbox-JavaScript benutzt um weitere Informationen oder Auswahlmöglichkeiten getrennt anzeigen zu können.
Damit das funktioniert muss eigentlich ein Link nach folgendem Aufbau
<a href="seite2.htm" class="lbOn">Text</a> angeklickt werden. Nun möchte ich das gern so haben, wenn ein Artikel in den Warenkorb landet und dieser zum Beispiel konfigurierbar ist, dass dann dieser Link automatisch ausgeführt wird.
Ich hoffe ihr versteht wie ich es meine, da ich es im Moment nicht besser erklären kann.
Hallo Peter,
ich habe ein ähnliches Problem wie xforfun. Auch ich erstelle eine Tabelle mit dynamischen LinkButtons. Ich konnte mein Problem auch lösen, in dem ich ich die Methode zum erstellen in die OnInit Methode verschoben habe.
Mein Problem ist nun, dass die Veränderungen an der Tabelle (verursacht durch die Events) erst bei einer erneuten Seitenaktualisierung sichtbar sind. Das liegt sicherlich am OnInit. Bisher behelfe ich mir unsauber in dem ich das erzeugte Control vom OnInit im PreRender wieder entferne und neu hinzufüge. Gibt es hier einen besseren Weg?
Nachfolgend ein minimales Codebeispiel
protected override void OnInit(EventArgs e)
{
if (Session["basket"] == null)
{
Guid basketGuid = System.Guid.NewGuid();
Session["basket"] = basketGuid;
}
this.basket.Controls.Add(ShowBasket((Guid)Session["basket"]));
base.OnInit(e);
}
protected override void OnPreRender(EventArgs e)
{
this.basket.Controls.Clear();
this.basket.Controls.Add(ShowBasket((Guid)Session["basket"]));
base.OnPreRender(e);
}
public HtmlTable ShowBasket(Guid BasketGuid)
{
//Tabelle mit LinkButtons wird erstellt
HtmlTable table = new HtmlTable();
table.ID = "basketItemTable";
...
LinkButton button = new LinkButton();
button.Command += new CommandEventHandler(RiseQantity_Command);
button.Text = "+";
button.CommandArgument = reader["articleguid"].ToString() + "|" + reader["quantity"].ToString();
button.ID = "MengeErhoehen" + reader["articleID"].ToString();
cell = new HtmlTableCell();
cell.Controls.Add(button);
row.Cells.Add(cell);
table.Rows.Add(row);
...
}