如何在gridview中得到checkbox选中的行?
Nihn 2008-07-14 09:40:13 大家好!
我在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>