Laden...

Forenbeiträge von schuppsl Ingesamt 789 Beiträge

05.02.2009 - 15:10 Uhr

Hm..nein.

05.02.2009 - 11:47 Uhr

Na ich blockiere ja nicht die ganze Seite.
Wenn das updatepanel aktualisiert wird, verschwindet das Modal Fenster...das ist mein Problem...

Der ModalPopUpExtender erzeugt ja kein richtiger Javascript Modal Window
wie showModalDialog.
D.h. bei aktualisieren der Seite wird nicht das ModalWindow aktualisiert, sondern die Parent seite und das Modal verschwindet.

05.02.2009 - 11:02 Uhr

Hi.

Ich frage mich ob man mit einem ModalPopupextender nur Controls aufrufen kann die auf derselben Seite sind, oder ob man auch in dieses Modal-Fenster auch eine andere aspx:Seite laden kann.

Ich sollte ein schicken Popup haben, welches auch bei einer aktualisierung der Seite bzw. eines UpdatePanels der Seite sichtbar bleibt...

In den Attributen habe ich nichts entsprechendes gefunden...

Weiß jemand mehr als ich?

04.02.2009 - 10:34 Uhr

Hallo und danke Ihr beiden.
Hat mir sehr geholfen.

schuppsl

04.02.2009 - 09:37 Uhr

Hallo Community.

Wer sich ein bisschen mit jquery auskennt, kennt vielleicht das Problem.

Ich habe einen Dialog.
In diesem habe ein paar Input-Textfelder.
Den Sendebutton für diese Form muss ich ja direkt im Javascript Code von JQuery angeben:


<script type="text/javascript">
	$(function() {
		$("#dialog").dialog({
			bgiframe: true,
			height: 300,
			modal: true,
			buttons: {
				'Create user account': function() {
					$(this).dialog('close');
				},
				Cancel: function() {
					$(this).dialog('close');
				}
			}
		});
	});
	</script>


Und der Dialog:


<div class="demo">

<div id="dialog" title="Create new user">
	<p>All form fields are required.</p>

	<form>
	<fieldset>
		<label for="name">Name</label>
		<input type="text" name="name" id="name" class="text" />
		<label for="email">Email</label>
		<input type="text" name="email" id="email" value="" class="text" />
		<label for="password">Password</label>
		<input type="password" name="password" id="password" value="" class="text" />
	</fieldset>
	</form>
</div>


So weit so gut.
Ich möchte jetzt aber statt dem "close" eine c# Funktion aufrufen.
Das geht wahrscheinlich nicht, da der JQuery-Code ja keinen Postback anstößt.

Wie kann ich statt des CLose, eine C# Funktion aufrufen, wenn ich zb. die Daten in einer DAtenbank speichern will?


