myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
   » Plugin für Firefox
   » Plugin für IE7
   » Gadget für Vista
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin
» Accessoires

Ressourcen
» .NET-Glossar
» guide to C#
» openbook: Visual C#
» openbook: OO
» .NET BlogBook
» MSDN Webcasts
» dotnetjob.de
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Bankverbindung
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Web-Technologien » [erledigt] Wie erstelle Ich ein Event für einen Button der erst zur Laufzeit erzeugt wird in ASP.NET
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

[erledigt] Wie erstelle Ich ein Event für einen Button der erst zur Laufzeit erzeugt wird in ASP.NET

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
omega90 omega90 ist männlich
myCSharp.de-Mitglied

Dabei seit: 02.03.2012
Beiträge: 46
Entwicklungsumgebung: Visual Studio 2010
Herkunft: Wetzlar


omega90 ist offline

[erledigt] Wie erstelle Ich ein Event für einen Button der erst zur Laufzeit erzeugt wird in ASP.NET

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi

Zu Meinem Programm: Ein benutzer kann in einer textBox einen Nachnamen eingeben bzw teilstrings davon und es wird in einer ListView alle Benutzer aufgelistet die diesen TeilString enthalten.

Nun wird in der ListView für jeden Benutzer eine Reihe erstellt in der man die eMail, Den Benutzer, Vorname,Nachname und auch die Telefonnummer sehen kann, dazu kommt noch das jede Reihe einen Button"Anzeigen erhält".

Wenn man auf diesen Button drückt soll man auf eine andere WebForm Oberfläche geleitet werden mit einer string Übergabe in einer Session. Jedoch weiss Ich nicht wie ich ein solches Event erzeugen kann wenn die Buttons erst zur laufzeit erzeugt werden. :/

In meinem Event muss daher die Id oder die eMail mit übergeben werden...Ich dachte eigentlich an soetwas wie ...

C#-Code:
Session["ID"] = // Die Id von dem benutzer in der Reihe vllt durch den Index :/
Response.Redirect(..andere webform.);

Hier ist mein Code:

ASPX:

C#-Code:
<asp:ListView runat="server" ID="myListView">

        <LayoutTemplate>
            <table id="UserTable" runat="server" border="0" cellspacing="10" cellpadding="5">
                <tr id="Tr1" runat="server">
                    <th id="Th1" runat="server">Benutzer</th>
                    <th id="Th2" runat="server">eMail</th>
                    <th id="Th3" runat="server">Vorname</th>
                    <th id="Th4" runat="server">Nachname</th>
                    <th id="Th5" runat="server">Telefon</th>
                </tr>
                <tr runat="server" id="ItemPlaceholder">
                </tr>
            </table>
        </LayoutTemplate>

        <ItemTemplate>

            <tr runat="server">

                <td align="left" ><asp:Label ID="Label1" Text='<%# Eval("Benutzer") %>' runat="server" /></td>
                <td align="left"><asp:Label ID="Label2" Text='<%# Eval("eMail") %>' runat="server" /></td>
                <td align="left"><asp:Label ID="Label3" Text='<%# Eval("Vorname") %>' runat="server" /></td>
                <td align="left"><asp:Label ID="Label4" Text='<%# Eval("Nachname") %>' runat="server" /></td>
                <td align="left"><asp:Label ID="Label5" Text='<%# Eval("Telefon") %>' runat="server" /></td>
                <td align="left"><asp:Button ID="Button1" Text ="Anzeigen" runat="server" /></td>

            </tr>

        </ItemTemplate>

        </asp:ListView>

