Laden...
Avatar #avatar-2711.jpg
1nf1n1ty myCSharp.de - Member
Software Engineer Dabei seit 02.07.2007 286 Beiträge
Benutzerbeschreibung

Forenbeiträge von 1nf1n1ty Ingesamt 286 Beiträge

11.04.2008 - 11:00 Uhr

Ist das mit WCF denn wirklich so einfach? Irgendwie werde ich daraus nicht so ganz schlau oder ich habe es nicht richtig verstanden. Der Service selber existiert ja schon in Form von ASP.NET 1.1 (als ASMX).

11.04.2008 - 06:21 Uhr

also ich tausche meine daten bei den webservices nur über datasets aus...

Das mache ich auch, wie hast du es bei dir gelöst? Und ist WCF vielleicht doch keine so gute Wahl?

10.04.2008 - 14:51 Uhr

Also paar Bekannte von mir haben das mal versucht (Stammzertifikate auf nem PPC installieren und verwenden) und da gabs es wohl etliche Schwierigkeiten und da hatte so einiges wohl nich geklappt.

10.04.2008 - 12:50 Uhr

Hallo zusammen,

ich habe einen Web Service (asp.net 1.1) und eine Clientanwendung (Pocket PC / CF 2.0), die untereinander kommunizieren. Diese Kommunikation soll nun abgesichert (verschlüsselt) werden. Rein vom Pocket PC bietet sich da ja nur VPN, HTTPS und XML Encryption an. VPN scheidet aus, da dafür bestimmte Ports freigeschaltet werden müssten und das in der jetzigen Umgebung nicht machbar ist (Hat unterschiedliche Gründe). HTTPS wäre eine Möglichkeit, dafür müsste man dann aber Zertifikate erstellen, dabei gibt es aber teilweise wohl Probleme mit der Implementierung der Zertifikate. Am besten und einfachsten wäre denke ich eine XML Encryption, die Frage ist nur, wie man das am besten löst.

Ich habe mich mal ein wenig über WSE und WCF informiert, aber funktioniert das überhaupt mit dem (Ur)alten 1.1er Framework? Wieviel müsste man am Web Service dafür ändern, damit das funktionieren würde?

Danke für Ratschläge und Hilfe!

25.01.2008 - 21:47 Uhr

Achso,

hmm... schade daran habe ich auch schon gedacht, aber so wie ichs geschrieben habe wäre es einfacher gewesen, wenn man das Event über eine Funktion gekillt und später wieder zugewiesen hätte. Naja ok, trotzdem danke.

25.01.2008 - 21:38 Uhr

Hallo zusammen,

ich weiss, dass ich vermutlich nerve, da ich in so kurzer Zeit so viele Fragen habe, aber ich habe schon wieder eine. Es geht um ein TabControl, bzw. auch generell um Controls. Es gibt eine Funktion bei mir, die die Liste der Tabs erneuert. Dabei wird auf bestimmte Objekte einer ArrayList zugegriffen. Wenn ich die Liste erneuere, lösche ich die ArrayList und das TabControl (Clear()-Methode). Da aber das Event noch vorhanden ist, wird sofort SelectedIndexChanged aufgerufen.

Dieses Event möchte ich also für die Dauer meiner Aktionen entfernen und später wieder hinzufügen. Letzteres ist mir klar, aber wie kann ich ein aktives Event entfernen? Ich hatte gedacht, dass man einfach das Event auf null setzt, aber das hat nicht funktioniert.

Wie macht man sowas also?

Vielen Dank!

25.01.2008 - 19:18 Uhr

Hallo zusammen,

ich verwende bei meiner PocketPC Anwendung ein TabControl. Mit dem kann man dann zwischen unterschiedlichen Objekten durchschalten. Wenn man nun auf einen Editbutton klickt, soll im aktuellen Tab der ganze Krams Editiert werden können. Dabei soll man nicht zwischen den Tabs wechseln können. Ist es möglich dafür das Tab zu sperren?

Vielen Dank!

25.01.2008 - 14:32 Uhr

Ok, und wie mache ich es, wenn ich es direkt in der MainMethode aufrufe?

also so:


   static class Program {
      static void Main() {
         McGlobals gbl = McGlobals.GetInstance();
         bool bCfg = McCommon.CheckForFile("config.cfg", McCommon.GetCurrentAppPath(true));
         if (!bCfg) {
            frmConfig cfg  = new frmConfig();
            cfg.Show();
         }

         //....
}

Geht das überhaupt so? Er fährt nämlich jederzeit mit dem folgenden Code fort. Warum auch immer das mit Application.Run nicht funktioniert, weil das hätte genau das gemacht, wass ich gewollt hab 🙁

25.01.2008 - 14:25 Uhr

Hallo zusammen,

ich habe immernoch keine Lösung bei der Application.Run Geschichte gefunden, deshalb hatte ich die Idee, dass ich einfach wenn ichs brauche ein neues Form öffne. Leider ist es aber so, dass nachdem ein Form geöffnet wurde der Code einfach fortfährt und nicht darauf gewartet wird, dass das Form erst geschlossen wird.

Hat einer eine Idee wie man sowas löst?

Vielen Dank!

25.01.2008 - 00:37 Uhr

Hmm.. hatte ich gedacht. Aber warum wird das Form direkt nach dem Laden wieder geschlossen? Wenn ich es direkt lade ohne die beiden davor, dann funktioniert es ohne Probleme. 🙁

25.01.2008 - 00:22 Uhr

Hallo zusammen,

ich habe ein Problem mit meiner PPC Anwendung.


static class Program {
      /// <summary>
      /// Der Haupteinstiegspunkt für die Anwendung.
      /// </summary>
      [MTAThread]
      static void Main() {
         McGlobals gbl = McGlobals.GetInstance();
         bool bCfg=McCommon.CheckForFile("config.cfg", McCommon.GetCurrentAppPath(true));
         if(!bCfg){      
            Application.Run(new frmConfig(true));
         }

         //...

         Application.Run(new frmDefault());
         if (!gbl.bLoginSuccess) {
            Application.Exit();
         }
         Application.Run(new frmMenu());
         Application.Exit();
      }

Die Config -Form wird noch aufgerufen. danach geht es zur Default-Form. Hier loggt man sich ein. Dort wird eine Variable gesetzt und das Default-Form geschlossen. Anghand der Variable wird geprüft was die Applikation machen soll. Nachdem nun Application.Run(new frmMenu()); aufgerufen wurde passiert nichts, das Programm macht mit der darauffolgenden Zeile weiter. Woran könnte das liegen?

Danke für die Hilfe!

24.01.2008 - 05:17 Uhr

Hallo zusammen,

also ich habe nun ein paar Methoden geschrieben. Ziel der gesamten Aktion ist es eine Configdatei zu erstellen (in Form eines XML Dokuments) und diese zu verschlüsseln (Rijndael). Wenn sie gebraucht wird, wird sie gelesen und wieder entschlüsselt.
Mein Problem ist folgendes:
Wenn ich nun das Dokument erstelle und ich mit den Output des XML Dokumentes anzeigen lasse, sieht dieser super aus. Auch vor dem Speichern ist noch alles wie beim alten. Wenn ich das Teil nun verschlüssele kann ich ja schlecht prüfen wie es aussieht, da ich Zufallszahlen und IV noch vorn an die Datei schreibe. Beim Entschlüsseln lade ich die Datei und hole mir zuerst IV und die Zahlen und hole mir mit Hilfe eines Basisstring nun den Schlüssel meinter Datei. Das Funktioniert soweit auch noch. Wenn ich nun aber den Rest der Datei einlese und ich mit dann die XML Datei im Speicher anschaue, dann fehlen am Ende immer ein paar Bytes (unterschiedlich viele, mal 5, mal 3, etc.). Dies hat zur Folge, dass meine Funktion zum Einlesen der Datei und laden der Konfiguration Exceptions wirft, weil es ja kein gültiges XML Dokument mehr ist.

Ich sitze nun fast 2 Stunden hiervor und finde den Fehler einfach nicht 🙁 Ich kann unmöglich schlafen gehen, solange es nicht funktioniert, aber irgendwie bin ich grade auch etwas ratlos.


public static void EncryptConfig(string password) {
   //keys. rijndael, etc.

         byte[] xmlBytes = McConfig.WriteToConfigStream(gbl.strNewsletterWS, gbl.strMailversandWS, gbl.iResolution.ToString());  //Generiert das XML Dokument, sieht soweit gut aus
   ICryptoTransform trans = aes.CreateEncryptor();
   string cfgFile = "config.cfg";
   string appPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);
      using (FileStream fs = File.Open(Path.Combine(appPath, cfgFile), FileMode.OpenOrCreate)) {
         using (CryptoStream cs = new CryptoStream(fs, trans, CryptoStreamMode.Write)) {
               //IV und Zufallszahlen an den Anfang der Datei schreiben
               fs.Write(rn, 0, rn.Length);
               fs.Write(IV, 0, IV.Length);

               //Lese/Schreibpuffer
               int iBuffersize = 256;
               int iReadBytes = iBuffersize;
               byte[] buffer = new byte[iBuffersize];

               //Inhalt des Speichers in Datei schreiben
               using (MemoryStream ms = new MemoryStream(xmlBytes)) {
                  string xml = System.Text.Encoding.ASCII.GetString(ms.ToArray(), 0, ms.ToArray().Length);
                  while (iReadBytes == iBuffersize) {
                     iReadBytes = ms.Read(buffer, 0, iBuffersize);
                     cs.Write(buffer, 0, iReadBytes);
                  }
                  cs.Flush();
               }
            }
         }
      }


      /// <summary>
      /// Entschlüsselt die Informationen der Konfigurationsdatei
      /// </summary>
      public static byte[] DecryptConfig(string password) {
         Rijndael aes = Rijndael.Create();

         byte[] pwd = GenerateByteArray(password);
         byte[] pwdByte = Make32ByteArray(pwd);
         byte[] key = new byte[32];

         string cfgFile = "config.cfg";
         string appPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);

         using (FileStream fs = new FileStream(Path.Combine(appPath, cfgFile), FileMode.Open, FileAccess.Read)) {
            byte[] rn = new byte[32];
            fs.Read(rn, 0, rn.Length);
            byte[] IV = new byte[16];
            fs.Read(IV, 0, IV.Length);

      //...Schlüssel errechnen
            // Decrypter erstellen
            aes.Key = key;
            aes.IV = IV;
            ICryptoTransform trans = aes.CreateDecryptor();

            // Streams für Schreiben und Codieren
            using (MemoryStream ms = new MemoryStream()) {
               using (CryptoStream cs = new CryptoStream(ms, trans, CryptoStreamMode.Write)) {

                  // Puffer zum Lesen/Schreiben
                  int iBuffersize = 256;
                  int iBytesRead = iBuffersize;
                  byte[] buffer = new byte[iBuffersize];
                  
                  // den Inhalt der Quelldatei in den Speicher schreiben
                  while (iBytesRead == iBuffersize) {
                     iBytesRead = fs.Read(buffer, 0, iBuffersize);
                     cs.Write(buffer, 0, iBytesRead);
                  }
                  cs.Flush();
                  string xml = System.Text.Encoding.ASCII.GetString(ms.ToArray(), 0, ms.ToArray().Length);  //Wenn ich mir hier das XML Dokument anschaue fehlen paar Bytes!!!
                  return ms.ToArray();
               }
            }
         }
      

Vielen Dank!

24.01.2008 - 00:01 Uhr

Vielen Dank!

23.01.2008 - 23:32 Uhr

Wow... nicht schlecht. Ok, ich habe vorher nie mit dieses usings gearbeitet, was genau machen sie? Brechen sie die Schleife ab, sobald etwas schief geht?

€: Hmm dann habe ich garkeinen try-catch Block mehr, was passiert bei einem Fehler? Ich weiss noch das jemand mit mal gesagt hat, dass diese try-catch geschichte mit relativ viel Rechenaufwand verbunden ist. Wie sieht es bei using aus?

23.01.2008 - 22:14 Uhr

Sorry, ich versteh nich ganz :x

€: Ok, habs geblickt.

23.01.2008 - 21:50 Uhr

Ja, das Writer.Close() in Finally bei der Funktion die erstellt wurde. Aber wie gesagt, wenn ich das Writer.Close() auskommentiere und dann den Stream weiterlaufen lasse, dann scheint der MemoryStream irgendwie leer zu sein.

23.01.2008 - 21:36 Uhr

Hallo,

beim Verschlüsseln meiner Konfigurationsdatei verwende ich einen MemoryStream, der zuvor mit einer XML Datenstruktur gefüllt werden soll. Wenn ich diese nun über eine Methode erstelle und dann den FileStream anwerfe bekomme ich eine ObjectDisposedException, was bedeuten müsste, dass das Objekt bereits zerstört ist. Wie kann das sein? Rast der GC da so schnell drüber? Ich hab schon versuch paar sachen umzulagern aber ich komme irgendwie auf keine Lösung, die Funktioniert. Wenn ich das Close aus der Funktion, wo die XML Datei im Speicher erzeugt wird, entferne, dann erhalte ich nur eine Datei, in der die Informationen aus dem Speicher fehlen.


      public static void EncryptConfig(string password) {
         try {
                //Variablen und so zeugs...

            //Streams
            MemoryStream ms = new MemoryStream();
            ms = McConfig.WriteToConfigStream(gbl.strNewsletterWS, gbl.strMailversandWS, gbl.iResolution.ToString()); //Nach dem Aufruf scheint das Objekt schon nicht mehr zu existieren...
            ICryptoTransform trans = aes.CreateEncryptor(key, IV);
            FileStream fs = File.Open("config.cfg", FileMode.OpenOrCreate);
            CryptoStream cs = new CryptoStream(fs, trans, CryptoStreamMode.Write); //ms = MemoryStream

           //...

            //Lese/Schreibpuffer
            int iBuffersize = 256;
            int iReadBytes = iBuffersize;
            byte[] buffer = new byte[iBuffersize];

            //Inhalt des Speichers in Datei schreiben
            while (iReadBytes == iBuffersize) {
               iReadBytes = ms.Read(buffer, 0, iBuffersize); //Exception!!!
               cs.Write(buffer, 0, iReadBytes);
            }
            cs.Close();
            ms.Close();
            fs.Close();
         } catch (Exception ex){
            string x = ex.Message;

         }
      }

public static MemoryStream WriteToConfigStream(string str1, string str2, string str3) {
         MemoryStream ms = new MemoryStream();
         XmlTextWriter writer = new XmlTextWriter(ms, Encoding.UTF8);
         try{ 
            Cursor.Current = Cursors.WaitCursor; //Cursor auf Wait
            writer.WriteStartDocument();
//....
            writer.WriteEndElement();
            Cursor.Current = Cursors.Default;
         } catch (Exception ex) {
            throw new ApplicationException("Fehler beim Schreiben der Konfigurationsdatei: " + ex.Message);
         } finally {
            writer.Close();
            ms.Close();
         }
         return ms;
      }


23.01.2008 - 18:48 Uhr

Ok, wenn ich mir das so ansehe, dann könnte es eigentlich nur noch sein, dass ein anderes Control davor ist. Wie kann ich die Box denn in den Vordergrund stellen?

23.01.2008 - 18:14 Uhr

Hi,

nee das mit Application kann ich im CF Framework wohl nicht verwenden. Zumindest sehe ich da nicht diese Funktion die du angesprochen hast.

Die Funktion zum Laden des Bitmaps funktioniert, er gibt zumindest wohl ein Bild zurück und die Tabages werden auch erstellt, alles ohne Fehler. Nur wenn ich dann eben den GUI angezeigt bekomme dann sehe ich da keine PictureBox mit dem geladenen Bild drin 🙁

23.01.2008 - 16:35 Uhr

Hallo zusammen,

ich habe eine Methode, die mir Templates für TabPages erstellt. Unter anderem werden da auch PictureBoxen erstellt. Über den Designer Bilder einfügen is ja recht enfach, aber da ich das über eine Methode ausgelagert habe, muss man sich nun selber darum kümmern. Ich habe folgende Funktion geschrieben:


     private static Image LoadBitmap(string file) {
         string appPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);
         string filename = Path.Combine(appPath, file);
         Image imgTemp = (Image)(new Bitmap(filename));
         return imgTemp;
     }