'Create user account': function() {

Rufe meine C# Funktion auf.
					

Kein Problem wärs ja, wenn ich die buttons direkt in die Form schreiben könnte, aber das geht bei jquery ja leider nicht.

Hat jemand Erfahrung damit?

28.01.2009 - 08:24 Uhr

Hat noch jemand eine Idee?

22.01.2009 - 15:43 Uhr

Hmmm..ich weiß jetzt nicht, ob ich das richtig verstanden habe.

Also der Thread blockiert immer, bis etwas anliegt. Dann holt er es ab und soll irgendwo speichern, dann blockiert er wieder... das läuft in einer while(true)Schleife.

Eben dieses "irgendwo" ist ein Problem.
Ich habe schon einiges versucht, auch eine Klasse, aber die Daten sind immer leer.

Im Page_load möchte ich die Daten aus der Klasse oder eben sonstwo abholen...immer null...

Hier mal ein bisschen code:


 public void Listen1()
        {           

            CMySocket sock = new CMySocket();
            sock.onlineSocket(CGlob.APP_SERVER, CGlob.APP_PORT);


            int recv;
            Socket so = sock.mySock;

            while (sock.IsConnected)
            {
                data = new byte[sock.SockSize];

                recv = so.Receive(data);
                stringData = Encoding.ASCII.GetString(data, 0, recv);
               
                Application.Add("OnlineEntry", stringData);
               
                
            }
         
            sock.CloseSocket();
        }




        void Page_Load(object sender, EventArgs e)
        {
            
 if ((int)Application["startStatus"] ==1)
            {

                Application["startStatus"] = 0;
                Output.Items.Add("Starte Thread...");
                
                var listener = new Thread(Listen1);
                listener.Priority = ThreadPriority.Lowest;
                listener.Start();              


            }



            string dashiersolltejetztvollsein = (string)Application["OnlineEntry"];
...




}


Der string "dashiersolltejetztvollsein" ist immer leer...

22.01.2009 - 14:52 Uhr

Also ich erstelle jetzt einen Thread in dem die Funktion für das abrufen läuft und pollt.
Funktioniert einwandfrei, die Daten werden abgeholt, wann immer was anliegt.

nur bekomme ich die Daten, die in einem String gesammelt werden nicht aus der Threadfunktion heraus.

Ich habe es schon mit Viewstate.Add("meineDaten"); und Application.add versucht und noch ein paar andere Dinge. Wann immer ich im Page_load die Daten aus dem Viewstate auslesen möchte, sind sie null.

Kann es daran liegen, daß ein Thread nicht direkt auf die Variablen zugreifen kann?
Also in meine Listbox kann der Thread nichts schreiben, weder die Daten sonst noch irgndwie bereitstellen.

Der Thread läuft immer.

Wie bekomme ich die Daten da raus?

22.01.2009 - 07:36 Uhr

Hm..es muss doch möglich sein, auch in einer ASP.NET Anwendung, einen Thread zu erstellen der ständig läuft und darin eine Socketverbindung zu erstellen die an einem Port hört?

21.01.2009 - 11:16 Uhr

Hallo Leute.

Ich bin mir ganz unsicher wie ich folgendes realisieren soll und hoffe, daß einer mit Erfahrung mit einen Tip geben kann. Nur nen Tip, keine vollständige Lösung:

Ich möchte in meiner ASP.NET Anwendung einen Socket abhören.
Auf diesem Socket wird von einer Anwendung ab und zu eine Nachricht geschickt, die ich einfangen und darstellen will.

Also möchte ich den Socket erstellen, abhören und wenn etwas eintrifft, soll die ASP Anwendung benachrichtigt werden.
Völlig unabhängig davon, welche ASP Seite gerade ausgeführt wird und welche Funktionen die grade ausführt.

Ich dachte mir nun, daß ich im footer der Anwendung ein Updatepanel erstelle das alle 10 Sekunden aktualisiert wird und die Abhörfunktion ausgeführt wird.
Steht am Socket was an, dann ändert sich der Button im footer und wenn ich draufklicke, werden die Nachrichten angezeigt.

Ich müsste ja einen Socket erstellen, abhören und diesen beim Pollen irgendwie aufgreifen und abfragen ob das anliegt.

Die Frage ist nun wie..naja wie geht das?

Soll ich die Abhörfunktion in einem eigenen Thread erstellen und dort ständig abhören lassen?
Kann ich mich dann benachrichtigen lassen?
Soll ich einen Webservice erstellen der das macht?

So, ich hoffe, daß ich mein Problem gut darstellen konnte und daß mir jemand nen Tip geben kann wie man so etwas am Besten realisiert.

Im Prinzip sollte es so sein:
Beim ersten Start wird ein Thread erstellt, der den Socket erstellt und auf listen geht.
Kommt was rein, wird das abgerufen und ich muss irgendwie benachrichtigt werden.
Dann muss der Socker wieder auf listen gehen...usw usf.

Danke cuborg

20.01.2009 - 12:39 Uhr

Hmm.ja.
Aber warum?
Ich möchte nicht jede IP-Adresse akzeptieren, sondern nur die eine...

20.01.2009 - 09:51 Uhr

Hallole.
Ich versuche in meine asp.net Anwendung einen TCPLIstener zu installieren, der auf eingehende Verbindungen wartet.
Noch ist es blockierend, wird aber später mit Threads realisiert.
Doch nur bei der kleinsten Testanwendung scheitere ich.

Wir haben eine PC hier im Netzwerk, der auf dem Port 3300 Daten sendet.Diese will ich nun mit der ASP Anwendung abrufen:


 IPAddress localAddr = IPAddress.Parse("192.168.0.41");


                TcpListener li = new TcpListener(localAddr, 3300);
                li.Start();

                Socket sock = li.AcceptSocket();
                recLabel.Text= sock.ToString();

Bei li.Start() kommt die meldung, daß die angegbene IPAdresse in diesem Kontext ungültig ist.
Warum ist diese ungültig?
Es ist eine IP Adresse, die im Netzwerk besteht, also kann sie nicht ungültig sein.
Mit der Software des kollegen (Anwendung) auf meinem PC funktioniert es.
Es kann also nicht an meinemPC, Firewall oser sonstwas liegen..
Hat wer ne Idee?

EDit: der TCPCLient funktioniert einwandfrei

Edit2: localhost geht auch...beim Listener

Geht das überhaupt mit einer entfernten IP Adresse?

10.12.2008 - 12:41 Uhr

Erneutes Laden der Daten könntest Du so machen, dass wenn die Update-Funktion gedrückt wurde, dur einen Postback ausführst, dann werden auch die Daten wieder geladen, oder wenn das GridView in einem AJAX-UpdatePanel ist, reicht es wenn du dass UpdatePanel updatest.

Hmm..ja aber ich möchte nicht die gleichen Daten laden, sondern andere.
D.h. ich rufe dieselbe funktion auf, nur übergeben ich für den Socket einen anderen Befehl. Die Daten sind dann gleicher Art, aber z.B. in der Anzahl verschieden..da komme ich einfach nicht dahinter...oder muss ich dann eine neue ODS erstellen?

09.12.2008 - 08:47 Uhr

Also ich komm einfach nicht drauf.
Wie kann ich denn eine geänderte Datasource erneut ans Grid binden?
Beim Databind kommt die Meldung, daß es das Argument, welches ich übergebe +1 schon gibt.

Also das ARgument heist normalerweise arg, er zeigt mir dann arg1 an.
Ist ja auch klar, da es das schon gibt.
aber wie mache ich denn das?

08.12.2008 - 11:38 Uhr

Nun, die Quelle ist ein Windows-Socket, der mir Daten schickt.
Bei einem bestimmten Abruf sind die Daten zwar gleicher Art, aber eben andere Daten.

Also muss ich die Datenquelle aktualisieren und erneut ans Grid binden.
Darum die Update funktion...oder wie kann man das noch machen?

Mein Problem ist eben, daß ich das Gridviwe schon an die Datenquelle gebunden hat.
Die Klassenmethoden holen sich aus dem Socket die Daten und verbasteln Sie zu einem Dataview, welches die Datenquelle des Grids ist.
Bei anderer Auswahl wird dieselbe methode mit anderem Argument aufgerufen, Daten erneut abgefragt vom Socket und wieder zusammengebaut.

Nun, ist es ja so, daß die Datenquelle für das Grid dieselbe ist, aber mit andere Daten.

Führe ich erneut ein GridView1. Databind() durch motzt er mich an, was ja auch klar ist.
Ich müsste dann entweder die Datenquelle updaten oder die Datenquelle vom Grudview lösen und erneut binden, doch wie ich das machen soll ist mir schleierhaft...
weist du das?

08.12.2008 - 11:04 Uhr

Hallo Peter,

ja das habe ich.
Nur habe ich es mit protected statt mit public deklariert 🤔
Vielen Dank für den Anschubser am Montag morgen.

Nur habe ich dann wieder ein Problem:
In dieser Methode habe die Controls (gridview ODS)nicht verfügbar, da diese außerhalb des Namespaces sind.

Stelle ich die awtliste in den Namesace funktionert es nicht und ich bekomme Fehlermeldungen, was ich aber eigentlich nicht verstehe:

Der in der TypeName-Eigenschaft von ObjectDataSource "ObjectDataSource1" angegebene Typ konnte nicht gefunden werden.

Also habe ich die Klasse awtliste außerhalb des Namespaces gepflanzt, was zur Folge hat, daß ich die controls nicht verfügbar habe...also muss ich das ODS übergeben, damit ich die Quelle updaten kann...

08.12.2008 - 10:27 Uhr

Hallo.

Ich möchte ein an ein GridView gebundenes ObjectDataSource updaten.
Dazu habe ich im ODS eine Update Methode angegeben:

<asp:ObjectDataSource ID="ObjectDataSource1" SelectMethod="awtTab"  
        TypeName="awtliste" runat="server" onselecting="ObjectDataSource1_Selecting" UpdateMethod="ObjectDataSource1_Updating" >
        <UpdateParameters >
        <asp:Parameter Name="test" Type="String" DefaultValue="bla" />
        </UpdateParameters>
        </asp:ObjectDataSource>
    
     

Die Methode sieht bisher so aus:

 protected void ObjectDataSource1_Updating( string test)
       {

           string g = test;
       }

Updaten tue ich das Ganze so:

   ObjectDataSource1.Update();

Nun kommt aber die Fehlermeldung:

ObjectDataSource "ObjectDataSource1" konnte keine nicht generische Methode "ObjectDataSource1_Updating" finden, die Parameter hat: test.

Warum findet der denn diese Methode nicht?
Müsste doch stimmen, oder?

Grüße schuppsl

03.12.2008 - 09:15 Uhr

Hey vielen Dank, das funktioniert. 👍
Stellt sich nur die Frage nach dem Warum?
Also warum geht das mit SelectParameter.Add nicht?

02.12.2008 - 15:26 Uhr

Hi.

Ich erstelle ein GridView (GridView1) mit einer ObjectDataSource(ObjectDataSource1).
Nun möchte ich der Klassenfunktion für die DataSource, die mit SelectMethod und TypeName übergeben wird ein Objekt als Argument mitgeben.

Ich habe bereits ein String übergeben, da funktioniert, aber mit dem Objekt gehts nicht:


GridView1.DataSource = ObjectDataSource1;      
ObjectDataSource1.SelectParameters.Add("befehl", "HTEK");
ObjectDataSource1.SelectParameters.Add("grid", TypeCode.Object, "GridView1");

Der Rumpf der Klasse:

 public DataTable awtTab(string befehl,GridView grid)

Ich möchte also die Instanz des GridViews übergeben, damit ich innderhalb der KLasse darauf zugreifen kann.

Leider ist die Variable grid immer null

Ich würde ja gerne das Objekt übergeben, aber SelectParemeters akzeptiert ja nur strings
Geht das so gar nicht, oder was ist da der Fehler?

02.12.2008 - 11:00 Uhr

Ich habe die Lösung:

Das Gridview sortiert sich nur , wenn eine entsprechende Datenquelle angegeben ist, d.h. eine SQL Datenquelle.
Sobald man eine andere hat, muss man sich die Sortierung über 5 Ecken zusammenfrickeln.

Das Gridview merkt sich zudem den Stand der Sortierung nicht, man muss diese im ViewState speichern und jedes Mal abfragen,d ann gehts.

Die Lösung und Worte, die von mir kommen könnten habe ich hier gefunden.

01.12.2008 - 15:02 Uhr

Schon mal in e.SortDirection geschaut?

Gruss Peter

Ja habe ich.
google habe ich auch schon stundenlang befragt...ich komm einfach nicht weiter.

Was ist denn Grundsätzlich falsch?

01.12.2008 - 14:41 Uhr

Hallo.
ALso ich muss jetzt nochmal nen Thread aufmachen.
Seit 3 Tagen versuche ich meiN GridView zum sortieren zu bewegen,ohne Erfolg.
Ich habe eine apx Seite, die von einer MAsterpage abgeleitet ist, ObjectDatasource und Gridview werden zur Luafzeit erstellt:

Hier mal Quellcode:
Erstellen im Page_load Event:

 protected void Page_Load(object sender, EventArgs e)
        {
          
            
            ObjectDataSource datas = new ObjectDataSource("awtliste", "awtTab");
            GridView grid = new GridView();

            datas.ID = "dasObjectSourceControl";
            datas.SelectParameters.Add("befehl", "SWT#ZE");
            grid.ID = "gridAwt";
            grid.DataSourceID = datas.ID;
            grid.AllowSorting = true;
            grid.Sorting += new GridViewSortEventHandler(grid_Sorting);

            PlaceHolder1.Controls.Add(datas);
            PlaceHolder1.Controls.Add(grid);
            grid.DataBind();

        }

Sortier Event:

 void grid_Sorting(object sender, GridViewSortEventArgs e)
         {
            
             GridView gr = new GridView();
             gr = (GridView) PlaceHolder1.FindControl("gridAwt");
            
             

             DataTable tab = new DataTable();
             awtliste li = new awtliste();
             tab= li.awtTab("SWT#ZKZE");
             DataView view = tab.DefaultView;

             view.Sort = e.SortExpression + " "+"DESC"; ;

          
             gr.DataBind();            


         }

Also die Methode awtTab gibt eine Datatable zurück die mit Werten gefüllt ist.
Das Anzeigen funzt einwandfrei.

Wenn ich es so mache, wird diese Funktion 3 oder 4 Mal aufgerufen, aber nichts wird sortiert.
Was mache ich noch falsch?

01.12.2008 - 09:44 Uhr

Hallo Slaughter,

vielen Dank für die Links, die helfen echt weiter.

In meinem Buch steht wohl, daß das Gridview sich selbst sortiert.
Muss ich nun auf das _sorting Event reagieren oder nicht?

Ich muss ja in diesem Falle die Datenquelle sortieren und nicht das Gridview selbst. oder?
Also muss ich das Dataview neu erstellen und gleich sortieren und dann wieder ans Gridview binden.
Oder wie geht das?

@Peter, danke für den Link

28.11.2008 - 15:29 Uhr

Ich lege das aber dynamisch an, mache ich deklartiv, geht es bei mir auch.

28.11.2008 - 15:26 Uhr

Ja ,aber darum gehts ja nicht.
Es geht darum, daß keinerlei Event gefeuert wird, wenn auf eine Spaltenüberschrift geklickt wird.

foreach (DataColumn col in tabelle.Columns)
        {            
            BoundField bfield = new BoundField();
            bfield.DataField = col.ColumnName;
            bfield.HeaderText = col.ColumnName;
            bfield.SortExpression = col.ColumnName;
            grid.Columns.Add(bfield);           
        }
28.11.2008 - 14:00 Uhr

Gut, ich kann ja dem Gridview sagen, was es beim klick auf eine Sort Schaltfläche tun soll:

 grid.Sorting += new GridViewSortEventHandler(grid_Sorting);

Und denHandler erstellen:

  void grid_Sorting(object sender, GridViewSortEventArgs e)
        {
            throw new NotImplementedException();
        }

Mach der Compiler ja fast von selbst.

Und wie gehts nun weiter?
Ich kann auf sortieren klicken wie ich will, es geht nicht.
Kann mir wer helfen?

Also mein eigentliches Problem ist:
Wenn ich im Gridview AllowSorting = true; einstelle, erscheinen die Headertxte also Links.
Klicke auf diese, passiert nichts, er wird keinerlei Event ausgeführt in dem ich den Sortbefehl geben könnte.

Wie kann ich das machen?

28.11.2008 - 13:12 Uhr

Hallo.

Ich erstelle **zur Laufzeit **ein Gridview.
Datenquelle ist Datatable/dataview.

Das funktioniert recht gut.
Ich möchte nun das Gridview sortieren lassen, habe dem Gridview AllowSorting= true
zugewiesen und die Überschriften des Grids sind nun anklickbar.

Bei msdn steht, daß das Sorting-Event beim Klick auf einen sortierbaren gridview ausgelöst wird.
Dem Gridview habe ich die ID "testgrid" zugewiesen.

Schreibe ich nun eine Methode z.B.
:

 
void testgrid_Sorting(Object sender, GridViewSortEventArgs e)
          {

              string r = e.ToString();
          }

Funktioniert das nicht.
Das Event wird einfach nicht ausgelöst.

Das Gridview wird so erstellt:


GridView grid = new GridView();

                grid.ID = "testgrid";
                
                grid.AllowSorting = true;
                                
                awtliste a = new awtliste();
                grid.DataSource =  a.awtTab("bla");//->Rückgabewert DataView
                

               
                PlaceHolder1.Controls.Add(grid);

               
               DataBind();

Also wie gesagt, das Gridview wird schön dargestellt mit den entsprechenden Daten.
Wenn ich nun auf den Tabellenkopf klicke um eine Spalte zu sortieren, passiert nichts.
Das o.g. Event wird nicht aufgerufen.

Die Frage ist nun, wie ich das Event aufrufen kann..beim klick...

Muss ich das Event selbst zuweisen?

27.11.2008 - 16:36 Uhr

Ja gut, aber die Frage ist doch, wie ich die Threads erstelle:

Also einfach:

  • Thread erstellen, Threadfunktion ausführen
  • Auf Rückgabewert warten
  • bei Zeitüberschreitung abbrechen.

schuppsl

27.11.2008 - 12:07 Uhr

Hallo.

Ich habe in meiner alten C++ ISAPI Anwendung per Socket Daten abgeholt.
Das mache ich nun genau gleich mit einer ASP.NET Anwendung.
Die Funktion, die die Daten abruft lief in einem eigenen Thread um zu vermeiden, daß bei einer blockierung des Sockets die ganze Anwendung hängen bleibt.
Kam der Thread nach einer bestimmten Zeit nicht zurück, wurde er abgebrochen und eine Fehlermeldung ausgegeben.

Das möchte ich jetzt gerne in meiner ASP Anwendung auch machen.

Einen Backgroundworker gibt es ja leider nicht, den Threadpool soll man nicht benutzen und sonst habe ich schon mit diesem hier rumgeschlagen:
Asynchrone Seiten mit ASP

Doch finde ich keine Möglichkeit eine Funktion in einem neuen Thread zu starten und auf diesen zu warten.(wie in C++)

Wie kann man so etwas bewerkstelligen?

Also einfach:

  • Thread erstellen, Threadfunktion ausführen
  • Auf Rückgabewert warten
  • bei Zeitüberschreitung abbrechen.

Wäre über Tips dankbar.

Grüße schuppsl

26.11.2008 - 13:14 Uhr

Dann hätte ich aber doch noch eine Frage zu diesem Thema.
Wenn ein GridVies an ein ObjectDataSource gebunden ist, kann ich das Gridview ja nicht sortieren.
Meldung:

Die Datenquelle "dasObjectSourceControl" unterstützt das Sortieren von IEnumerable-Daten nicht. Die automatische Sortierung wird nur für DataView, DataTable und DataSet unterstützt.

Muss das ich nu über Datatable, Datacolumn usw abbilden?
Oder wie geht das?

26.11.2008 - 10:43 Uhr

Ok, ich hatte die Klassen noch im Namespace drin.

26.11.2008 - 10:37 Uhr

Hallole.
Ich habe eine ObjectDatasource, welche ich an ein Gridview binde.
Als Objekt dient mir eine KLasste die eine generische Liste zuückgibt.

Das Gridview UND die Klasse ist in einer von einer Masterpage abgeleiteten Seite.

Die ASPX Seite sieht so aus:


<asp:Content ID="Content8" ContentPlaceHolderID="MainContent" runat="server">
   
   
   <asp:thumbsup:bjectDataSource ID="dasObjectSourceControl" Typename="autorenliste" SelectMethod="holeAutoren" runat="server">
   </asp:thumbsup:bjectDataSource>


    <asp:GridView ID="GridView1" DataSourceID="dasObjectSourceControl" runat="server">
    </asp:GridView>



</asp:PlaceHolder>

Die Codebehind Seite in der das Objekt der Datenquelle erstellt wird sieht so aus:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ext.MySocket;
using ext.Structs;

namespace xxx
{
    public partial class awt : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            

            
        }
        

    }



    public class autoren
    {
        public string Vorname { get; set; }
        public string Nachname { get; set; }
        public string Buechertitel { get; set; }
    }


    public class autorenliste
    {
        public List<autoren> holeAutoren()
        {
            return new List<autoren>
                {
                    new autoren(){Vorname="Sven",Nachname="Regener",Buechertitel="Herr Lehmann"},
                    new autoren(){Vorname="Bastian",Nachname="Sick",Buechertitel="Dem Dativ ist dem Genitiv sein Tod"},
                    new autoren(){Vorname="Günter",Nachname="Lamprecht",Buechertitel="Und wehmütig bin ich noch immer"}

                };

            //List<autoren> li = new List<autoren>();
            //li.Add(new autoren{Vorname="",Nachname="",Buechertitel=""});
        }
    }
}

