我有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>
答案 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;
}
}
}