Diese soll mir dann die geladene Datei einfach zurückliefern. Das funktioniert auch soweit. Laden und so weiter geschieht so:


        pb_edit.Image = (System.Drawing.Image) LoadBitmap("images\\btn_dEdit.png");
         pb_edit.Location = new System.Drawing.Point(139, 131);
         pb_edit.Name = "pb_edit";
         pb_edit.Size = new System.Drawing.Size(24, 24);
         pb_edit.Visible = true;

Wenn ich nun meine Templates erstellt habe und anschaue, dann sehe ich jedoch kein Bild. Hab ich was vergessen oder was falsch gemacht?

Danke für die Hilfe!

23.01.2008 - 13:14 Uhr

Achso, sowas hab ich noch nie verwendet. Wenn es aber sowieso nicht (oder nicht viel) schneller ist lass ich es erstmal so und werde es vielleicht später wenn ich Zeit habe mal ansehen. Trotzdem vielen Dank.

22.01.2008 - 21:13 Uhr

Hmm... ich versteh nich ganz was du meinst, kannst du das etwas erläutern oder ausführen?

22.01.2008 - 18:58 Uhr

Ok,

ich habe meinen Code nun umgebaut. Ich erstelle bei jedem Form Templates, lasse diese also dynamisch anhand von Daten die ich aus einem Web Service bekomme zusammenbauen. Nun hab ich eine Funktion gebastelt, die mir eine tabPage zurückliefert, die ich wiederrum auf der Form in einen TabControl integriere. Jetzt habe ich allerdings das Problem, dass ich auf einer solchen TabPage den Controls eben noch Felder füllen möchte. Frage ist nur wie ich die Controls finden kann. Ich hatte gedacht, dass es wie bei einem DataGrid sowas wie FindControl gibt (oder so).