Beim ausführen kommt diese Meldung:

Der in der TypeName-Eigenschaft von ObjectDataSource "dasObjectSourceControl" angegebene Typ konnte nicht gefunden werden

Ich verstehe was ich da mache und ich verstehe die Meldung.
Nur verstehe ich nicht, warum das Typename nicht erkannt wird?

Wo muss ich diese Klasse ablegen, damit sie erkannt wird?

25.11.2008 - 16:45 Uhr

Oki, dann mal los🙂
Dankeschön.

25.11.2008 - 15:30 Uhr

Ich verstehe nichts.
Ich weiß überhaupt nicht was du da überhaupt machst.
Aber dsa liegt wohl daran, daß bei mir noch viele viele Grundlagen fehlen...
Wäre ich bloß bei c/c++ geblieben, da weiß man wenigstens was man macht🙂

25.11.2008 - 15:21 Uhr

Oje, das ist mir alles zu hoch.
Bei Windows Forms ist es so einfach, nur mit asp ist es mega kompliziert...

25.11.2008 - 14:15 Uhr

Beim dynamischen habe ich noch nicht viel.

Erstelle ich ein neues Listview, muss ich ja ebenfalls das LayoutTemplate und Grouptemplate einfügen.

ALso:


Listview li = new Listview();
li.LayoutTemplate = 

Und da will er ja ein System.Web.UI.ITemplate, was auch immer das ist.
Beim group Template dasselbe.
Da weiß ich schon nicht, was ich da angeben soll.
Ein Template erstellen, also eine *.skin Datei?

Dann gehts weiter: Wie füge ich neue Elemente, samt Inhalt ein?

Ich frage mich, warum das in keinem Buch steht und vor allem nirgend im Internet...?

25.11.2008 - 12:58 Uhr

Hallo.

Ich experimentiere gerade mit ListView.
Habe ein Beispiel aus einem Buch abgeschrieben, nur ohne Datenquelle.
Ich möchte erst einmal nur die Überschrift sehen.
Ich habe keine Datenquelle, sondern das komplette ListView wird dann später mal zur Laufzeit erzeugt und befülllt.
Geht das überhaupt?
Im Internet finde ich leider nichts über das erstellen von Listview zur Laufzeit.

Also hier mal der Quellcode.
Meines erachtens müsste das Listview wenigestens die Überschrift anzeigen.
Dies ist nur ein Test, und ich möchte nur mal die Überschrift sehen, aber es wird leider gar nichts angezeigt:


<asp:Content ID="Content8" ContentPlaceHolderID="MainContent" runat="server">

  
  <asp:PlaceHolder ID="PholderAWT" runat=server>    
  
  
   <asp:ListView ID="awtListView1" runat="server">
      
      <LayoutTemplate>      
      <table runat=server id="awttable" border="1">
      <tr id="Tr1" runat="server">
      <td id="Td1" runat="server">Anwesenheitstableau</td></tr> 
      <tr id="awtgroupPlaceholder" runat=server>
      </tr>
      </table>
      </LayoutTemplate>
      
      
      <GroupTemplate>
      <tr id="Tr1" runat=server>
      <td runat=server id="awtitemplaceholder">
     
      </td>
      </tr>
      </GroupTemplate>
      <ItemTemplate>
      <td id="Td2" runat=server>blabla</td>
      </ItemTemplate>
          
      </asp:ListView>
      
      </asp:PlaceHolder>

