0

特定のものがデータベースから取得された場合にのみ、パラメーターを使用してリンクを追加しようとしています。

これが私のコードです:

protected void GetOrderLines (string OrderID)
{
    string query;
    query = "SELECT ol.ItemId, ol.Amount, ol.Quantity, i.description, ol.RetailPrice, o.OrderDate";
    query += " FROM Distributor d";
    query += " INNER JOIN Orders o";
    query += " ON o.DistID = d.DistID";
    query += " INNER JOIN Orderlines ol";
    query += " ON ol.OrderID = o.OrderID";
    query += " INNER JOIN Items i";
    query += " ON i.InventoryID = ol.ItemID";
    query += " WHERE ol.OrderID = " + OrderID;
    query += " AND ol.GroupItem = 0";
    query += " AND d.DistID = " + Session[ "Distid" ];

    DataTable data = GeneralFunctions.GetData( query );

    RepeaterOrderlineInfo.DataSource = data;
    RepeaterOrderlineInfo.DataBind();
}

これが私に与えるデータです:

ItemId  Amount  Quantity    description RetailPrice OrderDate
6015    660 1   Item 1  660 5/1/2012
6021    199.2   332 Item 2  0.6 5/1/2012
6018    150 6   Item 3  25  5/1/2012
9000    85  4   Technical Support   21.25   5/1/2012
8000    125 4   Custom Programming and Misc. Fees   31.25   5/1/2012

このページの評価コードは次のとおりです。

<asp:Repeater ID="RepeaterOrderlineInfo" runat="server">
    <ItemTemplate>
        <tr>
            <td>
                <%# Eval("Itemid") %>
            </td>
            <td>
                <%# Eval("description") %>
            </td>
            <td align="right">
                <%# Eval("RetailPrice", "{0:C}") %>
            </td>
            <td align="right">
                <%# Eval("Quantity") %>
            </td>
            <td align="right">
                <%# Eval( "Amount", "{0:C}" )%>
            </td>
        </tr>
    </ItemTemplate>
</asp:Repeater>

私はのためのリンクを構築しようとしています<%# Eval("Description") %>

<a href="SupportSummary.aspx?sd="<%# Eval("OrderDate") %>&ed=<%# Eval("OrderDate") //- 1 month %>"><%# Eval("Description") %>

の場合にのみ、説明をリンクにする必要がありdescription = "Technical Support"ます。リピーターを使用する場合、これは可能ですか?

したがって、ここで私が求めている主なものは次のとおりです。

OrderDayeを評価し、1か月を差し引く方法。それが「テクニカルサポート」である場合にのみ、説明の条件を実行する方法。

4

3 に答える 3

2

OnItemCreated出力されたマークアップを細かく制御するには、リピーターを使用して切り替える必要があります。次のように、行うのは非常に簡単です。

<asp:Repeater ID="RepeaterOrderlineInfo" runat="server">
    <ItemTemplate>
        <asp:Label ID="labelDate" runat="server" />
    </ItemTemplate>
</asp:Repeater>

RepeaterOrderlineInfo.ItemCreated += Repeater_ItemCreated;

protected void Repeater_ItemCreated(object sender, RepeatrItemCreatedEventArgs e)
{
    DataRow dataItem = e.Item.DataItem as DataRow;

    if(dataItem != null)
    {
        Label labelDate = e.Item.FindControl("labelDate") as Label;

        if(labelDate != null && row["Description"] != "TechnicalSupport")
           labelDate.Text = // whatever you want to do
    }
}

これにより、テーブルの作成に非常に柔軟に対応できます。正直なところ、私はEval(<string>)あなたのマークアップで可能な限り避け、代わりにあなたのコードビハインドでこれのほとんどを処理しようとします。

于 2012-05-04T17:00:47.143 に答える
1

コードビハインドにメソッドを追加すると、リピーターで次のように呼び出すことができます。

<%# MyMethod(Eval("Description"),Eval("OrderDate")) %>

メソッドは次のようになります。

protected string MyMethod(object description, object orderDate)
{ 
    string link = String.Empty;

    // conditions, assign link if needed

    return link;
}
于 2012-05-04T17:04:37.230 に答える
1

Tejsとmafueの答えは正しいですが、これを行うこともできます>>

<%# Eval("Description").ToString().Equals("Technical Support", StringComparison.OrdinalIgnoreCase) ? link : String.Empty %>
于 2012-05-04T17:16:05.017 に答える