gridview里checkbox选择的问题

罗夏2021 2012-03-22 08:59:41
我的gridvew里放了一列checkbox按钮,在删除时我先判断选中的行数,然后弹出一个确认窗口,但是第一次点击时没有出,第二次时才弹出窗口。之后每次一次弹出窗口选择的数即下文中的目count都是上一次选择的,不知道各位有没有遇到过这个问题。怎么解决?


protected void btDelete_Click(object sender, EventArgs e)
{
int count = 0;
for (int i = 0; i < GridView1.Rows.Count; i++)
{
CheckBox Cb = (CheckBox)GridView1.Rows[i].FindControl("Checkbox");
if (Cb.Checked)
{
count++;
}
}
if (0 == count)
{
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "", "<script>alert('请选择删除项')</script>");
}
else
{
this.btDelete.Attributes.Add("onclick","return confirm('确定删除这" +count.ToString()+ "项么?');");
for (int j = 0; j < GridView1.Rows.Count; j++)
{
CheckBox Cb = (CheckBox)GridView1.Rows[j].FindControl("Checkbox");
if (Cb.Checked)
{
int id = Convert.ToInt32(GridView1.DataKeys[j]["id"].ToString());


int flag = Productbll.proDel(id);

}
}
if (this.ddlProductLine.SelectedValue == "please choose")
{
MorenBind();
}
else
{
Bind();
}

}
}
...全文
127 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
porschev 2012-03-24
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wbaoning 的回复:]

引用 8 楼 tanghuawei 的回复:
CS代码

C# code

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Button1.Attributes.Add("onclick", "javascript:Confirm();");
}
……
还可以通过<%=Gr……
[/Quote]

用Jquery获取更简单也更利于把JS放在单独的文件中

$("[id$=控件的ID]")
高彬 2012-03-24
  • 打赏
  • 举报
回复
哈哈,没看到你页面里是什么样的,但是我建议你用ajax做,简单而且效果也好。
去学一下jquery,你会有新的思路和新的认识。
http://jquery.com/
罗夏2021 2012-03-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 tanghuawei 的回复:]
CS代码

C# code

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Button1.Attributes.Add("onclick", "javascript:Confirm();");
}
……
[/Quote]还可以通过<%=GridView1.ClientID %>在前台页面取服务器控件的id?我以为不能取的,学习了
孟子E章 2012-03-22
  • 打赏
  • 举报
回复
客户端可以

var count=0;
var GridView2 = document.getElementById("<%=GridView2.ClientID %>");
for(i = 1;i < GridView2.rows.length; i++) {
if(GridView2.rows[i].cells[0].getElementsByTagName("INPUT")[0].checked)
count++;
}
if(count ==0)
alert("没选")
罗夏2021 2012-03-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 tanghuawei 的回复:]
你把获取选择行数的代码搬到前台去吧,因为前台代码先于CS代码执行,
所以你第二次看到的数其实是上一次变化的值
[/Quote]
怎么搬到前台呀?我是新手,求指教
罗夏2021 2012-03-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 qujianye 的回复:]
this.btDelete.Attributes.Add("onclick","return confirm('确定删除这" +count.ToString()+ "项么?');");
将这句代码放到数据绑定RowDataBound事件里面,因为你点击删除按钮触发事件后才会执行此方法,第一次是把方法注册上,然后才可以使用,所以会少一条数据
[/Quote]
怎么搬到前台呀?我是新手,求指教
罗夏2021 2012-03-22
  • 打赏
  • 举报
回复
[Quote=引用楼主 wbaoning 的回复:]
我的gridvew里放了一列checkbox按钮,在删除时我先判断选中的行数,然后弹出一个确认窗口,但是第一次点击时没有出,第二次时才弹出窗口。之后每次一次弹出窗口选择的数即下文中的目count都是上一次选择的,不知道各位有没有遇到过这个问题。怎么解决?


protected void btDelete_Click(object sender, EventArgs e)
{
i……
[/Quote]
怎么搬到前台呀?我是新手,求指教
qujianye 2012-03-22
  • 打赏
  • 举报
回复
this.btDelete.Attributes.Add("onclick","return confirm('确定删除这" +count.ToString()+ "项么?');");
将这句代码放到数据绑定RowDataBound事件里面,因为你点击删除按钮触发事件后才会执行此方法,第一次是把方法注册上,然后才可以使用,所以会少一条数据
tanghuawei 2012-03-22
  • 打赏
  • 举报
回复
你把获取选择行数的代码搬到前台去吧,因为前台代码先于CS代码执行,
所以你第二次看到的数其实是上一次变化的值
tanghuawei 2012-03-22
  • 打赏
  • 举报
回复
界面上的GridView1你自己添加上去,还有GridView1的第一列为选择列
tanghuawei 2012-03-22
  • 打赏
  • 举报
回复
CS代码

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Button1.Attributes.Add("onclick", "javascript:Confirm();");
}
}


protected void btDelete_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(HiddenField1.Value) && int.Parse(HiddenField1.Value) > 0)
{
for (int j = 0; j < GridView1.Rows.Count; j++)
{
CheckBox Cb = (CheckBox)GridView1.Rows[j].FindControl("Checkbox");
if (Cb.Checked)
{
int id = Convert.ToInt32(GridView1.DataKeys[j]["id"].ToString());


int flag = Productbll.proDel(id);

}
}

if (this.ddlProductLine.SelectedValue == "please choose")
{
MorenBind();
}
else
{
Bind();
}
}
}

ASPX前台代码

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!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 language="javascript" type="text/javascript">
function Confirm()
{
var count=0;
var GridView = document.getElementById("<%=GridView1.ClientID %>");
for( i=1; i<GridView.rows.length; i++)
{
if(GridView.rows(i).cells(0).children(0).checked)
{
count++;
}
}

document.getElementById("<%=HiddenField1.ClientID %>").value = 0;
if(count > 0)
{
if(confirm("确定删除这" + count + "项么?"))
{
document.getElementById("<%=HiddenField1.ClientID %>").value = count;
}
}
else
{
alert("请选择删除项");
}
}

</script>
</head>
<body>
<form id="form1" runat="server">
<div>

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
<asp:HiddenField ID="HiddenField1" runat="server" />
</div>
</form>

</body>
</html>


你自己参照试下吧
罗夏2021 2012-03-22
  • 打赏
  • 举报
回复

110,532

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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