</asp:Content>  

So müsste doch "Anwesenheitstableau" anzgezeigt werden, oder?

EDIT: Ok, ohne Datenquelle gehts nicht.

21.11.2008 - 15:01 Uhr

Kann es sein, daß bei die aspnetzone.de noch im Cache ist?
Ich kann die Seite in keinem Browser öffnen...server nicht erreichbar.
Auch kein Ping geht durch...

Das mit dem Literalcontrol isses...habe ich wohl überlesen 😭

Vielen Dank!

21.11.2008 - 14:28 Uhr

So wie im 1. Post beschrieben:


 
            for (int i = 0; i < 10; i++)
            {
                txt.Add(new TextBox());
                txt[i].ID = "txt"+i.ToString();
                                           

                lab.Add(new Label());
                lab[i].Text = "Name" + i.ToString();
                lab[i].AssociatedControlID = "txt"+i.ToString();
                lab[i].Style.Value = "color:red;float:left;";
                

                
                PlaceHolder1.Controls.Add(lab[i]);
                PlaceHolder1.Controls.Add(txt[i]);   

Response.Write("<br>");

               
            }

Das <br> beim response.write wird am Anfang der Seite ausgegeben, nicht nach dem Control wie ich es gerne hätte...

21.11.2008 - 14:12 Uhr

