2009-07-17 13 views
0

Mögliche Duplizieren:
Using ASP.NET Controls without databindingDatabinding Vs Looping

My previous question ergab einige Ergebnisse so dass ich dachte, ich würde die Frage umformulieren und erneut versuchen.

Dies funktioniert nicht, da ich keinen Wert in einem Steuerelement festlegen kann, für das das RUNTAT-Attribut festgelegt wurde. Was ist der beste Weg, jeder Zeile einen Wert zu geben, wenn das Ereignis on click auftritt, kann ich den Wert des angeklickten Elements einlesen. Ich kann den Wert nicht in die Abfragezeichenfolge eingeben und kann die asp.net-Datenbindung nicht verwenden.

was ich tue ist viel komplexer als das, Databinding wird nicht funktionieren.

PERHAPS eine bessere Möglichkeit, die Frage zu stellen ist, gibt es sowieso den oben genannten Looping-Mechanismus und immer noch eine Verbindung zu einer Methode auf dem Codebehind eines Steuerelements?

+1

DataBind würde dies so viel sauberer und einfacher machen ... gibt es einen Grund, warum Sie nicht databind verwenden kann? – BigBlondeViking

+2

Du hast den Leuten alle zwei Stunden gegeben, um bei deiner vorherigen Frage einen Swing zu haben - gib uns eine Chance! Wählen Sie, um als ein Betrogener zu schließen. – butterchicken

+0

Abstimmung zum Schließen. @Qiky: Wenn du deine Frage umschreiben willst, * bearbeite * sie. Erstelle keinen neuen. – Randolpho

Antwort

0

Mischungscode in Ihrem Markup tut wirklich nicht funktioniert gut mit ASP.Net Serversteuerelementen. Es gibt mehrere bessere Alternativen. Hier ist eine:

Markup:

<table> 
    <asp:Placeholder id="RowPlaceholder" runat="server" /> 
</table> 

-Code hinter:

foreach (MyObject x in TT) 
{ 
    Literal l1 = new Literal(); 
    l1.Text = string.Format("<tr><td>{0}</td><td>", x.val); 

    ImageButton b = new ImageButton(); 
    b.ImageUrl = "../images/IMG.png"; 
    b.CommandArgument = x.pkid; 
    b.CommandName = "uiImgResolve_Click"; // maybe do this a little differenlty 

    Literal l2 = new Literal(); 
    l2.TExt = "</td></tr>"; 

    RowPlaceholder.Controls.Add(l1); 
    RowPlaceHolder.Controls.Add(b); 
    RowPlaceHodler.Controls.Add(l2); 

} 
+0

Danke Joel das ist die erste Antwort, die nützlich ist und nicht nur eine Beschwerde ... Würden Sie empfehlen, die ASP-Kontrolle zu entfernen und nur ein HTML-IMG verwenden? –

+0

Nein, weil Sie möchten, dass es mit einem Serverereignis verbunden ist. –

+0

Sie wären besser mit einem Repeater und der Verwendung von Databind - macht es ein bisschen einfacher zu sehen, was aus dem HTML passiert und Sie müssen nicht mit den Komplexitäten umgehen, die Sie dynamisch hinzufügen Steuerelemente auf der Seite. – Paddy

3

Ich würde empfehlen, in die ASP repeater control zu suchen. Es bietet ein ItemDatabound-Ereignis, mit dem Sie den Inhalt bearbeiten können, der dynamisch generiert wird.

+0

was ich zu tun versuche, beinhaltet das Durchlaufen von Thu und das Anzeigen mehrerer generischer Listen. Ich werde Datenbinding nicht verwenden, weil es nur ein Durcheinander schaffen wird, Danke für Ihre Antwort tho. –

0

Ein Repeater und sogar ein Gridview könnte funktionieren. Es ist jedoch notwendig, OnRowCommand auszuführen. Definitiv sauberer als was Paddy sagte.

ASPX

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowDataBound="GridView1_RowDataBound"> 
    <Columns> 
     <asp:BoundField DataField="val" /> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <asp:ImageButton ID="Button1" runat="server" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

Codebehind:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     GridView1.DataSource = TTTT; 
     GridView1.DataBind(); 
    } 
} 
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType != DataControlRowType.DataRow) 
     return; 

    XXX x = (XXX)e.Row.DataItem; 
    ImageButton btn = (ImageButton)e.Row.FindControl("Button1"); 
    btn.CommandArgument = x.pkid; 
    btn.ImageUrl = "../images/IMG.png"; 
} 
+0

@ o.k.w Dies ist keine Option, die Logik ist viel komplexer als dargestellt und würde das Einbetten mehrerer Steuerelemente ineinander umfassen. –

+0

OWK Ich bin mir bewusst, dass Sie dies ganz einfach tun können, aber was ich versuche zu tun, beinhaltet das Wiederholen von Thu und das Anzeigen mehrerer generischer Listen. Ich werde Datenbinding nicht verwenden, weil es nur ein Durcheinander schaffen wird, Danke für Ihre Antwort tho. –

+0

@Qiky Nun, ich nehme an, ich hätte keine Antwort auf die unbekannte Komplexität Ihres Problems. –