2009-08-11 21 views
2

Ich habe einen Repeater, der einige Daten aus einer SQL-Abfrage zeigt:ASP.NET Ändern einer Repeater DataSource ohne Postback?

<asp:Repeater runat="server" ID="damQuickList" OnItemDataBound="damQuickList_OnItemDataBound"> 
    <HeaderTemplate> 
     <ul> 
    </HeaderTemplate> 

    <ItemTemplate> 
     <li><asp:HyperLink runat="server" ID="damAnchor" /></li> 
    </ItemTemplate> 

    <FooterTemplate> 
     </ul> 
    </FooterTemplate> 
</asp:Repeater> 

Im Code-Behind:

damQuickList.DataSource = (Data.RunSelectQuery("SELECT * FROM Table ORDER BY " + radioButton.Value)); 
damQuickList.DataBind(); 

Gibt es eine Möglichkeit, die Datasource zu ändern und es in dem Repeater aktualisieren, ohne ein Postback auf der Seite machen (wie AJAX es macht)? Ich habe die Async-Steuerelemente verwendet, die ich hier gefunden habe: http://www.asynccontrols.com/, aber es gibt einige Probleme bei der Verwendung mit IE6/7.

Antwort

3

Verwenden Sie die ASP.NET AJAX Komponenten. Setzen Sie einen ScriptManager auf Ihre Seite und legen Sie ein UpdatePanel auf Ihre Seite. In den Update Panels ContentTemplate legen Sie Ihren Repeater.

Ein kurzes Beispiel wie folgt aussehen würde ...

ASPX Markup

<asp:ScriptManager ID="ScriptManager1" runat="server"> 
</asp:ScriptManager> 

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 

     <table> 
      <asp:Repeater ID="Repeater1" runat="server"> 
       <ItemTemplate> 
        <tr> 
         <td> 
          <%# Eval("Data") %> 
         </td> 
        </tr> 
       </ItemTemplate> 
      </asp:Repeater> 
     </table> 

     <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" /> 

    </ContentTemplate> 
</asp:UpdatePanel> 

C# -Code Hinter

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Repeater1.DataSource = yourDataSource; 
    Repeater1.DataBind(); 
} 

Hinweis auf die Schaltfläche 'Auffrischungen' Ihre Datenquelle befindet sich auch in der Inhaltsvorlage. Ich hoffe es hilft.

1

Off-Thema: Ich hoffe, das ist nicht Ihr wirklicher Code; Ich bin mir ziemlich sicher, dass ein böswilliger Benutzer alles, was er wollte, in das radioButton.Value-Feld und SQL-Inject setzen könnte.

+0

Argh, guter Punkt. Das ist nicht mein richtiger Code, aber es ist sehr ähnlich. Danke für den Haken, ich werde die SQL-Abfragen fest codieren und sie mit Ganzzahlen auswählen. –

0

Meinst du eine vollständige Rundreise? Kannst du den Repeater nicht in ein UpdatePanel setzen?