Beim Button kann man das onClick Ereignis übergen...aber Ich weiss leider nicht wie Ich das dazugehörige Event erstellen kann :(

Hilfe
20.07.2012 13:38 Beiträge des Benutzers | zu Buddylist hinzufügen
Peter Bucher Peter Bucher ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2785.jpg


Dabei seit: 17.03.2005
Beiträge: 5.819
Entwicklungsumgebung: VS08
Herkunft: Zentralschweiz


Peter Bucher ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Omega90

Übergib die ID doch per Url?
Ansonsten musst du genauer sagen, was du nicht verstehst.

Was ist das Problem mit OnClick?
Das geht ja im ItemTemplate.


Gruss Peter

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Peter Bucher am 20.07.2012 13:55.

20.07.2012 13:54 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt Abt ist männlich
myCSharp.de-Team (Moderation)

images/avatars/avatar-2981.png


Dabei seit: 20.07.2008
Beiträge: 3.397
Entwicklungsumgebung: VS2010, VS2012, ReSharper
Herkunft: Stuttgart


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Das sind Grundlagen von ASP...und wird genauso gehandhabt wie in normalen Anwendungen auch.

Viele Buttons zeigen auf ein Event.
Der senderist der Eventauslöser; anhand dessen kannst Du spezifisch reagieren.
20.07.2012 13:56 Beiträge des Benutzers | zu Buddylist hinzufügen
omega90 omega90 ist männlich
myCSharp.de-Mitglied

Dabei seit: 02.03.2012
Beiträge: 46
Entwicklungsumgebung: Visual Studio 2010
Herkunft: Wetzlar

Themenstarter Thema begonnen von omega90

omega90 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Das Problem ist ja nicht die Übegabe und das es ein onClick besitzt weiss ich auch^^ Nur ist es so das Ich nicht weiss wie Ich auf ein Ereignis reagieren kann wenn die Buttons erst erzeugt werden wenn die ListView gefüllt wird :/

Ist ja nicht so als hätte Ich es nicht versucht.. z.B.

aspx:

C#-Code:
<td align="left"><asp:Button ID="Button1" OnCommand="Button1_Command" CommandArgument='<%# eval("ID") %>' CommandName="Anzeigen" runat="server" /></td>

cs:

C#-Code:
void Button1_Command(object sender, CommandEventArgs e)
        {
            if (e.CommandName == "Anzeigen")
            {
                string sID = e.CommandArgument.ToString();
                int id = 0;
                int.TryParse(sID, out id);

                if (id > 0)
                {
                    //
                }
            }
        }

und bekomme dann folgende Fehlermeldung:

ASP.benutzerliste_aspx" enthält keine Definition für "Button1_Command", und es konnte keine Erweiterungsmethode "Button1_Command" gefunden werden, die ein erstes Argument vom Typ "ASP.benutzerliste_aspx" akzeptiert (Fehlt eine Using-Direktive oder ein Assemblyverweis?).
20.07.2012 14:02 Beiträge des Benutzers | zu Buddylist hinzufügen
MarsStein MarsStein ist männlich
myCSharp.de-Team (Moderation)

images/avatars/avatar-3191.gif


Dabei seit: 27.06.2006
Beiträge: 2.718
Entwicklungsumgebung: VS 2010, MonoDevelop, #Develop
Herkunft: Trier -> München


MarsStein ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

es ist wie Abt sagt - du brauchst einen EventHandler, der alle diese Buttons behandeln kann, und dann nutzt Du ganz normal das OnClick und gibst dort diesen Handler an.
Der sender ist dann der Button.

Im EventHandler kannst Du Dir das richtige Item aus der ListView raussuchen, indem Du alle Items durchläufst, mit FindControl auf den Items den zugehörigen Button ermittelst und dann mit dem sender vergleichst.

Besser ist aber die vorgehensweise mit dem Command und CommandArgument,
wie Du es versucht hast. Die Fehlermeldung ist seltsam, eigentlich sollte das funktionieren. Der Handler sollte protected sein, nicht private - vielleicht ist das der Fehler.

Gruß, MarsStein
20.07.2012 14:08 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
omega90 omega90 ist männlich
myCSharp.de-Mitglied

Dabei seit: 02.03.2012
Beiträge: 46
Entwicklungsumgebung: Visual Studio 2010
Herkunft: Wetzlar

Themenstarter Thema begonnen von omega90

omega90 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ah Ok das hört Sich doch gut an ...danke :P
20.07.2012 14:13 Beiträge des Benutzers | zu Buddylist hinzufügen
omega90 omega90 ist männlich
myCSharp.de-Mitglied

Dabei seit: 02.03.2012
Beiträge: 46
Entwicklungsumgebung: Visual Studio 2010
Herkunft: Wetzlar

Themenstarter Thema begonnen von omega90

omega90 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Was ist den daran falsch Oo ?

aspx

C#-Code:
<asp:Button ID="Button1" Text="Anzeigen" OnCommand="Button1_Command" CommandName="Anzeigen" runat="server" />

cs

C#-Code:
protected void Button1_Command(object sender, ListViewCommandEventArgs e)
        {
            if (e.CommandName == "Anzeigen")
            {
                Response.Redirect("Benutzer.aspx");

            }

        }
20.07.2012 14:52 Beiträge des Benutzers | zu Buddylist hinzufügen
MarsStein MarsStein ist männlich
myCSharp.de-Team (Moderation)

images/avatars/avatar-3191.gif


Dabei seit: 27.06.2006
Beiträge: 2.718
Entwicklungsumgebung: VS 2010, MonoDevelop, #Develop
Herkunft: Trier -> München


MarsStein ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

Zitat:
Was ist den daran falsch Oo ?

Die EventArgs haben den falschen Typ.

Folgender Code läuft bei mir wunderbar:
aspx:

XML-Code:
<asp:Button ID="Button1" Text="Anzeigen" OnCommand="Button1_Command" CommandName="Anzeigen" CommandArgument="myArgument" runat="server" />

cs:

C#-Code:
    protected void Button1_Command(object sender, CommandEventArgs e)
    {
      if (e.CommandName == "Anzeigen")
      {
        Response.Redirect("Benutzer.aspx");

      }

    }

Gruß, MarsStein
20.07.2012 15:03 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
omega90 omega90 ist männlich
myCSharp.de-Mitglied

Dabei seit: 02.03.2012
Beiträge: 46
Entwicklungsumgebung: Visual Studio 2010
Herkunft: Wetzlar

Themenstarter Thema begonnen von omega90

omega90 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ja stimmt :D

danke!!! es geht
20.07.2012 15:16 Beiträge des Benutzers | zu Buddylist hinzufügen
omega90 omega90 ist männlich
myCSharp.de-Mitglied

Dabei seit: 02.03.2012
Beiträge: 46
Entwicklungsumgebung: Visual Studio 2010
Herkunft: Wetzlar

Themenstarter Thema begonnen von omega90

omega90 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wie erhalte Ich jetzt die Informationen von dieser Reihe in der, der Button war. Zum Beispiel wenn Ich die email haben möchte von dem ausgewählten Benutzer.
Wie kann Ich das in einen String übergben?

Ich denke man benötigt den Index von der Zeile in der der Button war oder so ion der Art.

C#-Code:
protected void Button1_Command(object sender, CommandEventArgs e)
        {
            if (e.CommandName == "Anzeigen")
            {
               int selectedIndex = myListView.SelectedIndex;

             //Das geht nicht ;(

              string SessionObject =myListView.Items[selectedIndex].SubItems[1].Text);

//Übergae von eMail oder einem anderen Parameter

Session["eMail"] = SessionObejct;
                Response.Redirect("Benutzer.aspx");

            }
}

