|
分類:[ASP.NET (C#)]
Page_Load時に、ListView.DataSourceにDataTableをバインドしていますが、他イベント発生時にListView.DataSourceを参照するとnullが取得されてバインドデータまで辿り着けません。 ListView.DataSourceを再取得する方法はございませんか?
※実装したい内容は選択行の背景色を変えるためにListViewにselecteditemtemplateを設定していますが、 行選択時に再度バインドが必須であり、その際に自分自身のDataSourceを取得したいです。 バインド時にセッションにつめたデータを再利用する他サイトで見つけたのですが、 コントロール数が多く実装を減らしたいこともありセッションやViewStateで保持をしないで実装できる方法を考えています。
何卒宜しくお願いします。
■aspx <asp:ListView id="testLv" runat="server" OnSelectedIndexChanging="SelectedIndexChanging"> <LayoutTemplate> <div ID="itemPlaceholderContainer" runat="server"> <span ID="itemPlaceholder" runat="server" /> </div> </LayoutTemplate> <ItemTemplate> <span id="td1" runat="server"> <asp:LinkButton runat="server" ID="Select" CommandName="Select"><%# Eval("td1") %></asp:LinkButton> </span> </ItemTemplate> <SelectedItemTemplate> <span id="td1" runat="server" style="background-color:Blue; color:White;"> <asp:LinkButton runat="server" ID="Select" CommandName="Select"><%# Eval("td1") %></asp:LinkButton> </span> </ItemTemplate </SelectedItemTemplate> </asp:ListView>
■.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data;
namespace WebApplication4 { public partial class DetailsViewPagingSample : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (IsPostBack == false) { DataTable dt = new DataTable(); dt.Columns.Add("td1"); DataRow drNew = dt.NewRow(); drNew["td1"] = "Item01"; dt.Rows.Add(drNew);
this.testLv.DataSource = dt; this.testLv.DataBind(); //セッションに保持 Session["lvData"] = dt; } }
protected void SelectedIndexChanging(object sender, ListViewSelectEventArgs e) { this.testLv.SelectedIndex = e.NewSelectedIndex; //保持したセッションを使用 this.testLv.DataSource = Session["lvData"]; //←セッションなどで保持したくない this.testLv.DataBind(); } } }
|