我想立即更新状态行,指示asp.net gridview所有页面中已选中复选框的数量。现在我只能巧妙地计算当前gridview页面上检查的复选框的数量。
这是我的代码:
$(document).ready(initAll);
function initAll(){
countChecked();
$(".activeBoxes").click(countChecked);
}
function countChecked() {
var n = $(".activeBoxes input:checked").length;
$("#checkboxStatus").text(n + (n == 1 ? " vehicle is" : " vehicles are") + " selected on this page. ");
if( n == 0){
$(".activateButton").hide();
$("#checkboxStatus").hide();
}else{
$("#checkboxStatus").show();
$(".activateButton").show();
}
}
答案 0 :(得分:0)
您可以在页面更改时跟踪viewstate(或类似内容)中的总选择。我做了类似的事情跟踪数组中选定的行ID。在我的情况下,我必须在他们返回页面时重新检查项目。此外,如果您允许排序,则选择可能会跨页面移动。
编辑:对不起,这实际上不是你的Jquery问题,但也许它会有所帮助......
答案 1 :(得分:0)
我正在使用视图状态来跟踪所有页面上的所有已检查项目,并在返回页面时重新检查它们。
我必须将viewstate值添加到页面总数中,然后以某种方式减去重叠总数。由于我的jquery不包含id,这将是棘手的。
protected ArrayList savedIds;
if (ViewState["SavedIds"] == null) savedIds = new ArrayList();
else savedIds = (ArrayList)ViewState["SavedIds"];
List<int> activateList = new List<int>();
foreach (GridViewRow tt in GridView2.Rows)
{
CheckBox cb = (CheckBox)tt.FindControl("ActivateItem");
HiddenField id = (HiddenField)tt.FindControl("IdField");
if (cb.Checked)
{
int tempId = 0;
string tempId2 = id.Value.ToString();
int.TryParse(tempId2, out tempId);
activateList.Add(tempId);
}
}
foreach (int activateId in activateList)
{
if (!savedIds.Contains(activateId.ToString())) savedIds.Add(activateId.ToString());
}
ViewState["SavedIds"] = savedIds;
答案 2 :(得分:0)
您缺少的是删除ID。检查行和tempid时,请确保它不在saveids中。
答案 3 :(得分:0)
你知道Google是你的朋友吗?
Selecting CheckBoxes Inside GridView Using JQuery
没有JQuery但是为了更完美的行为(如下图所示),try this link
alt text http://www.gridviewguy.com/ArticleImages/GridViewCheckBoxTwistAni.gif
答案 4 :(得分:0)
在页面上保留一个隐藏的文本字段,每次勾选一个框时,调用一个javascript方法,将复选框的“id”写入隐藏字段。每次回发页面时,将隐藏字段的值序列化为所需对象结构中的会话(对象,哈希表,数组等)。
在呈现页面时,每个复选框都可以检查会话对象结构(您之前创建的),并确定是否最后一次检查了复选框的状态。
如果选中该复选框,您可以使用JQuery遍历页面上的所有复选框并递增计数器。