die Übergabe kann man auch über QueryString übergeben jedoch ist es erst mal nur wichtig das ich irgendwas übergebe :(
21.07.2012 18:13 Beiträge des Benutzers | zu Buddylist hinzufügen
omega90 omega90 ist männlich
myCSharp.de-Mitglied

Dabei seit: 02.03.2012
Beiträge: 46
Entwicklungsumgebung: Visual Studio 2010
Herkunft: Wetzlar

Themenstarter Thema begonnen von omega90

omega90 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ok Ich glaube Ich habe eine Lösung...kann die aber erst am montag testen da Ich daheim keine AD Datenbank besitze..außer ich baue mir schnell eine Anwendung zum testen :P

C#-Code:
protected void Button1_Command(object sender, CommandEventArgs e)
        {
            if (e.CommandName == "Anzeigen")
            {
                // User in the Line

                Label lb = (Label)myListView.Items[1].FindControl("Label2");

                   Session["email"] = email;

                Response.Redirect("Benutzer.aspx");

            }

EDIT: Hab noch was vergessen^^

string email = lb.Text;
21.07.2012 22:00 Beiträge des Benutzers | zu Buddylist hinzufügen
MarsStein MarsStein ist männlich
myCSharp.de-Team (Moderation)

images/avatars/avatar-3191.gif


Dabei seit: 27.06.2006
Beiträge: 2.718
Entwicklungsumgebung: VS 2010, MonoDevelop, #Develop
Herkunft: Trier -> München


MarsStein ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

mit myListView.Items[1] liest Du immer dasselbe Item aus.

Übergebe entweder im CommandArgument einen Wert, der Dir eindeutig die Zeile identifiziert, oder benutze den sender, und durchlaufe dann Deine Items, um das richtige herauszusuchen.

Gruß, MarsStein
23.07.2012 10:57 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
omega90 omega90 ist männlich
myCSharp.de-Mitglied

Dabei seit: 02.03.2012
Beiträge: 46
Entwicklungsumgebung: Visual Studio 2010
Herkunft: Wetzlar

Themenstarter Thema begonnen von omega90

omega90 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

ich hab dazu einige Fragen...

Es ging mir natürlich erst nur darum das es überhaupt funktioniert, aber jetzt brauch Ich wie du schon sagtest den richtigen Index.

Ich habe meine ASPX Seite ein wenig geändert:

...

C#-Code:
<ItemTemplate>

            <tr runat="server">

                <td align="left" ><asp:Label ID="Label1" Text='<%# Eval("Benutzer") %>' runat="server" /></td>
                <td align="left"><asp:Label ID="Label2" Text='<%# Eval("eMail") %>' runat="server" /></td>
                <td align="left"><asp:Label ID="Label3" Text='<%# Eval("Vorname") %>' runat="server" /></td>
                <td align="left"><asp:Label ID="Label4" Text='<%# Eval("Nachname") %>' runat="server" /></td>
                <td align="left"><asp:Label ID="Label5" Text='<%# Eval("Telefon") %>' runat="server" /></td>

             <td align="left"><asp:LinkButton runat="server" Text="Anzeigen" CommandName="Anzeigen" OnCommand="ListView1_ItemCommand"></asp:LinkButton></td>

            </tr>

        </ItemTemplate>

...

Dazu die Cs Datei:

...

C#-Code:
protected void ListView1_ItemCommand(object sender, ListViewCommandEventArgs e)
        {
            if (e.CommandName == "Anzeigen")
            {
                Label lbText = (Label)e.Item.FindControl("Label2");

               string email = lbText.Text;

               Session["email"] = email;

               Response.Redirect("Benutzer.aspx");

            }
        }

...

Ich bekomme aber immer wieder den Fehler: CS0123: Keine Überladung für "ListView1_ItemCommand" stimmt mit dem Delegaten "System.Web.UI.WebControls.CommandEventHandler" überein.


Wie gehe Ich den vor wenn ich das realisieren möchte was du mir gesagt hast mit dem CommandArgument :/

und ist es egal ob man das ganze mit einem Button oder einem LinkButton macht?
23.07.2012 12:49 Beiträge des Benutzers | zu Buddylist hinzufügen
MarsStein MarsStein ist männlich
myCSharp.de-Team (Moderation)

images/avatars/avatar-3191.gif


Dabei seit: 27.06.2006
Beiträge: 2.718
Entwicklungsumgebung: VS 2010, MonoDevelop, #Develop
Herkunft: Trier -> München


MarsStein ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

der Fehler ist immer noch, dass Du im Command des Buttons mit den ListView-Handlern arbeiten willst.

Am einfachsten hast Du es, wenn Du als CommandName des Buttons den (vordefinierten) Namen "Select" benutzt. Dieser vordefinierte Name aktiviert gewissermassen die im ListView eingebaute automatische Selektion.

Dann kannst Du in Deiner ListView auf die OnSelectedIndexChanging/OnSelectedIndexChanged-Events reagieren, und mit der SelectedIndex-Property arbeiten.

Das müsste genau das sein, was Du suchst. Wahrscheinlich kommst Du dann sogar ohne CommandArgument aus.

Zitat:
und ist es egal ob man das ganze mit einem Button oder einem LinkButton macht?

Ja.

Gruß, MarsStein
23.07.2012 13:22 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
omega90 omega90 ist männlich
myCSharp.de-Mitglied

Dabei seit: 02.03.2012
Beiträge: 46
Entwicklungsumgebung: Visual Studio 2010
Herkunft: Wetzlar

Themenstarter Thema begonnen von omega90

omega90 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Meinst du das?

C#-Code:
protected void Button1_Command(object sender, CommandEventArgs e)
        {
            if (e.CommandName == "Select")
            {
                //Gibt immer -1 zurück
                int selectedIndex = myListView.SelectedIndex;


                Label lb = (Label)myListView.Items[selectedIndex].FindControl("Label2");

                string email = lb.Text;

                Session["email"] = email;

                Response.Redirect("Benutzer.aspx");

            }

        }

Weil wenn ja geht das nicht habe Ich versucht ...Ich versth halt nicht warum das immer die -1 zurück gibt :/
23.07.2012 13:33 Beiträge des Benutzers | zu Buddylist hinzufügen
MarsStein MarsStein ist männlich
myCSharp.de-Team (Moderation)

images/avatars/avatar-3191.gif


Dabei seit: 27.06.2006
Beiträge: 2.718
Entwicklungsumgebung: VS 2010, MonoDevelop, #Develop
Herkunft: Trier -> München


MarsStein ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

ich meine sowas:
aspx:

XML-Code:
<asp:ListView ID="ListView1" OnSelectedIndexChanging="ListView1_OnSelectedIndexChanging" runat="server">
  ...
  <ItemTemplate>
    ...
    <asp:Button ID="myButton" Text="Auswahl" CommandName="Select" runat="server"/>
    ...
</ItemTemplate>
</asp:ListView>

cs:

C#-Code:
    protected void ListView1_OnSelectedIndexChanging(object sender, ListViewSelectEventArgs e)
    {
      // der neue Index steckt in den ListViewSelectEventArgs, soll er später noch
      // verwendet werden, muss hier ListView.SelectedIndex damit besetzt werden.
      ListView1.SelectedIndex = e.NewSelectedIndex;
    }
23.07.2012 13:58 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
omega90 omega90 ist männlich
myCSharp.de-Mitglied

Dabei seit: 02.03.2012
Beiträge: 46
Entwicklungsumgebung: Visual Studio 2010
Herkunft: Wetzlar

Themenstarter Thema begonnen von omega90

omega90 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

AChso ...ja ich habe jetzt das Problem gelöst :)

ASPX:

C#-Code:
<td align="left"><asp:Button ID="Button1" Text="Anzeigen" OnCommand="Button1_Command" CommandName="Select" CommandArgument='<%# Container.DataItemIndex %>'  runat="server" /></td>

CS:

C#-Code:
protected void Button1_Command(object sender, CommandEventArgs e)
        {
            if (e.CommandName == "Select")
            {
               int index = Convert.ToInt32(e.CommandArgument);

                Label lb = (Label)myListView.Items[index].FindControl("Label2");

                string email = lb.Text;

                Session["email"] = email;

                Response.Redirect("Benutzer.aspx");

            }

        }

Ich habe den Index mit CommandArgument='<%# Container.DataItemIndex %>' ermitellt und dann im Codebehind abgefragt :P

Vllt nicht die beste methode aber es funktioniert erst mal und Ich kann weiter machen :) trotzdem danke für deine Mühe ! :)
23.07.2012 14:18 Beiträge des Benutzers | zu Buddylist hinzufügen
MarsStein MarsStein ist männlich
myCSharp.de-Team (Moderation)

images/avatars/avatar-3191.gif


Dabei seit: 27.06.2006
Beiträge: 2.718
Entwicklungsumgebung: VS 2010, MonoDevelop, #Develop
Herkunft: Trier -> München


MarsStein ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

auch eine Möglichkeit ;)

Schau Dir trotzdem mal die Version von mir an: Der Button bekommt nur den CommandName "Select", ein OnCommand für den Button wird gar nicht angegeben.

Dann handelt die ListView das Command über SelectedIndexChanging/SelectedIndexChanged.
Das ist etwas "sauberer".

Gruß, MarsStein.
23.07.2012 14:23 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 10 Monate.
Der letzte Beitrag ist älter als 10 Monate.
Antwort erstellen


© Copyright 2003-2013 myCSharp.de-Team. Alle Rechte vorbehalten. 23.05.2013 01:39