如何在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>
...全文
824 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yigeming 2008-07-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fellowcheng 的回复:]
JScript code
///删除事件
function delFun()
{
var ckbList = [];
var grid = document.getElementById("GridView1");
if(grid == null)
{
alert("还没有任何记录");
return;
}
if(confirm('是否要删除所选择的信息?'))
{
var isCheck = false;

var checkBoxs = grid.getElementsByTagNa…
[/Quote]
zld_baggio 2008-07-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhouyongli41 的回复:]
gvr.rows[i].FindControl("selectItem")//具体到行gvr.rows[i]
[/Quote]
luckyboy101 2008-07-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhouyongli41 的回复:]
gvr.rows[i].FindControl("selectItem")//具体到行gvr.rows[i]
[/Quote]
icelau 2008-07-14
  • 打赏
  • 举报
回复
用request.form获取值,然后在split分割下放到数组里
fellowcheng 2008-07-14
  • 打赏
  • 举报
回复

///删除事件
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;
}
}
}
criedshy 2008-07-14
  • 打赏
  • 举报
回复
System.Web.UI.HtmlControls.HtmlInputCheckBoxck = gvr.FindControl("selectItem") as System.Web.UI.HtmlControls.HtmlInputCheckBox

PS:你写的JS有问题的
var header=document.getElementById("selectAll");
是得不到全选的复选框的
应该是这个document.getElementById("GridView1_ctl01_selectAll");
Nihn 2008-07-14
  • 打赏
  • 举报
回复
selectItem是一个html控件,我把它置为作为服务器端控件。但是FindControl("selectItem")这个方法是有问题的。
运行时报错“无法将类型为“System.Web.UI.HtmlControls.HtmlInputCheckBox”的对象强制转换为类型“System.Web.UI.WebControls.CheckBox”。”
guyan033 2008-07-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 suyiming 的回复:]
C# code string newsid = "";
foreach (GridViewRow gvr in GridView1.Rows)
{
CheckBox ch = (CheckBox)gvr.FindControl("ItemCheckBox");
if (ch.Checked)
{
newsid += GridView1.DataKeys[gvr.DataItemIndex].Value.ToString() + ",";
}
}
[/Quote]
suyiming 2008-07-14
  • 打赏
  • 举报
回复
newsid 绑定的主键id
suyiming 2008-07-14
  • 打赏
  • 举报
回复
            string newsid = "";
foreach (GridViewRow gvr in GridView1.Rows)
{
CheckBox ch = (CheckBox)gvr.FindControl("ItemCheckBox");
if (ch.Checked)
{
newsid += GridView1.DataKeys[gvr.DataItemIndex].Value.ToString() + ",";
}
}
zhouyongli41 2008-07-14
  • 打赏
  • 举报
回复
gvr.rows[i].FindControl("selectItem")//具体到行gvr.rows[i]

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