3

このテーマについて多くの質問があることは知っていますが、私の状況は少し異なります。1つのデータリストセルに3つの画像を表示しようとしています。たとえば、SQLサーバーに複数の画像を含むことができる製品テーブルがあります。

 Image Mapping table 
 ID     URL_Mapping_ID ProductID  
 1      image 1.png    1
 2      image 2.png    1
 3      image 3.png    1   

 Product Table 
 ProductID   Product
 1           Chips

SQLから選択すると、結果は複数の行になりますが、画像は異なります。

これで、aspデータリストに、ユーザーがサムネイルを拡大できるように、すべての画像を含む1つの製品を表示する必要があります。

このシナリオを実装するための最良の方法は何でしょうか?

4

2 に答える 2

1

複数の画像に対応するには、HttpHandlerを使用し、IsReusableプロパティをtrueに設定する必要があります。

HttpHandlerを使用したデータベース化された画像のストリーミング

public class FeaturedHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        ...
    }

    public bool IsReusable
    {
        get
        {
            return true;
        }
    }
}

画像をバインドするには

<img class="mainEventsImage" 
    src='<%# Eval("MainImagePath").ToString().Replace("\\", "/") %>' 
        alt='<%# Eval("Title") %>' runat="server" />

レコードごとの画像の数が事前にわからない場合があるため、コードビハインドで画像コントロールを動的に作成する必要があります。

サーバー側でアイテムテンプレートを動的に作成する

于 2012-10-25T19:33:42.323 に答える
1

dataList内にdataListを表示する方法を示す小さなデモを行いました。あなたの与えられた例のために、私は製品dataListの中に別の画像dataListを作成しました。ItemTemplate

<asp:DataList ID="dlProducts" runat="server" DataKeyField="ProductID" DataSourceID="sqlProducts">
    <HeaderTemplate>
        <table>
        <thead>
            <tr>
                <th>ProductID</th>
                <th>Product</th>
                <th>Images</th>
            </tr>
        </thead>
    </HeaderTemplate>
    <ItemTemplate>
        <tr>
            <td><asp:Label ID="ProductIDLabel" runat="server" Text='<%# Eval("ProductID") %>' /></td>
            <td><asp:Label ID="ProductLabel" runat="server" Text='<%# Eval("Product") %>' /></td>
            <td>
                <asp:DataList ID="dlImages" runat="server" DataKeyField="ID" DataSourceID="sqlImages">
                    <ItemTemplate>
                        <img src='<%# Eval("URL_Mapping_ID") %>' width="20px" height="20px" />
                    </ItemTemplate>
                </asp:DataList>
                <asp:SqlDataSource runat="server" ID="sqlImages" ConnectionString='<%$ ConnectionStrings:ConnectionString %>' ProviderName='<%$ ConnectionStrings:ConnectionString.ProviderName %>' SelectCommand="SELECT * FROM [Image] WHERE ([ProductID] = @ProductID)">
                    <SelectParameters>
                        <asp:ControlParameter ControlID="ProductIDLabel" PropertyName="Text" Name="ProductID" Type="Int32"></asp:ControlParameter>
                    </SelectParameters>
                </asp:SqlDataSource>
            </td>
        </tr>
    </ItemTemplate>
    <FooterTemplate>
        </table>
    </FooterTemplate>
</asp:DataList>
<asp:SqlDataSource ID="sqlProducts" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" SelectCommand="SELECT * FROM [Products]"></asp:SqlDataSource>

この解決策は迅速で汚い可能性があるため、ヒントやヒントは大歓迎です!参考までに:このデモを実行すると、これになります。

指定されたソリューションの出力

于 2012-10-25T19:58:50.703 に答える