Hier mal der Code:


foreach (DataRow row in ds.Tables[0].Rows) {
            TabPage tp_page = new TabPage();
            tp_page = Templates.CreateTemplate(); // liefert ein fertiges TabPage
            tp_page.Text = row["Name"].ToString();
            
           //hier sollten eigentlich nun die Controls belegt werden     
            //z.B.: tb_id.Text = row["ID"]].ToString();
            this.tab_menu.TabPages.Add(tp_page);
         }

Jemand eine Idee wie ich das lösen kann?

Vielen Dank!

€: Hat sich schon erledigt, hab ne Schleife gemacht, die alle Cotrols von der aktuellen TabPage auf Typ überprüft und dann nach dem entsprechenden Namen etwas macht. Leider nich grad die schnellste Lösung aber naja. Wenn jemand was besseres hat, lasst es mich bitte wissen.

22.01.2008 - 13:44 Uhr

Hallo zusammen,

ich entwickle gerade eine Applikation für einen Pocket PC mit dem .NET Compact Framework 2.0. Ich habe da nun solche Forms erstellt und Controls entsprechend hinzugefügt, Programmlogik etc. Soweit sogut. Nun habe ich einen Pocket PC gekauft um das ganze dort zu testen. Dieser hat allerdings schon eine Auflösung von 640x480. Die Forms die ich gebaut habe sind anscheinend auf 320x240 ausgelegt gewesen und demnach sieht das jetzt nicht mehr so gut aus. Die Grafiken sind verschoben oder falsch skaliert etc. Gibt es da irgendeine Möglichkeit das möglichst komfortabel zu ändern bzw. das Programm für beide Auflösungen tauglich zu machen?

