`
isiqi
  • 浏览: 16694491 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

GridView控件每行复选框的全选与取消全选

阅读更多
平时使用GridView的时候经常要给每行加一个复选框,然后还需要放置一个单独的全选复选框,通过单击它来让这些复选框全选或取消全选,每次实现这样的功能都要写一段javascript,麻烦,所以扩展它。


控件开发
1、新建一个继承自GridView的类。
/**////<summary>
///继承自GridView
///</summary>

[ToolboxData(@"<{0}:SmartGridViewrunat='server'></{0}:SmartGridView>")]
publicclassSmartGridView:GridView
{
}

2、新建一个JavaScriptConstant类,把我们要用到的javascript存在一个常量里
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;

namespaceYYControls.SmartGridView
{
/**////<summary>
///javascript
///</summary>

publicclassJavaScriptConstant
{
internalconststringjsCheckAll=@"<scripttype=""text/javascript"">
//<![CDATA[

//隐藏字段的ID,用于存每组的全选复选框ID
varhdnAllName='[$AllName$]';
//隐藏字段的ID,用于存每的项复选框ID
varhdnItemName='[$ItemName$]';
//组分隔符,一个全选复选框和其对应的n个项复选框为一个组
vargroupSeparator='[$GroupSeparator$]';
//项分隔符,项复选框每个项之间的分隔符
varitemSeparator='[$ItemSeparator$]';

varstrAlls=GetObject(hdnAllName).value;
varstrItems=GetObject(hdnItemName).value;

//全选复选框数组
vararyAlls=strAlls.split(groupSeparator);
//项复选框数组,每行有一个组的所有项复选框
vararyItems=strItems.split(groupSeparator);

//全选复选框被单击,参数为该全选复选框这个对象
functionClickCheckAll(objAll)
{
//每个全选复选框
for(vari=0;i<aryAlls.length;i++)
{
//该全选复选框是所单击的全选复选框
if(aryAlls[i]==objAll.id)
{
//该全选复选框同组下的项复选框数组
aryItem=aryItems[i].split(itemSeparator);
for(varj=0;j<aryItem.length;j++)
{
//单击的全选复选框是选中状态,并且项复选框不是disabled,则选中
if(objAll.checked&&!GetObject(aryItem[j]).parentElement.disabled)
{
GetObject(aryItem[j]).checked=true;
}
//否则
else
{
GetObject(aryItem[j]).checked=false;
}
}

break;
}
}
}

//项复选框被单击
functionClickCheckItem()
{
//每组项复选框
for(vari=0;i<aryItems.length;i++)
{
//该组的所有项复选框数组
aryItem=aryItems[i].split(itemSeparator);
//标记,是否同组的项复选框都被选中
varbln=true;
for(varj=0;j<aryItem.length;j++)
{
//如果该项复选框没被选中,并且不是disabled,则bln设为false
if(!GetObject(aryItem[j]).checked&&!GetObject(aryItem[j]).parentElement.disabled)
{
bln=false;
break;
}
}

//bln为true,则设置同组的全选复选框为选中
if(bln)
{
GetObject(aryAlls[i]).checked=true;
}
//否则
else
{
GetObject(aryAlls[i]).checked=false;
}
}
}

functionGetObject(param)
{
returndocument.getElementById(param);
}

//]]>
</script>
";
}

}


3、新建一个CheckboxAll类,有两个属性
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;

usingSystem.ComponentModel;
usingSystem.Web.UI;

namespaceYYControls.SmartGridView
{
/**////<summary>
///CheckboxAll的摘要说明。
///</summary>

[ToolboxItem(false)]
publicclassCheckboxAll
{
privatestring_checkboxAllID;
/**////<summary>
///模板列全选复选框ID
///</summary>

publicstringCheckboxAllID
{
get{return_checkboxAllID;}
set{_checkboxAllID=value;}
}


privatestring_checkboxItemID;
/**////<summary>
///模板列项复选框ID
///</summary>

publicstringCheckboxItemID
{
get{return_checkboxItemID;}
set{_checkboxItemID=value;}
}


/**////<summary>
///ToString()
///</summary>
///<returns></returns>

publicoverridestringToString()
{
return"CheckboxAll";
}

}

}


4、新建一个继承自CollectionBase的类CheckboxAlls
usingSystem.Collections;
usingSystem.ComponentModel;
usingSystem.Web.UI;

namespaceYYControls.SmartGridView
{
/**////<summary>
///CheckboxAlls的摘要说明。
///注意要继承自CollectionBase
///</summary>

[
ToolboxItem(
false),
ParseChildren(
true)
]
publicclassCheckboxAlls:CollectionBase
{
/**////<summary>
///构造函数
///</summary>

publicCheckboxAlls()
:
base()
{
}


/**////<summary>
///实现IList接口
///获取或设置指定索引处的元素。
///</summary>
///<paramname="index">要获得或设置的元素从零开始的索引</param>
///<returns></returns>

publicCheckboxAllthis[intindex]
{
get
{
return(CheckboxAll)base.List[index];
}

set
{
base.List[index]=(CheckboxAll)value;
}

}


/**////<summary>
///实现IList接口
///将某项添加到System.Collections.IList中。
///</summary>
///<paramname="item">要添加到System.Collections.IList的System.Object。</param>

publicvoidAdd(CheckboxAllitem)
{
base.List.Add(item);
}


/**////<summary>
///实现IList接口
///从System.Collections.IList中移除特定对象的第一个匹配项。
///</summary>
///<paramname="index">要从System.Collections.IList移除的System.Object</param>

publicvoidRemove(intindex)
{
if(index>-1&&index<base.Count)
{
base.List.RemoveAt(index);
}

}

}

}


5、在继承自GridView的类中加一个复杂对象属性,该复杂对象就是第4步创建的那个CheckboxAlls
privateCheckboxAlls_checkboxAlls;
/**////<summary>
///复选框组集合一个组由一个全选复选框和多个项复选框组成
///</summary>

[
PersistenceMode(PersistenceMode.InnerProperty),
DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
Description(
"复选框组集合一个组由一个全选复选框和多个项复选框组成"),
Category(
"扩展")
]
publicvirtualCheckboxAllsCheckboxAlls
{
get
{
if(_checkboxAlls==null)
color: #
分享到:
评论

相关推荐

    GridView 单选和全选功能以及全选操作和取消全选

    在很多场景下,我们可能需要为GridView添加单选、多选以及全选和取消全选的功能,比如在图片选择器或者列表设置中。下面我们将详细探讨如何实现这些功能。 1. **GridView的基本使用** GridView继承自AbsListView,...

    C#_winform_GridView_CheckBox_多选_全选

    总之,"C#_winform_GridView_CheckBox_多选_全选"这个主题涵盖了在C# WinForm应用程序中使用GridView控件实现带有复选框的多选和全选功能。这包括自定义列类型、设置多选模式、添加全选复选框、处理选中状态的保存和...

    gridview编辑删除,checkbox单选全选

    在本主题中,“gridview编辑删除,checkbox单选全选”指的是如何在GridView控件中实现行数据的编辑、删除功能,以及在每一行中添加复选框(Checkbox)进行单选或全选操作。以下将详细讲解这些知识点。 1. GridView...

    gridview添加复选框批量操作代码

    GridView的每一行通常包含多个字段,为了实现批量操作,我们可以在每行数据前添加一个复选框。这可以通过在GridView的模板字段(TemplateField)中定义一个ItemTemplate来实现。在ASP.NET的ASPX代码中,可以看到...

    C# Winform DatagridView 分页及 全选/ 取消全选 功能

    1. 添加一个复选框控件,作为全选/取消全选的开关。 2. 绑定复选框的`CheckedChanged`事件。 3. 在事件处理程序中,如果复选框被选中,调用`dataGridView.SelectAll()`;反之,调用`dataGridView.ClearSelection()`...

    gridview 全选和取消

    这里使用了一个名为`toggleCheckboxes`的函数,它遍历所有行并设置对应的复选框状态。 ```html function toggleCheckboxes(masterCheckbox) { var gridView = document.getElementById('&lt;%= GridView1.ClientID ...

    GridView使用div分页,checkbox全选

    在ASP.NET开发中,GridView控件是常用的数据显示控件,它可以方便地展示表格形式的数据。在处理大量数据时,为了提高用户体验和降低服务器压力,我们可以采用客户端分页,即使用div来实现。本文将深入探讨如何使用...

    GridView全选与批量删除

    另外,我们还需要在GridView的每一行数据中添加一个复选框,以便用户选择要删除的行。 4. Linq技术:Linq(Language Integrated Query,语言集成查询)是.NET Framework中的一项创新技术,允许开发者以更自然、更...

    JavaScript实现GridView中单选框,复选框的嵌套

    在 GridView 中添加模板列,其中包含一个用于全选/全不选功能的复选框以及每行中的复选框: ```html 全选" onclick="cbSelectAll('dvList', 2)" /&gt; 选中" /&gt; ``` **步骤二:编写全选/全不选的 ...

    gridview全选(js实现)

    实现全选功能的第一步是在GridView的表头添加一个主复选框,当用户点击这个复选框时,所有行的复选框会被选中或取消选中。HTML代码示例如下: ```html &lt;table id="gridView"&gt; &lt;th&gt;&lt;input type="checkbox" id=...

    jquery实现带复选框的gridview

    反之,如果全选复选框被取消选中,所有行的复选框也将被取消选中。这可以通过遍历所有的行复选框并改变它们的选中状态来实现。 此外,可能还需要处理多选复选框间的互斥关系,比如在一组复选框中只能选择一个。这时...

    gridview控件的使用(九宫式的的排列)

    4、每行复选框的全选与取消全选 在模板列的头模板处添加一个复选框,在模板列的项模板处添加一个复选框,然后设置控件的CheckboxAlls属性 CheckboxAllID - 模板列全选复选框ID CheckboxItemID - 模板列项复选框ID...

    C# grid checkbox 全选

    在描述中提到的“C# grid checkbox 全选”是指在C#中使用数据网格(通常为DataGridView或DevExpress的GridView)控件时,实现表头复选框全选功能的技术。这个功能常见于数据管理界面,允许用户一键选择或取消选择...

    GridView全选/反选示例 用checkbox

    首先,`Default.aspx`是用户界面的主要部分,它包含了GridView控件和一个用于全选/反选的复选框。在GridView中,我们通常会设置`AutoGenerateSelectButton`属性为`true`,这样每行都会有一个选择按钮。但是,为了...

    GridView 内加全选按钮 客户端控制

    同时,为了确保全选按钮的状态与所有行的选中状态同步,可以在GridView的`RowDataBound`事件中添加代码,检查当前行的复选框是否被选中,然后更新全选按钮的状态。 ```csharp protected void gvData_RowDataBound...

    ASP.NET GridView中两种全选方法.txt

    2. **编写事件处理程序**:当全选复选框的状态发生改变时,触发服务器端事件,通过遍历`GridView`的所有行来更新每个行内的复选框状态。 ```csharp protected void checkedAll_CheckedChanged(object sender, ...

    asp.net GridView控件中实现全选的解决方案

    3. 对于每一行,使用 Cells[0].FindControl 方法寻找行内的复选框控件,并根据全选复选框的状态来设置行内复选框的选中状态。 4. 通过服务器端的逻辑确保用户对全选复选框的操作能够影响到 GridView 中所有行的复选...

    GridView客户端与服务器端全选方法合集

    这段代码监听全选复选框的`.CheckedChanged`事件,当全选状态改变时,遍历GridView的每一行,找到对应行的复选框并设置其状态。 ### 两种方法的选择 客户端全选速度快,对服务器压力小,但无法处理复杂的业务逻辑...

    GridView全选实现代码

    3. **处理复选框**:在每行中,根据表头复选框所在的列索引(`obj.parentElement.cellIndex`),找到该列中的复选框元素,并将其状态设置为与`obj`相同。这里用到了`objCheckBox.checked = obj.checked`语句。 4. *...

Global site tag (gtag.js) - Google Analytics