|
| » myCSharp.de Diskussionsforum |
|
|
|
|
Autor
 |
|
omega90
myCSharp.de-Mitglied
Dabei seit: 02.03.2012
Beiträge: 46
Entwicklungsumgebung: Visual Studio 2010 Herkunft: Wetzlar
|
|
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"] =
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
myCSharp.de-Poweruser/ Experte
Dabei seit: 17.03.2005
Beiträge: 5.819
Entwicklungsumgebung: VS08 Herkunft: Zentralschweiz
|
|
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
myCSharp.de-Team (Moderation)
Dabei seit: 20.07.2008
Beiträge: 3.397
Entwicklungsumgebung: VS2010, VS2012, ReSharper Herkunft: Stuttgart
|
|
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
myCSharp.de-Mitglied
Dabei seit: 02.03.2012
Beiträge: 46
Entwicklungsumgebung: Visual Studio 2010 Herkunft: Wetzlar
Themenstarter
|
|
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
myCSharp.de-Team (Moderation)
Dabei seit: 27.06.2006
Beiträge: 2.718
Entwicklungsumgebung: VS 2010, MonoDevelop, #Develop Herkunft: Trier -> München
|
|
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
myCSharp.de-Mitglied
Dabei seit: 02.03.2012
Beiträge: 46
Entwicklungsumgebung: Visual Studio 2010 Herkunft: Wetzlar
Themenstarter
|
|
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
myCSharp.de-Team (Moderation)
Dabei seit: 27.06.2006
Beiträge: 2.718
Entwicklungsumgebung: VS 2010, MonoDevelop, #Develop Herkunft: Trier -> München
|
|
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
myCSharp.de-Mitglied
Dabei seit: 02.03.2012
Beiträge: 46
Entwicklungsumgebung: Visual Studio 2010 Herkunft: Wetzlar
Themenstarter
|
|
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;
string SessionObject =myListView.Items[selectedIndex].SubItems[1].Text);
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
myCSharp.de-Mitglied
Dabei seit: 02.03.2012
Beiträge: 46
Entwicklungsumgebung: Visual Studio 2010 Herkunft: Wetzlar
Themenstarter
|
|
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")
{
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
myCSharp.de-Team (Moderation)
Dabei seit: 27.06.2006
Beiträge: 2.718
Entwicklungsumgebung: VS 2010, MonoDevelop, #Develop Herkunft: Trier -> München
|
|
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
myCSharp.de-Mitglied
Dabei seit: 02.03.2012
Beiträge: 46
Entwicklungsumgebung: Visual Studio 2010 Herkunft: Wetzlar
Themenstarter
|
|
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
myCSharp.de-Team (Moderation)
Dabei seit: 27.06.2006
Beiträge: 2.718
Entwicklungsumgebung: VS 2010, MonoDevelop, #Develop Herkunft: Trier -> München
|
|
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
myCSharp.de-Mitglied
Dabei seit: 02.03.2012
Beiträge: 46
Entwicklungsumgebung: Visual Studio 2010 Herkunft: Wetzlar
Themenstarter
|
|
Meinst du das?
C#-Code: |
protected void Button1_Command(object sender, CommandEventArgs e)
{
if (e.CommandName == "Select")
{
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
myCSharp.de-Team (Moderation)
Dabei seit: 27.06.2006
Beiträge: 2.718
Entwicklungsumgebung: VS 2010, MonoDevelop, #Develop Herkunft: Trier -> München
|
|
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)
{
ListView1.SelectedIndex = e.NewSelectedIndex;
}
|
|
|
23.07.2012 13:58
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
omega90
myCSharp.de-Mitglied
Dabei seit: 02.03.2012
Beiträge: 46
Entwicklungsumgebung: Visual Studio 2010 Herkunft: Wetzlar
Themenstarter
|
|
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
myCSharp.de-Team (Moderation)
Dabei seit: 27.06.2006
Beiträge: 2.718
Entwicklungsumgebung: VS 2010, MonoDevelop, #Develop Herkunft: Trier -> München
|
|
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
|
|
|
|