0

asp.netページにデータリストがImageButtonあり<Item Template>ます。ImageButtonをクリックすると、イベントを使用してItemCommandデータ項目の境界線を設定します。

 protected void dlProducts_ItemCommand(object source, DataListCommandEventArgs e)
    {
        e.Item.BorderColor = System.Drawing.ColorTranslator.FromHtml("#ff5800");
        e.Item.BackColor = System.Drawing.ColorTranslator.FromHtml("#ffeee5");

    }

これは問題なく機能しますが、ポストバックが発生すると境界線が消えます。次のように、ページ読み込みイベントでデータリストをバインドしようとしました。

if (!Page.IsPostBack)
        {
            dlProducts.DataSource = ObjectDataSource4;
            dlProducts.DataKeyField = "Product_ID";
            dlProducts.DataBind();
        }

しかし、ポストバックの後で国境はなくなった。何が得られますか?

データリストのマークアップは次のとおりです。

<asp:DataList ID="dlProducts" runat="server" CellPadding="5" CellSpacing="5"
           OnItemCommand="dlProducts_ItemCommand"
        RepeatColumns="4" RepeatDirection="Horizontal"
            ondatabinding="dlProducts_DataBinding" 
            onitemdatabound="dlProducts_ItemDataBound"  >
            <ItemTemplate>
                <asp:ImageButton ID="img" ImageAlign="Middle" runat="server" 
            ImageUrl='<%# "~/uploads/profile/" + DataBinder.Eval(Container.DataItem,"ProfileImageName").ToString() %>' 
            onclick="img_Click" />
            </ItemTemplate>
    </asp:DataList><asp:ObjectDataSource ID="ObjectDataSource4" runat="server" SelectMethod="GetAllCompetitorProducts"
        TypeName="DalProduct" OldValuesParameterFormatString="original_{0}">
        <SelectParameters>
            <asp:SessionParameter Name="producttype_id" SessionField="ProductType_id" Type="Int32" DefaultValue="13" />
            <asp:SessionParameter DefaultValue="2009" Name="Year" SessionField="Year" Type="Int32" />
        </SelectParameters>
    </asp:ObjectDataSource>
4

1 に答える 1

1

これを試して:

 <ItemTemplate>
    <div id="divImg" runat="server">
     <asp:ImageButton ID="img" ImageAlign="Middle" runat="server" 
                ImageUrl='<%# "~/uploads/profile/" + DataBinder.Eval(Container.DataItem,"ProfileImageName").ToString() %>' 
                onclick="img_Click" />

    </div>
 </ItemTemplate>

ItemCommand で

 protected void dlProducts_ItemCommand(object source, DataListCommandEventArgs e)
 {
        var divImg = (HtmlGenericControl)e.Item.FindControl("divImg");
        divImg.Style.Add("background-color", "#ffeee5"); 
 }

ご覧のとおり、img コントロールはサーバーの div 要素にラップされているため、ポストバックが発生すると、viewstate からその状態が自動的に復元されます。そうは言っても、ポストバックでは問題なく動作しますが、グリッドを再バインドすると、スタイルが失われます。再バインド後も保持するには、itemcommand で img の ID をビューステートに保存し、それに応じてスタイルを適用します。

また、コード ビハインドで色を適用する代わりに、div 要素に class 属性を使用することをお勧めします。

divImg.Attributes.Add("class", "classnamewhichhasgroundandbordercolor");
于 2012-12-14T21:42:59.350 に答える