【问题标题】:How to save checkboxes from gridview into a session?如何将gridview中的复选框保存到会话中?
【发布时间】:2016-05-26 15:22:09
【问题描述】:

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

商店的网格视图:

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

【问题讨论】:

  • 您始终可以将gridview 的数据源保存到会话中。在 Form Load 事件中获取该数据,然后在网格视图的 OnRowDataBound 中获取数据,只需循环并检查源中检查的所有项目。

标签: c# asp.net gridview


【解决方案1】:

当用户选中该框时,您可以存储您的 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;
            }
        }

    }

【讨论】:

    猜你喜欢
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 2019-08-21
    • 2014-07-06
    • 2018-02-28
    • 2016-09-10
    相关资源
    最近更新 更多