gpt4 book ai didi

asp.net - 如何记住每次翻页之间选定的复选框

转载 作者:行者123 更新时间:2023-12-02 15:07:36 25 4
gpt4 key购买 nike

我有一个带分页的 ListView 。每个分页有 10 行,其中包含用户名、电子邮件和复选框。

我需要能够在不同的“分页”中选中几个复选框,按下按钮并向每个选中的用户发送一封电子邮件。

问题是我真的不知道如何记住每次分页按下之间选定的复选框。

你和我在一起吗?

有人有类似的解决方案或一些关于如何做到这一点的提示吗?我更愿意在没有 jQuery 的情况下解决这个问题,但普通的 javascript 或 C# 解决方案工作得很好。

提前致谢!

最佳答案

试试这个 http://forums.asp.net/t/1619741.aspx?Remember+checkboxes+in+ListView

您可以维护一个选择列表<>(例如每个记录的ID,唯一值),并且必须将该列表保留在ViewState中。在页面更改时更新列表。通过代码隐藏函数绑定(bind)复选框选中属性,该函数检查 id 是否在列表中。

这是一个示例:

        <asp:ListView ID="ListView1" runat="server" OnPagePropertiesChanging="ListView1_PagePropertiesChanging">
<LayoutTemplate>
<table id="Table2" runat="server" class="listview" width="100%">
<tr>
<td>
<table id="itemPlaceholderContainer" runat="server">
<tr>
<th>
</th>
<th>
</th>
<th id="thid" runat="server" visible="false">
ID
</th>
<th id="thname" runat="server">
Name
</th>
</tr>
<tr id="itemPlaceholder" runat="server">
</tr>
</table>
</td>
</tr>
<tr id="Tr3" runat="server">
<td id="Td2" runat="server" style="">
<asp:DataPager ID="DataPager1" runat="server" PageSize="5" PagedControlID="ListView1"
OnPreRender="DataPager1_PreRender">
<Fields>
<asp:NumericPagerField />
</Fields>
</asp:DataPager>
</td>
</tr>
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td>
<input type="checkbox" id="CheckBox1" runat="server" value='<%# Eval("ID") %>' checked='<%# Selected(Eval("ID")) %>' />
</td>
<td>
<asp:Label ID="lblID" runat="server" Text='<%# Eval("ID") %>' />
</td>
<td>
<asp:Label ID="lblName" runat="server" Text='<%# Eval("Name") %>' />
</td>
</tr>
</ItemTemplate>
</asp:ListView>

code-behind:

List<string> cBoxSelections = new List<string>();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindListView();
}
}

private void BindListView()
{
ListView1.DataSource = CreateDataSource();
ListView1.DataBind();
}

protected DataTable CreateDataSource()
{
DataTable dt = new DataTable();
DataRow dr;
dt.Columns.Add(new DataColumn("ID", typeof(Int32)));
dt.Columns.Add(new DataColumn("Name", typeof(string)));
for (int i = 0; i < 33; i++)
{
dr = dt.NewRow();

dr[0] = i;
dr[1] = string.Concat("Name",i.ToString());
dt.Rows.Add(dr);
}
return dt;
}

protected Boolean Selected(object sender)
{
Boolean flag = false;
string ID = Convert.ToString(sender);
if (!string.IsNullOrEmpty(ID))
{
flag = cBoxSelections.Exists(item => item.Equals(ID));
}
return flag;
}

private void UpdateSelections()
{
if (ViewState["sel"] != null)
{
cBoxSelections = (List<string>)ViewState["sel"];
}
foreach (ListViewDataItem item in ListView1.Items)
{
HtmlInputCheckBox cbox = (HtmlInputCheckBox)item.FindControl("CheckBox1");
if (cbox != null)
{
string selectedItem = cBoxSelections.Find(key => key.Equals(cbox.Value));
if (selectedItem == null)
{
if (cbox.Checked.Equals(true))
{
cBoxSelections.Add(cbox.Value);
}
}
if (selectedItem != null)
{
if (cbox.Checked.Equals(false))
{
cBoxSelections.Remove(cbox.Value);
}
}
}
}
if (cBoxSelections.Count > 0)
{
ViewState["sel"] = cBoxSelections;
}
}
protected void DataPager1_PreRender(object sender, EventArgs e)
{
BindListView();
}


protected void ListView1_PagePropertiesChanging(object sender, PagePropertiesChangingEventArgs e)
{
UpdateSelections();
}

您需要例程 Selected(返回 bool 值)和 UpdateSelections(维护),其余代码只需获取 ListView 来演示示例以及虚拟数据。

关于asp.net - 如何记住每次翻页之间选定的复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4096403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com