簡體   English   中英

如何將 gridview 聚焦的行值一一放入網格

[英]how to get gridview focused row values into grid one by one

我有一個主細節網格。當我專注於主網格時,它將顯示信息細節網格。它一次顯示一個焦點一個網格,但希望將先前的數據保留在詳細網格中,並將第二個集中的行數據也保留在網格中它被以前的數據所取代

您可以處理主網格的 SelectedIndexChanged 事件並將所選項目的數據鍵放在單獨的列表中。 之后使用存儲在該列表中的所有主網格數據重新綁定詳細信息網格。

<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; }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM