大家好!
我在gridview中,嵌入了html的input(checkbox),代码在最下面。现在碰到一个问题,我想读出哪些行被选中,但是在后台无法获取前台的checkbox,我把checkbox置为服务器端控件,用CheckBox ck = gvr.FindControl("selectItem") as CheckBox;语句提取复选框,但是报错“未将对象引用设置到对象的实例。”
请大家帮帮忙,谢谢!
代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title> <script type="text/javascript">
function selAll(obj)
{
var state;
if(obj.checked==true)
{
state = true;
}
else
{
state = false;
} var inputs=document.getElementById("GridView1").getElementsByTagName("input");
for(var i=1;i<inputs.length;i++)
{
if(inputs[i].type="checkbox")
{
inputs[i].checked=state;
}
}
}
function selectHeader()
{
var state=true;
var inputs=document.getElementById("GridView1").getElementsByTagName("input");
var header=document.getElementById("selectAll");
for(var i=0;i<inputs.length;i++)
{
if(inputs[i].type=="checkbox" && inputs[i].id!="selectAll" && !inputs[i].checked)
{
state=false;
break;
}
}
header.checked=state;
} </script></head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="帐号"
DataSourceID="SqlDataSource1" EmptyDataText="没有可显示的数据记录。">
<Columns>
<asp:BoundField DataField="帐号" HeaderText="帐号" ReadOnly="True" SortExpression="帐号" />
<asp:BoundField DataField="余额" HeaderText="余额" SortExpression="余额" />
<asp:TemplateField>
<HeaderTemplate>
<input id="selectAll" type="checkbox" onclick="selAll(this)" />
</HeaderTemplate>
<ItemTemplate>
<input id="selectItem" runat="server" type="checkbox" onclick="selectHeader()" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:测试数据库ConnectionString1 %>"
DeleteCommand="DELETE FROM [帐户] WHERE [帐号] = @帐号" InsertCommand="INSERT INTO [帐户] ([帐号], [余额]) VALUES (@帐号, @余额)"
ProviderName="<%$ ConnectionStrings:测试数据库ConnectionString1.ProviderName %>" SelectCommand="SELECT [帐号], [余额] FROM [帐户]"
UpdateCommand="UPDATE [帐户] SET [余额] = @余额 WHERE [帐号] = @帐号">
<DeleteParameters>
<asp:Parameter Name="帐号" Type="String" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="帐号" Type="String" />
<asp:Parameter Name="余额" Type="Int32" />
</InsertParameters>
<UpdateParameters>
<asp:Parameter Name="余额" Type="Int32" />
<asp:Parameter Name="帐号" Type="String" />
</UpdateParameters>
</asp:SqlDataSource>
<br />
<asp:Button ID="Button3" runat="server" OnClick="Button3_Click" Text="OK" />
<br />
<asp:Label ID="Label4" runat="server"></asp:Label></div>
</form>
</body>
</html>
我在gridview中,嵌入了html的input(checkbox),代码在最下面。现在碰到一个问题,我想读出哪些行被选中,但是在后台无法获取前台的checkbox,我把checkbox置为服务器端控件,用CheckBox ck = gvr.FindControl("selectItem") as CheckBox;语句提取复选框,但是报错“未将对象引用设置到对象的实例。”
请大家帮帮忙,谢谢!
代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title> <script type="text/javascript">
function selAll(obj)
{
var state;
if(obj.checked==true)
{
state = true;
}
else
{
state = false;
} var inputs=document.getElementById("GridView1").getElementsByTagName("input");
for(var i=1;i<inputs.length;i++)
{
if(inputs[i].type="checkbox")
{
inputs[i].checked=state;
}
}
}
function selectHeader()
{
var state=true;
var inputs=document.getElementById("GridView1").getElementsByTagName("input");
var header=document.getElementById("selectAll");
for(var i=0;i<inputs.length;i++)
{
if(inputs[i].type=="checkbox" && inputs[i].id!="selectAll" && !inputs[i].checked)
{
state=false;
break;
}
}
header.checked=state;
} </script></head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="帐号"
DataSourceID="SqlDataSource1" EmptyDataText="没有可显示的数据记录。">
<Columns>
<asp:BoundField DataField="帐号" HeaderText="帐号" ReadOnly="True" SortExpression="帐号" />
<asp:BoundField DataField="余额" HeaderText="余额" SortExpression="余额" />
<asp:TemplateField>
<HeaderTemplate>
<input id="selectAll" type="checkbox" onclick="selAll(this)" />
</HeaderTemplate>
<ItemTemplate>
<input id="selectItem" runat="server" type="checkbox" onclick="selectHeader()" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:测试数据库ConnectionString1 %>"
DeleteCommand="DELETE FROM [帐户] WHERE [帐号] = @帐号" InsertCommand="INSERT INTO [帐户] ([帐号], [余额]) VALUES (@帐号, @余额)"
ProviderName="<%$ ConnectionStrings:测试数据库ConnectionString1.ProviderName %>" SelectCommand="SELECT [帐号], [余额] FROM [帐户]"
UpdateCommand="UPDATE [帐户] SET [余额] = @余额 WHERE [帐号] = @帐号">
<DeleteParameters>
<asp:Parameter Name="帐号" Type="String" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="帐号" Type="String" />
<asp:Parameter Name="余额" Type="Int32" />
</InsertParameters>
<UpdateParameters>
<asp:Parameter Name="余额" Type="Int32" />
<asp:Parameter Name="帐号" Type="String" />
</UpdateParameters>
</asp:SqlDataSource>
<br />
<asp:Button ID="Button3" runat="server" OnClick="Button3_Click" Text="OK" />
<br />
<asp:Label ID="Label4" runat="server"></asp:Label></div>
</form>
</body>
</html>
解决方案 »
- 如何获取gridview的列号
- 请教一个关于SQL取时间的写法
- 模板列日期格式问题,急!
- 无法将类型为“System.DBNull”的对象强制转换为类型“System.String
- SqlDataSource中selectCommand问题
- 【GridView导出Excel报错!!!!!】 类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内。
- 如何将多个hashtable缓存起来?好像无法缓存到dataset里
- .net1.1填加服务器验证控件后就不能提交(submit)到另外的一个页面了?
- SharePoint Sevice可以提供给什么样的功能?
- 如何把ASP文件重定向到ASPX?如AA.ASP?ID=1重定向到B.ASPX?ID=1
- |zyciis| 求一条URL改写正则表达式 /ProductView/SN2001546.aspx 改写为 /ProductView.aspx?ID=2
- 做个模板页,用标签库去生成前天页面 问题, 等待中。。
foreach (GridViewRow gvr in GridView1.Rows)
{
CheckBox ch = (CheckBox)gvr.FindControl("ItemCheckBox");
if (ch.Checked)
{
newsid += GridView1.DataKeys[gvr.DataItemIndex].Value.ToString() + ",";
}
}
运行时报错“无法将类型为“System.Web.UI.HtmlControls.HtmlInputCheckBox”的对象强制转换为类型“System.Web.UI.WebControls.CheckBox”。”
var header=document.getElementById("selectAll");
是得不到全选的复选框的
应该是这个document.getElementById("GridView1_ctl01_selectAll");
///删除事件
function delFun()
{
var ckbList = [];
var grid = document.getElementById("GridView1");
if(grid == null)
{
alert("还没有任何记录");
return;
}
if(confirm('是否要删除所选择的信息?'))
{
var isCheck = false; var checkBoxs = grid.getElementsByTagName('INPUT');
for(var i=0;i<checkBoxs.length;i++)
{
if(checkBoxs[i].type=='checkbox')
{
if(checkBoxs[i].checked)
{
isCheck = true;
ckbList[ckbList.length] = checkBoxs[i];
break;
}
}
}
if(isCheck)
{
__doPostBack('btnDel','')
}
else
{
alert("请选择要删除的记录!");
return false;
}
}
}