ASP.net 2.0 Gridview-Spalten abhängig von mehreren Spalten in der Ergebnismenge gebunden

StackOverflow https://stackoverflow.com/questions/282308

  •  08-07-2019
  •  | 
  •  

Frage

Ich arbeite mit einem ASP.net 2.0 Gridview-Steuerelement, das auf die Ergebnisse einer SQL-Abfrage gebunden ist, so sieht es etwa so aus:

<asp:GridView ID="MySitesGridView" runat="server" AutoGenerateColumns="False" DataSourceID="InventoryDB" AllowSorting="True" CellPadding="4" ForeColor="#333333" GridLines="None" OnRowCommand="GridView1_RowCommand" OnRowDataBound="siteRowDataBound">
        <Columns>
            <asp:BoundField DataField="Server" HeaderText="Server"/>
            <asp:BoundField DataField="Customer" HeaderText="Customer" SortExpression="Customer" />
            <asp:BoundField DataField="PublicIP" HeaderText="Site Address" DataFormatString="&lt;a href='http://{0}/foo'&gt;Go To Site&lt;/a&gt;" />
        </Columns>
</asp:GridView>

Wie Sie sehen, ich bin Links mit Adressen in einer der Spalten (der einen gebunden an das publicIp Feld) Anzeige mit dem Format-String:

&lt;a href='http://{0}/foo'&gt;Go To Site&lt;/a&gt;

Hier ist das Problem: Ich brauche eine des verwenden andere Spalten aus dem Ergebnis sowie die publicIp Spalt in meinen Links gesetzt, aber ich weiß nicht, wie man diese zur Verfügung zu stellen, um meinen Format-String. Ich muss im Wesentlichen die Spalte auf zwei Spalten aus der Ergebnismenge gebunden. Um zu klären, ich brauche so etwas wie:

&lt;a href='http://{0}/{1}'&gt;Go To Site&lt;/a&gt;

Wo {1} ist der Wert meiner anderen Spalte. Gibt es eine Möglichkeit, diese sauber zu erreichen (auch wenn es nicht Formatstrings nicht verwendet)? Ich habe in schaute Template auch mit, kann aber keine einfache Art und Weise sehe es mit ihnen entweder zu tun.

War es hilfreich?

Lösung

Template ist der Weg zu gehen.

Ich ziehe es in der Regel eine private String-Funktion in der Seite zu haben, die ich mehrere Objektvariablen übergeben, und berechnen Sie die resultierenden String zurück.

<a href="<%# CalculateUrl(Eval("PublicIP"), Eval("Customer")) %>">site</a>

und in der Code-Behind:

private string CalculateUrl(object PublicIP, object Customer)
{
    if (PublicIP==null || PublicIP==DBNull.Value)
        return "";
    if (Customer==null || Customer==DBNull.Value)
        return "";
    return "http://" + PublicIP.ToString() + "/" + Customer.ToString();
}

Vorteil ist, dass die Funktion in einer gemeinsamen übergeordneten Klasse geteilt werden, oder als statische öffentliche Funktion einer Utility-Klasse.

Andere Tipps

Haben Sie Template in Kombination mit Eval versucht?

<asp:TemplateField>
    <ItemTemplate>
        <a href='<%#Eval("PublicIP")/<%# Eval("Customer") %>'>Go to site</a>
    </ItemTemplate>
</asp:TemplateField>

Wenn Sie eine tatsächliche Verbindung möchten, können Sie auch einen Hyperlink verwenden, die eine Eigenschaft DataNavigateUrlFields hat (Plural), die Sie mehrere Felder angeben können. Anschließend setzen Sie DataNavigateUrlFormatString etwas enthält, {0}, {1} etc. Dies wird Ihr Link werden. Für den Linktext verwenden Sie DataTextFormatString und Datatextfield (Singular, fragen Sie mich nicht warum). Dies ist wahrscheinlich ein bisschen leichter als ein Template (wenn auch weniger flexibel).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top