none
ImageButton in einer Tabelle RRS feed

  • 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?

    Mittwoch, 10. August 2011 08:38

Antworten

  • Hi,

    jesses, wo hast Du denn den Kram her? Ist ja übel. Wenn Du Webforms einsetzt, nimm für sowas einen Repeater.

    <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>
    
    
    Dann bindest Du noch die Datenquelle an den Repeater und alles wird gut :)

    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
    Mittwoch, 10. August 2011 19:11
    Moderator

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
    Mittwoch, 10. August 2011 08:54
    Moderator
  • 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>
    <% } %>    
    
    Wie gesagt die Tabelle liegt in einem Updatepanel für Ajax, ob ich das Control mit einem Trigger belege oder nicht, scheint auch keine Rolle zu spielen
    <asp:PostBackTrigger ControlID="btnUserEdit" />
    

     



    Mittwoch, 10. August 2011 17:40
  • Hi,

    jesses, wo hast Du denn den Kram her? Ist ja übel. Wenn Du Webforms einsetzt, nimm für sowas einen Repeater.

    <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>
    
    
    Dann bindest Du noch die Datenquelle an den Repeater und alles wird gut :)

    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
    Mittwoch, 10. August 2011 19:11
    Moderator
  • 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.

    Mittwoch, 10. August 2011 20:55
  • 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.png

    oder 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
    Mittwoch, 10. August 2011 21:24
    Moderator