0
我有一個主細節grid.when我專注於主柵格它將顯示informationn細節grid.it一次顯示一個焦點一個網格,但要保留之前的數據詳細網格和第二個關注的行數據也在網格中,這些數據是以前的數據所覆蓋的如何將gridview關注的行值逐個排列成網格
我有一個主細節grid.when我專注於主柵格它將顯示informationn細節grid.it一次顯示一個焦點一個網格,但要保留之前的數據詳細網格和第二個關注的行數據也在網格中,這些數據是以前的數據所覆蓋的如何將gridview關注的行值逐個排列成網格
您可以處理主網格的SelectedIndexChanged事件並將所選項目的datakey分隔列表。之後,重新綁定使用所有主控網格數據詳細描述這些id存儲在該列表中的數據。
<asp:GridView ID="MasterGridView" runat="server" AutoGenerateColumns="false" Caption="Master"
DataKeyNames="Id">
<Columns>
<asp:CommandField ShowSelectButton="true" SelectText="Select" />
<asp:BoundField HeaderText="Id" DataField="Id" />
<asp:BoundField HeaderText="Name" DataField="Name" />
</Columns>
</asp:GridView>
<hr />
<asp:GridView ID="DetailsGridView" runat="server" AutoGenerateColumns="false"
DataKeyNames="Id" Caption="Details">
<Columns>
<asp:CommandField ShowSelectButton="true" SelectText="Select" />
<asp:BoundField HeaderText="Id" DataField="Id" />
<asp:BoundField HeaderText="Name" DataField="Name" />
<asp:BoundField HeaderText="Age" DataField="Age" />
</Columns>
</asp:GridView>
代碼隱藏:
private List<MyClass> MasterGridViewDataSource
{
get { return Session["MasterGridViewDataSource"] as List<MyClass>; }
set { Session["MasterGridViewDataSource"] = value; }
}
private List<int> SelectedIDs
{
get { return ViewState["SelectedIDs"] as List<int>; }
set { ViewState["SelectedIDs"] = value; }
}
protected void Page_Init(object sender, EventArgs e)
{
MasterGridView.SelectedIndexChanged += MasterGridView_OnSelectedIndexChanged;
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
var masterGridDataSource = GetMasterGridDataSource();
MasterGridViewDataSource = masterGridDataSource;
MasterGridView.DataSource = masterGridDataSource;
MasterGridView.DataBind();
SelectedIDs = new List<int>();
}
}
private List<MyClass> GetMasterGridDataSource()
{
return (from item in Enumerable.Range(1, 10)
select new MyClass { Id = item, Name = string.Format("Item #{0}", item), Age = item })
.ToList();
}
void MasterGridView_OnSelectedIndexChanged(object sender, EventArgs e)
{
var selectedId = (int)MasterGridView.SelectedDataKey.Value;
if (!SelectedIDs.Contains(selectedId))
SelectedIDs.Add(selectedId);
DetailsGridView.DataSource = (from item in MasterGridViewDataSource
join id in SelectedIDs on item.Id equals id
select item);
DetailsGridView.DataBind();
}
[Serializable]
public class MyClass
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}