Vielen Dank für die Hilfe!

19.11.2007 - 11:12 Uhr

Schonmal vielen Dank für den Link! 🙂 Wusste ich garnicht, dass es sowas gibt. Ist immerhin auch meine erste PPC Anwendung 😉 Ich werde mich dort mal umsehen.

€: Eine Frage hab ich noch bezüglich des .Net CF 2.0. Kann man das nich eigentlich auf allen Pocket PCs installieren? Oder gibt es da Einschränkungen? Weil vieles was ich gerne nutzen würde ist im 2.0er vorhanden und im 1.0 nur teilweise oder eben garnicht.

18.11.2007 - 23:40 Uhr

Hallo Zusammen,

ich habe ein Problem. Ich möchte eine Datei auf einem PocketPC verschlüsseln. Leider kann ich nur das .NET Compact Framework 1.0 benutzen, wo ja die System.Security.Cryptography Klasse nicht so schön implementiert wurde, wie im 2.0er Framework. Im Prinzip geht es dabei um eine Configdatei, in der unter Anderem wichtige Informationen für eine Applikation drine stehen und die möchte ich ungern im Klartext da liegen lassen.

Wie kann ich eine einfache aber effiziente Verschlüsselung realisieren? Wenn ich die Cryptografie Klasse verwenden könnte, würde ich sowas wie AES verwenden. Gibt es unter Umständen vielleicht die Möglichkeit diese Klasse irgendwie als Verweis einzubinden und zu verwenden?

Grüße

1nf1n1ty

06.09.2007 - 16:41 Uhr

Lösung:

Das Event muss zwar dynamisch generiert werden, jedoch in einer anderen Funktion und zwar so:


private void dg_liste_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) {
   if(e.Item.ItemType == ListItemType.EditItem) {
	DropDownList ddName = (DropDownList)e.Item.FindControl("dd_name");
	ddName.SelectedIndexChanged += new System.EventHandler(this.dd_name_SelectedIndexChanged);
        GenerateKfqDropDownList(ddName);
	}
}

04.09.2007 - 12:07 Uhr

Hmm weiss keiner einen Rat? Ich habs momentan so:
In Spalte 3 befindet sich eine DropDownListe mit AutoPostBack=true. Im ItemDataBound generiere ich ein Event, nachdem ich mit FindControl das Control gesucht habe. Die Funktion für das Event gibt es auch bereits. Nach dem PostBack Ereigniss wird das DataGrid nun nicht mehr refreshed bzw. neu gebunden, das soll auch nicht so sein. Auf mein Generiertes Event wird aber leider nicht reagiert 🙁
Hier mal die wichtigsten Codestellen:




private void Liste_PreRender(object sender, System.EventArgs e) {	
if(!Page.IsPostBack) {
	ReadListe(1); // DataGrid binden
	}
}

protected void dd_name_SelectedIndexChanged(object sender, EventArgs e) {
	Javascript.alert("test2");
}



private void dg_liste_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) {
if (e.Item.ItemType == ListItemType.EditItem) {
					//DropDownLists
					System.Web.UI.WebControls.DropDownList ddName = (System.Web.UI.WebControls.DropDownList)e.Item.FindControl("dd_name");
ddName.SelectedIndexChanged += new System.EventHandler(this.dd_name_SelectedIndexChanged);
}
}


31.08.2007 - 11:08 Uhr

In einer normalen DropDown kann man das Event ja auch einfach benutzen. Wenn ich es aber direkt ins DataGrid reinziehe per Designer, dann stehen diese zumindest im Designer nicht zur Verfügung, demnach muss man dort selber Hand anlegen. Ich habe bereit versucht im ItemDataBound wo diese DropDownList auch erstellt wird manuell das Event hinzuzufügen und natürlich die AutoPostBack Eigenschaft auf true zu setzen. Nachdem ich jedoch in der Liste was ausgewählt habe kommt der PostBack und die Zeile ist weg und kein Event wurde ausgelöst und genau das möchte ich ja nicht. Ich will ja nach dem Postback schauen was in der DropDown gewählt wurde und dann in dem DataGrid 2 Labels mit Daten füllen.

30.08.2007 - 16:39 Uhr

Hallo zusammen,

ich habe ein Problem beim Verwenden eines DataGrids. Ich habe ein festes DataSet generiert und mit Hilfe von TemplateColums entsprechende Elemente reingebracht (Labels, Textboxen, Listen) um eine Zeile des DataGrids zu editieren. Nun möchte ich in dieser Zeile jedoch noch folgendes können:

