如何将gridview中的复选框保存到会话中?

时间:2016-05-26 15:22:09

标签: c# asp.net gridview

我有2个网格视图。一个用于商店,另一个用于购物车。对于商店中的gridview,我在每个产品旁边都有复选框,供用户选择并添加到购物车中。然后,这将把他们带到购物车页面,该页面将有一个返回按钮。如何创建会话以保留所有选定的产品,以便在用户点击它们之前选择的产品时仍然可以选择。

Gridview for Shop:

            <Columns>
            <asp:BoundField DataField="Id" HeaderText="Id" ReadOnly="True" SortExpression="Id" />
            <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
            <asp:BoundField DataField="Price" DataFormatString="{0:c2}" HeaderText="Price" SortExpression="Price" />
            <asp:TemplateField HeaderText="Add To Cart">
                <ItemTemplate>
                    <asp:CheckBox ID="cbAdd" runat="server" />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>

1 个答案:

答案 0 :(得分:0)

您可以在用户选中此框时存储您的ID值。然后在页面加载时绑定数据行,您可以使用该存储ID列表重新检查框。例如,见下文:

为商店ID添加隐藏字段:

<asp:HiddenField ID="HiddenSelectedRows" runat="server" />

将OnRowDataBound事件添加到GridView:

OnRowDataBound="MyGridView_RowDataBound"

添加客户端javascript代码:

function getHiddenSelectedRows() { return $get("<%= this.HiddenSelectedRows.ClientID %>"); };    

var selectedRows = [];

function rowCheckedChanged(sender){       

        if (sender.checked) {
    //Find your row's ID value to use later
            selectedRows.push($("#" + sender.id)[0].parentElement.parentElement.parentElement.cells[1].innerHTML);
            getHiddenSelectedRows().value = selectedRows;
        } else {
            var index = selectedRows.indexOf($("#" + sender.id)[0].parentElement.parentElement.parentElement.cells[1].innerHTML);
            if (index > -1) {
                selectedRows.splice(index, 1);
                getHiddenSelectedRows().value = selectedRows;
            }
        }
    };

将服务器端代码更改为生成的事件代码:

    protected void MyGridView_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        List<string> selectedRows = this.HiddenSelectedRows.Value.Split(',').ToList();
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            if (selectedRows.Contains(e.Row.Cells[1].Text))
            {
                CheckBox chk = (CheckBox)e.Row.FindControl("cbSelect");
                chk.Checked = true;
            }
        }

    }