DataList mit Bedingungen zur Laufzeit

bleifresser

Mitglied
Hallo,

es ist schwer, für das Problem eine geeignete Überschrift zu finden.
Es geht um Foldendes:

Ich habe eine ASP.Net Application (.Net 2.0), mit der in einer Datenbank gesucht werden kann. In der Datenbank sind Dateinamen und deren Speicherort (etc.) hinterlegt.
Die Suchfunktion gibt ein DataSet zurück, welches an eine DataList gebunden wird.
Soweit funktioniert alles.
Nun wird in der DataList noch ein ImageButton angezeigt, mit dem der Nutzer die angezeigten Dateien in eine Art Warenkorb legen kann. Wenn er das macht, soll sich der ImageButton ändern (ein anderes Bild anzeigen). Hier beginnen die Probleme.
Ich habe den Button und er fügt auch die Dateien in den "Warenkorb" ein. Da ich nach der SQL Anfrage die ASP Seite neu lade (Response.Redirect) um ein mehrfaches Absenden des Formulars zu verhindern (z.B. durch Strg - F5), muss ich für jeden Datensatz in der DataList prüfen, ob er im "Warenkorb" vorhanden ist und das Bild des ImageButtons ändern.
Ich hoffe, dass verständlich ist, was ich meine.

Auszug aus der aspx:
Code:
<asp:DataList ID="searchResultDataList" runat="server">
                        <ItemTemplate>
                            <div class="result">
                                <h3 class="filename"><%# DataBinder.Eval(Container.DataItem,"Filename") %></h3>
                                <p class="left">
                                    <strong>Medium: </strong> <%# DataBinder.Eval(Container.DataItem,"Medium") %><br />
                                    <strong>Pfad:</strong> <%# DataBinder.Eval(Container.DataItem,"Path") %><br />
                                    <strong>Erstellt am:</strong> <%# DataBinder.Eval(Container.DataItem,"Creation") %>&nbsp;<strong>Gr&ouml;&szlig;e:</strong> <%# DataBinder.Eval(Container.DataItem,"Size") %> byte
                                </p>  
                                <p class="right">
                                    &nbsp;<asp:ImageButton ID="addFileImageButton" CommandName="AddFileToRestore" CommandArgument='<%#DataBinder.Eval(Container.DataItem,"file_id") %>' runat="server" ImageUrl="~/pics/Add.png"
                                        OnClick="addFileImageButton_Click" /></p>  
                               <p class="break">&nbsp;</p>         
                            </div>
                        </ItemTemplate>
                    </asp:DataList>

Ich bin recht neu in der ASP Welt, mit PHP habe ich mehr Erfahrungen, weshalb mir ASP nicht wirklich leicht von der Hand geht. Kann ich für dieses Problem überhaupt eine Datalist nehmen?

MfG
Frank
 

bleifresser

Mitglied
Hab selber eine Lösung gefunden.
Für alle die es interessiert:

DataList hat ein Event namens "ItemDataBound", welcher für jeden Datensatz gefeuert wird, der an das Steuerelement gebunden wird.
Über den zweiten Paremeter des Events, kommt man an die Daten und an die Controls im ItemTemplate ran. Der Rest ist if then else :)

Hier der Code:
Code:
protected void searchResultDataList_ItemDataBound(object sender, DataListItemEventArgs e)
    {
        DataRowView dr = (DataRowView)e.Item.DataItem;
        
        if (r.ContainsMediumItem(Convert.ToInt32(dr.Row["file_id"]),"File"))
        {
            ImageButton img = (ImageButton)e.Item.FindControl("addFileImageButton");
            img.ImageUrl = "~/pics/Minus.png";
            img.CommandName = "RemoveFileFromRestore";
        }
    }

Zur Erklärung:
- "r" ist ein Objekt, in dem eine ArrayList gespeichert wird
- wenn Datei mit der file_id in der ArrayList steckt, dann ändere ImageButton
- ContainsMediumItem ist einfach nur eine Suchfunktion in r

Tschau Frank