图片如下:CheckBox 控件是在GridView的模版列里面。图片如下:
图片说明:当(一)后面的CheckBox 打钩时 其下面所有的 到(二)之前全部勾选,当(一)钩被取消时 其下面的也全部被取消;当(一)下面的CheckBox 有一个被勾选的,那么(一)必被勾选。 当1后面的CheckBox 被勾选时 其下面的1.1,1.2等等被勾选,当其中的1.1或1.2被勾选时 1必被勾选。其余的都是一样 不值得我 阐述的清晰不清晰。
还有 就是 编号 列的内容在数据库中并没有这个字段,是用后台代码控制生成。模版中的CheckBox 的并没有value或text,所以 判断怎么样选择 我想只能根据页面中的 编号列的编号 来控制;请各位高手指点下 ,说详细点 我是菜鸟 ,一般我认为实现这样的效果只能靠javascript脚本语言来实现 ,但是很多人说用后台代码页可以实现,但是说的比较笼统,只是说能实现 具体的思路什么也没有 我是菜鸟 还请各位高手详细解说一下 最好能给个例子,在此 感激不尽 。
以下是前台的页面代码 请做参考!
页面代码如下html的
<asp:GridView ID="MyGridView1"
AutoGenerateColumns="False" runat="server" bordercolordark='#ffffff' bordercolorlight='#999999'
Style="border-collapse: inherit;" HorizontalAlign="Center" PagerStyle-HorizontalAlign="Right"
CssClass='table' CellPadding="2" EnableTheming="False"
EnableViewState="False" LoadDict="False" UseAccessibleHeader="False"
AddUrl="" onrowdatabound="MyGridView1_RowDataBound" >
<SelectedRowStyle BackColor="#00C0C0" />
<PagerStyle HorizontalAlign="Right" CssClass="footer" />
<HeaderStyle BackColor="#006699" HorizontalAlign="Center" Font-Bold="True" ForeColor="White" Height="20px" BorderStyle="Solid" CssClass="Freezing" /> <AlternatingRowStyle BackColor="White" />
<PagerSettings Visible="False" />
<Columns>
<asp:BoundField DataField="ProgAim" HeaderText="审计目标" ReadOnly="True"
SortExpression="ProgAim" >
<ControlStyle Width="60px" />
<FooterStyle Width="60px" />
<HeaderStyle Width="60px" />
<ItemStyle Width="60px" />
</asp:BoundField>
<asp:BoundField HeaderText="编 号">
<ControlStyle Width="50px" />
<FooterStyle Width="50px" />
<HeaderStyle Width="50px" />
<ItemStyle Width="50px" />
</asp:BoundField>
<asp:BoundField DataField="ProgContent" HeaderText="可供选择的审计程序"
SortExpression="ProgContent" />
<asp:TemplateField >
<HeaderTemplate>
<input id="Checkbox2" type="checkbox" onclick="CheckAll(this)" runat="server" /><label>全选</label>
</HeaderTemplate>
<ItemTemplate>
<input id="Checkbox1" type="checkbox" runat="server" onclick="checkChilds(this)" />
</ItemTemplate>
<ControlStyle Width="40px" />
<FooterStyle Width="40px" />
<HeaderStyle Width="40px" />
<ItemStyle Width="40px" />
</asp:TemplateField>
</Columns>
</asp:GridView>
图片说明:当(一)后面的CheckBox 打钩时 其下面所有的 到(二)之前全部勾选,当(一)钩被取消时 其下面的也全部被取消;当(一)下面的CheckBox 有一个被勾选的,那么(一)必被勾选。 当1后面的CheckBox 被勾选时 其下面的1.1,1.2等等被勾选,当其中的1.1或1.2被勾选时 1必被勾选。其余的都是一样 不值得我 阐述的清晰不清晰。
还有 就是 编号 列的内容在数据库中并没有这个字段,是用后台代码控制生成。模版中的CheckBox 的并没有value或text,所以 判断怎么样选择 我想只能根据页面中的 编号列的编号 来控制;请各位高手指点下 ,说详细点 我是菜鸟 ,一般我认为实现这样的效果只能靠javascript脚本语言来实现 ,但是很多人说用后台代码页可以实现,但是说的比较笼统,只是说能实现 具体的思路什么也没有 我是菜鸟 还请各位高手详细解说一下 最好能给个例子,在此 感激不尽 。
以下是前台的页面代码 请做参考!
页面代码如下html的
<asp:GridView ID="MyGridView1"
AutoGenerateColumns="False" runat="server" bordercolordark='#ffffff' bordercolorlight='#999999'
Style="border-collapse: inherit;" HorizontalAlign="Center" PagerStyle-HorizontalAlign="Right"
CssClass='table' CellPadding="2" EnableTheming="False"
EnableViewState="False" LoadDict="False" UseAccessibleHeader="False"
AddUrl="" onrowdatabound="MyGridView1_RowDataBound" >
<SelectedRowStyle BackColor="#00C0C0" />
<PagerStyle HorizontalAlign="Right" CssClass="footer" />
<HeaderStyle BackColor="#006699" HorizontalAlign="Center" Font-Bold="True" ForeColor="White" Height="20px" BorderStyle="Solid" CssClass="Freezing" /> <AlternatingRowStyle BackColor="White" />
<PagerSettings Visible="False" />
<Columns>
<asp:BoundField DataField="ProgAim" HeaderText="审计目标" ReadOnly="True"
SortExpression="ProgAim" >
<ControlStyle Width="60px" />
<FooterStyle Width="60px" />
<HeaderStyle Width="60px" />
<ItemStyle Width="60px" />
</asp:BoundField>
<asp:BoundField HeaderText="编 号">
<ControlStyle Width="50px" />
<FooterStyle Width="50px" />
<HeaderStyle Width="50px" />
<ItemStyle Width="50px" />
</asp:BoundField>
<asp:BoundField DataField="ProgContent" HeaderText="可供选择的审计程序"
SortExpression="ProgContent" />
<asp:TemplateField >
<HeaderTemplate>
<input id="Checkbox2" type="checkbox" onclick="CheckAll(this)" runat="server" /><label>全选</label>
</HeaderTemplate>
<ItemTemplate>
<input id="Checkbox1" type="checkbox" runat="server" onclick="checkChilds(this)" />
</ItemTemplate>
<ControlStyle Width="40px" />
<FooterStyle Width="40px" />
<HeaderStyle Width="40px" />
<ItemStyle Width="40px" />
</asp:TemplateField>
</Columns>
</asp:GridView>
解决方案 »
- 【相信CSDN的高手!!】怎么给inpu类型的TEXT传值?通过DropDownList1在页面加载的时候传值给input的TEXT?【小弟我不胜感激】
- 应用程序默认配置项
- XML解析错误:未找到元素
- ASP.NET MediaPlay在线播放出现问题
- 在datagrid的模板列里如何插入textbox和dropdownlist ,如何取他们的值?
- 为什么网站在我机器上访问速度正常,而换到另一台服务器却很慢
- 索引超出范围。必须为非负值并小于集合大小。
- 一个 Regex 中的问题,在线等~~~
- 问一个比较简单的问题!!
- 在线等,泛解析成功,url重写二级域名不成功,大伙帮忙看看那里写的不对。
- RadGrid RaisePostBackEvent 刷新页面问题
- 类似saveFileDialog的.net控件
HTML的check控件有VALUE值,可以考虑用HTML控件
给每个CHECK控件附加上JS事件
function CheckAll(strid,obj)
{
for(var i=0;i<document.all.length;i++)
{
if(document.all(i).type == 'checkbox' && document.all(i).parentElement.id == strid) document.all(i).checked = obj.checked;
}
}
obj是全选按钮,strid是checkbox控件的父容器ID,方法大概是这样,你可以改的更有效率一些,这是4年前写的,新写的在公司,家里我懒得去更改
<ItemTemplate>
<asp:CheckBox id="CheckBox1" runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
function SelectAll(frm)
{
for (var i=0;i<frm.elements.length;i++)
frm.elements[i].checked = frm.selectall.checked;
}
function CheckSelect(frm)
{
var col=frm.elements;
var obj=frm.selectall;
var intEls=0,intChks=0;
for(var i=0;i<col.length;i++)
{
if(col[i].type=="checkbox"&&col[i].name!="selectall")
{
intEls++;
if(col[i].checked)
intChks++;
}
}
obj.checked=(intEls==intChks);
}
{
for (int i = 0; i < DataList1.Items.Count; i++)
{
CheckBox cb = (CheckBox)DataList1.Items[i].FindControl("cb");
cb.Checked = true;
}
}
else
{
for (int i = 0; i < DataList1.Items.Count; i++)
{
CheckBox cb = (CheckBox)DataList1.Items[i].FindControl("cb");
cb.Checked = false;
}
}另外附上获得所选CheckBox对应的ID代码
for (int i = 0; i < DataList1.Items.Count; i++)
{
CheckBox cb = (CheckBox)DataList1.Items[i].FindControl("cb");
HiddenField hf = (HiddenField)DataList1.Items[i].FindControl("HiddenField1");
if(cb.check)
{
//...
}
}
用了一个影藏域,绑定数据库里面的ID,希望对你有帮助.
<script type="text/javascript" language="javascript" >
function checkAll(check)
{
var che=document.getElementsByTagName("input");
for(i=0;i<che.length;i++)
{
if(che[i].type=="checkbox")
{
che[i].checked=check.checked;
}
}
}
</script>
<script language=javascript>
function Sel()
{
oEl = event.srcElement;for(i = 0;i < document.all.length; i++)
{
// datagrid将生成层次名+id作为客户端id
if(document.all(i).id.indexOf("你的CheckBox的ID") != -1)
{
if(oEl.checked)
document.all(i).checked = true;
else
document.all(i).checked = false;
}
}
}
</script>
GridView中的代码:<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowDataBound="GridView1_RowDataBound">
<Columns>
<asp:BoundField DataField="pid" HeaderText="Id" />
<!--关键是这段代码-->
<asp:TemplateField>
<HeaderTemplate>
<input id="chkAll" onclick="Sel()" type="checkbox" /> </HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="cbselect" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<!--关键是这段代码-->
<asp:TemplateField HeaderText="商品名称">
<ItemTemplate>
<a href='DetailProduceInfo.aspx?pid=<%#Eval("pid") %>' target="_blank"><%#Eval("pname") %></a>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="单价">
<ItemTemplate>
<%#Eval("pmoney") %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="数量">
<ItemTemplate>
<asp:TextBox ID="txtquantity" runat="server" Width="80px">0</asp:TextBox>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="txtquantity"
ErrorMessage="请你输入数字!" ValidationExpression="^[0-9]{1,}$"></asp:RegularExpressionValidator>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
哈哈 以上几种方案我都试了 全选还可以 但是我要 控制 选中 父节点 子节点就全部被选中 只要有一个子节点被选中 父节点就被选中而且 checkbox是GridView里面的空间 没有value数值 ;还请高手指点下啊 !