In der Zeile gibt es eine DropDownListe, die dynamisch mit Daten aus einer Datenbank erstellt wird. Wenn ich jetzt im Editiermodus eine Auswahl treffe, dann sollen Labels in der gleichen Zeile (und immernoch im Editiermodus) mit Daten aus der Datenbank gefüllt werden. Funktionen für das SQL Statement existieren bereits. Was das Problem ist, ist die Tatsache, dass nur durch einen PostBack entsprechende Änderungen bemerkt werden. D.h. ich muss die Daten wohl irgendwie zwischenspeichern. Die Frage die sich mir stellt ist wann und wie muss das geschehen. Sind die Controls nach einem Postback denn immernoch die selben? Und wie komme ich an die Daten ran? Prinzipiell müsste es ja so sein, dass man die Daten erst speichert, dann der Postback kommt und man diesen erkennt und die entsprechenden Werte wiederherstellt aber ich weiss irgendwie nicht wo ich das hinpacken soll. 🙁

Ich hoffe ihr habt verstanden was ich möchte und könnt mir vielleicht sogar helfen.

Danke!

30.08.2007 - 09:27 Uhr

Hallo Peter,

vielen Dank!

28.08.2007 - 20:40 Uhr

Hi,

wenn du JavaScript gegenüber nich abgeneigt bist könntest du hier mal nachschauen:

http://www.dynarch.com/products/dhtml-tabs/

Gibt noch weitere JavaScript Lösungen. Da man für ASP Seiten in der Regel sowieso JavaScript benötigt wäre das vielleicht was. Ich selber kannst auch nicht wirklich schreiben, aber teilweise verstehen und implementieren.

Ich hab nicht genau das, aber ein anderen mal verwendet. Im Prinzip kannst du entweder mit Div Elementen Arbeiten und die dann den Tabs zuordnen, oder du erstellst UserControls und packst diese in Placeholder und lädst die entsprechend.

28.08.2007 - 15:44 Uhr

Hallo,

das Topic sagt eigentlich schon alles. Ich benötige eine ComboBox. Sie sieht aus wie eine Dropdownliste, bietet dem Benutzer jedoch auch die Möglichkeit der manuellen Texteingabe. Soetwas gibt es im .NET Framework bereits, jedoch nur unter System.Windows.Forms für Windowsprogramme. Ich benötige so eine Box jedoch für Webseiten. Ich verwende das Framework 1.1, kann mir da jemand weiterhelfen?

Danke.

16.07.2007 - 14:10 Uhr

Hallo zusammen,

an meinem Webpart gibt es etwas das mich stört. Wenn ich das Webpart auf dem Sharepoint Server einrichte und auf eine Seite stecke funktioniert dies soweit. Ich habe dem Benutzer eine Möglichkeit gegeben direkt über das Webpart Einstellungen, die normalweise unter dem EditorPart (diese Personolizeable Attribute) verändert werden. Wenn man nun dort Einstellungen ändert und die Seite verlässt, werden diese anscheinend nicht gespeichert. Im EditorPart funktioniert das ganze jedoch tadellos.

Frage: Benötige ich eine Funktion dafür die das gleiche bewirkt wie das Apply im EditorPart und wenn ja wie heißt die? Ich habe mal gegooglet aber leider nix passendes gefunden. Auch die MSDN Doku gibt leider nichts für mich aufschlussreiches her. SaveViewState() und SetPersonalizationDirty() scheinen leider nicht die richigen Funktionen zu sein 🙁

Danke für die Hilfe.

11.07.2007 - 11:50 Uhr

Hallo zusammen,

ich habe ein kleines Problem mit meinem Webpart. Das Webpart besitzt einen Teil, der mir in abhängigkeit von bestimmten Variablen HTML zurückliefert und eine DropDownListe. Nun möchte ich, dass ein Benutzer mit der DropDownListe eben diese Variablen ändern kann. Wenn er das macht wird das SelectedIndexChanged Event ausgelöst, allerdings viel zu spät. Nachdem das HTML generiert wurde (es erzeugt eine Grafik) gezeichnet wurde fängt er an auf das Event zu reagieren.

