Benutzer mit den meisten Antworten
ImageButton in einer Tabelle

Frage
-
Hallo zusammen,
ich habe gerade ein Problem bei dem ich nicht weiter komme.
Ich habe eine HTML Tabelle ( <table><tr><td> usw. ) in einer der Zellen befindet sich ein WebControl, geneuer gesagt ein ImageButton. Die Tabelleneinträge werden mit einer foreach-Schleife erstellt. In der foreach-Schleife wird dem ImageButton, der Eigenschaft CommandArgument ein Wert zugewiesen. Die ganze Tabelle ist in einem UpdatePanel eingebettet damit sie via Ajax neu geladen werden kann. Soweit so gut, alles geht, die Tabelle wird angezeigt und der Imagebutton ist zu sehen.
Wenn ich jetzt auf den ImageButton klicke und das Click-Ereignis ausgelöst wird, ist die Eigenschaft CommandArgument leer.
Was mache ich falsch?
Antworten
-
Hi,
jesses, wo hast Du denn den Kram her? Ist ja übel. Wenn Du Webforms einsetzt, nimm für sowas einen Repeater.
Dann bindest Du noch die Datenquelle an den Repeater und alles wird gut :)<asp:Repeater ID="Items" runat="server"> <HeaderTemplate> <table> <tr> <th>Spalte 1</th> <th>Spalte 3</th> </tr> <ItemTemplate> <tr> <td> <asp:Label ID="lblUsername" runat="server" Text="Label"></asp:Label> </td> <td style="width: 100px"> <asp:ImageButton ID="btnUserEdit" runat="server" ImageUrl="images/group_edit.png" OnClick="btnUserEdit_Click" CommandName="Edit" CommandArgument="<%# ((Web.Account.Account)Container.DataItem).AccountID.ToString() %>" /> </td> </tr> </ItemTemplate> <FooterTemplate> </table> </FooterTemplate> </asp:Repeater>
Items.DataSource = SearchAccountList; Items.DataBind();
Ich hab das jetzt nur schnell dahingeschrieben, es können sich also noch Fehlerchen verstecken. Insbesonder der DataBinding Ausdruck <%# ... %> könnte inhaltlich falsch sein, hab ich jetzt aber nicht testen wollen.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Velbert Mittwoch, 10. August 2011 20:14
Alle Antworten
-
Hi,
hast Du auch einen Wert bei CommandName angegeben?
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Ich habe es jetzt auch mit CommandName probiert aber ohne erfolg.
Vielleicht liegt der Fehler im Detail:
<% foreach (Web.Account.Account Account in SearchAccountList) { lblUsername.Text = Account.Accountname; btnUserEdit.CommandName = "Edit"; btnUserEdit.CommandArgument = Account.AccountID.ToString(); %> <tr> <td> <asp:Label ID="lblUsername" runat="server" Text="Label"></asp:Label> </td> <td style="width: 100px"> <asp:ImageButton ID="btnUserEdit" runat="server" ImageUrl="images/group_edit.png" OnClick="btnUserEdit_Click" /> </td> </tr> <% } %>
<asp:PostBackTrigger ControlID="btnUserEdit" />
-
Hi,
jesses, wo hast Du denn den Kram her? Ist ja übel. Wenn Du Webforms einsetzt, nimm für sowas einen Repeater.
Dann bindest Du noch die Datenquelle an den Repeater und alles wird gut :)<asp:Repeater ID="Items" runat="server"> <HeaderTemplate> <table> <tr> <th>Spalte 1</th> <th>Spalte 3</th> </tr> <ItemTemplate> <tr> <td> <asp:Label ID="lblUsername" runat="server" Text="Label"></asp:Label> </td> <td style="width: 100px"> <asp:ImageButton ID="btnUserEdit" runat="server" ImageUrl="images/group_edit.png" OnClick="btnUserEdit_Click" CommandName="Edit" CommandArgument="<%# ((Web.Account.Account)Container.DataItem).AccountID.ToString() %>" /> </td> </tr> </ItemTemplate> <FooterTemplate> </table> </FooterTemplate> </asp:Repeater>
Items.DataSource = SearchAccountList; Items.DataBind();
Ich hab das jetzt nur schnell dahingeschrieben, es können sich also noch Fehlerchen verstecken. Insbesonder der DataBinding Ausdruck <%# ... %> könnte inhaltlich falsch sein, hab ich jetzt aber nicht testen wollen.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Velbert Mittwoch, 10. August 2011 20:14
-
Danke, der Repeater ist das Element was gefehlt hat. Ich muss zugeben ich bin noch etwas zu sehr Klassik-ASP angehaucht. Dachte es würde so auch gehen.
Wenn ich in einer Zelle eine Grafik einfügen möchte die je nach Accountstatus gewechselt werden soll, wie würde sowas aussehen? Dazu finde ich im Web leider gar nichts.
-
Hi,
Wenn ich in einer Zelle eine Grafik einfügen möchte die je nach Accountstatus gewechselt werden soll, wie würde sowas aussehen? Dazu finde ich im Web leider gar nichts.
im ItemTemplate des Repeaters schreibst Du dann bspw.:
<asp:Image ... ImageUrl="<%# this.GetLoginStateImageUrl( ((<Typ>)Container.DataItem).IsOnline ) %>" />
im Code erzeugst Du dann eine Methode "GetLoginStateImageUrl" mit dem enbtsprechenden Übergabeparameter. Je nach Zustand gibst du dann bspw.:
~/Images/Online.pngoder halt
~/Images/Offline.png
zurück.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community