Wie schreibe ich dynamisches Markup?
Gar nicht

Gruss Peter

Ok, wenn also nun Absätze <p> reinbringen will, geht das nicht... 🤔

21.11.2008 - 13:37 Uhr

Also ich erstelle die Controls im Codebehind im Page_load ereignis:



protected void Page_Load(object sender, EventArgs e)
        {
            List<Label> lab = new List<Label>();
            List<TextBox> txt = new List<TextBox>();

           
            for (int i = 0; i < 10; i++)
            {
                txt.Add(new TextBox());
                txt[i].ID = "txt"+i.ToString();

                lab.Add(new Label());
                lab[i].Text = "Name" + i.ToString();
                lab[i].AssociatedControlID = "txt"+i.ToString();
                lab[i].Style.Value = "color:red;float:left;";
                
                PlaceHolder1.Controls.Add(lab[i]);
                PlaceHolder1.Controls.Add(txt[i]);   
               
            }
            }

Diese werden jetzt ja alles wild aneinandereiht.

In der aspx Seite im Contentplaceholder erscheinen dann diese Controls:


<asp:Content ID="Content8" ContentPlaceHolderID="MainContent" runat="server">

    <asp:PlaceHolder ID="PlaceHolder1" runat="server">
    </asp:PlaceHolder>