Nun habe ich ja verschiedene Funktionen wie OnInit, Onload, On PreRender etc.
Im Init benutze ich EnsureChildControls um sicher zu stellen das die Events und Buttons gleich zu anfang generiert werden.

Die Frage ist jetzt noch wo ich das generierte HTML hinsetzen muss. Ich hatte es mal ins Render gesetztz, da diese Funktion ja nach den Events aufgerufen wird (bei mir zumindest) allerdings zeichnet er mir die Grafik (das HTML) nicht mehr. 🙁

02.07.2007 - 14:35 Uhr

Hallo Community,

da ich in nächster Zeit wohl sehr oft mit C# programmieren werde habe ich mich hier mal angemeldet und habe auch gleich eine Frage zu einem größeren Problem.

Ich entwickle momentan ein Webpart für den Sharepoint Server. Ich beschreibe erstmal was es machen soll und wie ich mir vorstelle es umzusetzen.

Das ganze soll ein Webpart sein, welches 2 Web Services verwendet. Das Eine ist ein Wetterservice der mir eine Grafik für den Wetterverlauf erstellt, das Andere ist eine Standortsuche, die mir Längen- und Breitengrad einer Wetterstation zurückliefert, soweit sogut.

Das ganze ist als eine Class Libary realisiert. Ich habe es bisher soweit zum Laufen gebracht, dass er mir die Wettergrafik anzeigt und ich die Anzeige der Grafik formatieren kann. Unschön ist, dass man die Ortsangabe mit den Graden manuell eingeben muss. Hier kommt die Suche ins Spiel. Unter die Grafik werden dynamisch 3 Controls erzeugt (dynamisch, weil es ja eine Klasse und keine feste Seite ist). Textbox, Button und Dropdownliste.

Ich habe mir das so vorgestellt:

Man gibt in die Textbox einen Ort ein (Frankfurt) klickt auf den Button und bekommt dann die Dropdownliste zu sehen in der man dann auswählen kann, sollte es mehrere Einträge geben.

Das Problem ist:

Ich habe die Controls in einer Funktion "protected override void CreateChildControls()" angelegt, global innerhalb der Klasse sind sie nur definiert, jedoch noch nicht erstellt worden. Nun habe ich schon mehrfach versucht dafür Events zu definieren über die SystemEventHandler Geschichte (ihr wisst denke ich was ich meine 🙂 ). Nach einem Klick auf den Button passiert jedoch leider nichts.
In der OnInit habe ich das Event schon generiert, ohne Erfolg. Ich habe auch eine Konstruktorlogik ausprobiert, leider auch mit negativem Ergebnis. Eine Möglichkeit wäre noch gewesen die Standortsuche in ein UserControl auszulagern, fraglich ist aber ob das ganze danach auch noch als Webpart funktioniert (es wäre mir ehrlich gesagt auch lieber, wenn das Webpart am Ende nur eine DLL besitzt). Wenn ich das ganze mal durch den Debugger jage, dann werden die Funktionen teilweise sogar 6x aufgerufen. Ich vermute mal, dass die Controls immer wieder neu generiert werden und das Event wohl nicht richtig zugewiesen werden kann. Ich habe schon mit EventHandlern zutun gehabt, jedoch nur auf Anwendungsebene und nicht bei Webseiten- oder Webpartprogrammierung bzw. in Kombination mit dynamischen Controls.

Wie kann man das Problem lösen?

€: Ich hab spaßes halber mal etwas probiert, und zwar habe ich die Standortsuche in ein UserControl ausgelagert und dann eine Seite erstellt, auf der ich das Webpart testweise lade. Das UserControl habe ich dann in einen Placeholder gepackt und entsprechend geladen. Wenn ich nun den Button klicke, springt er genau in die Funktion, die ich definiert habe. Daraus schließt sich für mich, dass der in der Klasse definierte Button wohl nicht eindeutig ist, oder keine eindeutige ID hat wenn ich ihn erstelle. Da die Funktionen in der Klasse auch 6x aufgerufen werden scheint es auch 6 mal ein anderer Button zu sein.

Frage: Wie bekomme ich den wenn ich den generiere so hin, dass er eindeutig ist und ihm das Event zugewiesen werden kann?