</asp:Content>


Hier, im Placeholder1 werden nun die Controls hinzugefügt.
Ich möchte sie aber in eine Tabelle setzen, damit sie angeordnet sind.

Wie mache ich das?
Muss ich doch in der For Schleife die Table Elemente auch dynamisch hinzufügen, oder?
Wie schreibe ich dynamisches Markup?

21.11.2008 - 11:44 Uhr

Der link geht nicht🙂

Und wenn du das in eine Tabelle packen willst - was ich nicht empfehle, kannst du einfach die Klassen Table, TableRow / Cell, etc.. benutzen.

Aber wo füge ich dann diese Klassen ein?

Wie es scheint, ist es ja nicht möglich im Contentplaceholder das Markup zu schreiben und im Codebehind die Controls zu generieren, die dann da rein sollen.

Das mit der Tabelle war nur ein Beispiel um es zu verdeutlichen...
Die Seite soll dann später mal dynamisch auf Grundlage einer Datenquelle entsprechend aufgebaut werden.

21.11.2008 - 10:40 Uhr

Hallo.

Ich habe eine Masterpage und einige davon abgeleitete Seiten.
In einer dieser Seiten, möchte ich im Contentplaceholder ein paar zur Laufzeit generierte Labels, texboxes und Buttons erzeugen.
Dazu habe ich nen Placeholder reingepflanzt und füge diesem die Controls zu:



<asp:Content ID="Content8" ContentPlaceHolderID="MainContent" runat="server">

    <asp:PlaceHolder ID="PlaceHolder1" runat="server">
   
    </asp:PlaceHolder>


</asp:Content>

Im Page_loag ereignis dieser Seite erstelle ich die Controls:


protected void Page_Load(object sender, EventArgs e)
        {
            List<Label> lab = new List<Label>();
            List<TextBox> txt = new List<TextBox>();


            for (int i = 0; i < 10; i++)
            {
                lab.Add(new Label());
                lab[i].Text = "Name" + i.ToString();
                
                
                PlaceHolder1.Controls.Add(lab[i]);
                           
               
            }
            
            

So weit so gut.

Jedoch ist es nun so, daß die Labels in loser Folge hintereinander dargestellt werden.
Ich kann sie nun per CSs formatieren indem ich die CSS Klasse hinzufüge, was aber wenn ich drum herum eine Tabelle machen will?

Setzte ich in der For-Schleife mit response.write nach jedem Controls.Add ein "<br>" oder sonstwas, wird das an den Anfang der Seite geklatscht, was ja auch klar ist.

Was mache ich aber, wenn ich jedes Label nun in eine Tabellenzeile setzen will?
Die Table Tags in der For Schleife werden ja dann an den Anfang der Seite gesetzt und nicht um die Labels.

Wie macht man so etwas?

Die Zweite Frage wäre, warum ich nicht im Placeholder in der aspx Seite die Buttons hinzufügen kann:

<asp:Content ID="Content8" ContentPlaceHolderID="MainContent" runat="server">

    <asp:PlaceHolder ID="PlaceHolder1" runat="server">
   
    </asp:PlaceHolder>

<%
     TextBox txtName = new TextBox();
     txtName.Visible = true;
     PlaceHolder1.Controls.Add(txtName);           

           
    
%>

In diesem Fall erscheint die Textbox nicht. Das geht nur übers Page_load ereignis.
Liegt das daran, daß an dieser STelle die Seite ja schon gerendert ist?

Danke schuppsl

20.11.2008 - 15:20 Uhr

Au au au ...jetzt wirds aber kompliziert...vielen Dank, werde mich mal einlesen.

20.11.2008 - 14:53 Uhr

Mit ner normalen Arraylist geht das, habe schon schon getestet...
aber mit den verschlachtelten Dictionary?

20.11.2008 - 13:57 Uhr

Finde ich nicht.
Ich erzeuge lediglich eine neue Instanz eines XML Serialisierers und sage ihm welche Art er serialisieren soll.

20.11.2008 - 13:41 Uhr

Hallo.

Ich habe ein verschachteltes Dictionary, das sieht so aus:


 Dictionary<Guid, Dictionary<string,string>> dic = new Dictionary<Guid, Dictionary<string,string>>();

Im Anschluß habe ich dieses Objekt gefüllt und möchte es nun serialisieren:



                    XmlSerializer xs = new XmlSerializer(typeof(Dictionary<Guid, Dictionary<string,string>>));
                       StringWriter wr = new StringWriter();

                       xs.Serialize(wr, dic);

                       Session.Add("data", wr);
                       wr.Close();


Beim kompilieren meckert er noch nicht, aber zur Laufzeit kommt die Meldung:

Der Typ "System.Collections.Generic.Dictionary2[[System.Guid, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Collections.Generic.Dictionary2[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] wird nicht unterstützt, da er IDictionary implementiert.

Diese Meldung verstehe ich nicht.
Kann ich das so gar nicht serialisieren?

20.11.2008 - 11:48 Uhr

Müsste so gehen, wenn ich es ir recht überlege:
dic[guid].Add("var", "Wert");

Alles klar, vielen Dank!

20.11.2008 - 11:41 Uhr

.Add(myGuid,new Dictionary<string,string>());

Aber dann steht ja noch nichts drin?

Dann fehlt mir das gute Buch wohl noch.
Habe hier 3 fette Bücher herumliegen und in keinem steht das drin.
Grüße schuppsl

20.11.2008 - 11:37 Uhr

Dann hätte ich doch noch ne klitzekleine Frage:

Wie füge ich dann per Add, die Elemente hinzu?


Dic.Add(myGuid,......)


???