gridview中的checkbox选择

daniel0999 2012-06-12 05:37:07
protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
{
for (int i = 0; i <= dv.Rows.Count - 1; i++)
{
CheckBox chk = (CheckBox)dv.Rows[i].FindControl("ck");
if (CheckBox1.Checked == true)
{
chk.Checked = true;
//TextBox1.Text = "112";
}
else
chk.Checked = false;
}
}
这部分是正确的可以实现gridview外一个checkbox选中使得gridview中的checkbox都选中的效果
我想实现功能是选中gridvie中的某些checkbox,然后把这些选中checkbox的数据传入到某textbox
protected void Button1_Click(object sender, EventArgs e)
{
for (int i = 0; i <= dv.Rows.Count - 1; i++)
{
CheckBox chk = (CheckBox)dv.Rows[i].FindControl("ck");
if (chk.Checked == true)
{

TextBox1.Text = "tyyyyyyy";
}
else
TextBox1.Text = "eeeeeeeeeee";
}

}
这部分每次执行都是else语句执行,有什么错误,求大神!!!!!!!!!
...全文
231 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
huayy 2012-06-13
  • 打赏
  • 举报
回复
狼多肉少啊,就这么个问题,孟子E章都给抢了。
何日才能升星!~
孟子E章 2012-06-13
  • 打赏
  • 举报
回复
不是给早说了吗?放if(!IsPostBack)里面?你怎么不看呢?完整的答案都不看你还在这问什么啊?

protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
string sql;
sql = "select cnumber,cname from cbaseinfo ";
DataTable dt = Class1.GetDsFromSql(sql).Tables[0];
dv.DataSource = dt;
dv.DataBind();
}
}
licai1210 2012-06-12
  • 打赏
  • 举报
回复


protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack){
string sql;
sql = "select cnumber,cname from cbaseinfo ";
DataTable dt = Class1.GetDsFromSql(sql).Tables[0];
dv.DataSource = dt;
dv.DataBind();
}
}

daniel0999 2012-06-12
  • 打赏
  • 举报
回复
在线等啊
daniel0999 2012-06-12
  • 打赏
  • 举报
回复
数据都是读的数据库中

犯人编号 cnumber cname
hi 50004 50004 冯巩
hi 50007 50007 李老七
hi 50005 50005 刘二
hi 50002 50002 刘能
hi 50009 50009 刘七
hi 50000 50000 孙老以
hi 50006 50006 王老三
hi 50001 50001 王老一
hi 50008 50008 徐州

版权所有计算机09-4 李飞
daniel0999 2012-06-12
  • 打赏
  • 举报
回复
大神啊,你帮我我看看怎么改
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Title="无标题页" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

<asp:GridView ID="dv" runat="server" Height="254px" Width="407px">
<Columns>

<asp:TemplateField>

<ItemTemplate>
<asp:CheckBox ID="ck" Text="hi" runat="server" />
</ItemTemplate>
</asp:TemplateField>

<asp:BoundField DataField="cnumber" HeaderText="犯人编号" />

</Columns>
</asp:GridView>
<asp:Button ID="Button1" runat="server" Text="come" onclick="Button1_Click" />
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>


<asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack=true
oncheckedchanged="CheckBox1_CheckedChanged" />






</asp:Content>
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string sql;
sql = "select cnumber,cname from cbaseinfo ";
DataTable dt = Class1.GetDsFromSql(sql).Tables[0];
dv.DataSource = dt;
dv.DataBind();
}
protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
{
for (int i = 0; i <= dv.Rows.Count - 1; i++)
{
CheckBox chk = (CheckBox)dv.Rows[i].FindControl("ck");
if (CheckBox1.Checked == true)
{
chk.Checked = true;
//TextBox1.Text = "112";
}
else
chk.Checked = false;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
for (int i = 0; i <= dv.Rows.Count - 1; i++)
{
CheckBox chk = (CheckBox)dv.Rows[i].FindControl("ck");
if (chk.Checked == true)
{

TextBox1.Text = "tyyyyyyy";
}
else
TextBox1.Text = "eeeeeeeeeee";
}

}
}


[Quote=引用 12 楼 的回复:]
没有错误。你完整拷贝下面的代码去进行测试下
注意红色的地方


<%@ Page Language="C#" EnableViewState="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio……
[/Quote]
mosong306 2012-06-12
  • 打赏
  • 举报
回复
前台 CheckBox 控件 加上属性AutoPostBack="True" 后台绑定数据的时候 记得if(!ispostback)
孟子E章 2012-06-12
  • 打赏
  • 举报
回复
没有错误。你完整拷贝下面的代码去进行测试下
注意红色的地方


<%@ Page Language="C#" EnableViewState="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

protected void Page_Load(object sender, EventArgs e)
{
System.Data.DataTable dt = new System.Data.DataTable();
if (!Page.IsPostBack)
{
System.Data.DataRow dr;
dt.Columns.Add(new System.Data.DataColumn("Id", typeof(System.Int32)));
dt.Columns.Add(new System.Data.DataColumn("Name", typeof(System.String)));
for (int i = 0; i < 6; i++)
{
dr = dt.NewRow();
dr[0] = i*i;
dr[1] = "【孟子E章】" + i.ToString();
dt.Rows.Add(dr);
}
GridView1.DataSource = dt;
GridView1.DataBind();
}
}


protected void Button1_Click(object sender, EventArgs e)
{
TextBox1.Text = "";
bool hasChecked = false;
for (int i = 0; i < this.GridView1.Rows.Count; i++)
{
CheckBox cb = this.GridView1.Rows[i].FindControl("ck") as CheckBox;
if (cb.Checked)
{
hasChecked = true;
TextBox1.Text += this.GridView1.DataKeys[i].Value + ",";
}
}
if (!hasChecked)
{
TextBox1.Text = "没有选中";
}
else
{
//Response.Redirect(Request.UrlReferrer.ToString());
}
}


protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
{
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
CheckBox chk = (CheckBox)GridView1.Rows[i].FindControl("ck");
if (CheckBox1.Checked == true)
{
chk.Checked = true;
}
else
chk.Checked = false;
}
}
</script>
<body>
<form id="form1" runat="server">
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" DataKeyNames="Id">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="ck" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Id">
<ItemTemplate><%#Eval("Id") %>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="True" OnCheckedChanged="CheckBox1_CheckedChanged" />全选
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="查看选中" /><br />
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</form>
</body>
daniel0999 2012-06-12
  • 打赏
  • 举报
回复
我在想他每次都是执行else,也就是条件语句有错误,可是直接<asp:CheckBox ID="ck" Text="hi" Checked=true runat="server" />的话,条件语句又正确执行,是不是选择之后的传值有错误???[Quote=引用 9 楼 的回复:]

怎么绑定?引用 8 楼 的回复:

把你的绑定写到if(!IsPostBack){}里面
[/Quote]
孟子E章 2012-06-12
  • 打赏
  • 举报
回复
例子

<%@ Page Language="C#" EnableViewState="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

protected void Page_Load(object sender, EventArgs e)
{
System.Data.DataTable dt = new System.Data.DataTable();
if (!Page.IsPostBack)
{
System.Data.DataRow dr;
dt.Columns.Add(new System.Data.DataColumn("Id", typeof(System.Int32)));
dt.Columns.Add(new System.Data.DataColumn("Name", typeof(System.String)));
for (int i = 0; i < 6; i++)
{
dr = dt.NewRow();
dr[0] = i;
dr[1] = "【孟子E章】" + i.ToString();
dt.Rows.Add(dr);
}
GridView1.DataSource = dt;
GridView1.DataBind();

}
}


protected void Button1_Click(object sender, EventArgs e)
{

bool hasChecked = false;
for (int i = 0; i < this.GridView1.Rows.Count; i++)
{
CheckBox cb = this.GridView1.Rows[i].FindControl("ck") as CheckBox;
if (cb.Checked)
{
hasChecked = true;
TextBox1.Text += this.GridView1.DataKeys[i].Value + ",";
}
}
if (!hasChecked)
{
Response.Write("没有选中文本");
}
else
{
//Response.Redirect(Request.UrlReferrer.ToString());
}
}

protected void Button2_Click(object sender, EventArgs e)
{

}
</script>
<body>
<form id="form1" runat="server">
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" DataKeyNames="Id">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="ck" Text="hi" Checked="true" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

<asp:Button ID="Button2" runat="server" Text="全选" onclick="Button2_Click" />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
</form>
</body>
daniel0999 2012-06-12
  • 打赏
  • 举报
回复
怎么绑定?[Quote=引用 8 楼 的回复:]

把你的绑定写到if(!IsPostBack){}里面
[/Quote]
孟子E章 2012-06-12
  • 打赏
  • 举报
回复
把你的绑定写到if(!IsPostBack){}里面
daniel0999 2012-06-12
  • 打赏
  • 举报
回复
如果直接定义<ItemTemplate>
<asp:CheckBox ID="ck" Text="hi" Checked=true runat="server" />
</ItemTemplate>
checkd为true,就能执行到if语句,为什么啊啊啊啊啊啊啊
孟子E章 2012-06-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 daniel0999 的回复:]

全部都选结果还是else的语句
[/Quote]
把你的绑定写到if(!IsPostBack){}里面
孟子E章 2012-06-12
  • 打赏
  • 举报
回复
你应该这样啊
bool x = false;
for (int i = 0; i <= dv.Rows.Count - 1; i++)
{
CheckBox chk = (CheckBox)dv.Rows[i].FindControl("ck");
if (chk.Checked == true)
{
x=true;
TextBox1.Text += "tyyyyyyy";
}
}

if(!x)
{
TextBox1.Text = "eeeeeeeeeee";
}
}
daniel0999 2012-06-12
  • 打赏
  • 举报
回复
全部都选结果还是else的语句
孟子E章 2012-06-12
  • 打赏
  • 举报
回复
不是else执行,是因为你有box没选中,所以执行
else啊
你都选了就不执行啦
daniel0999 2012-06-12
  • 打赏
  • 举报
回复
问题是他根本显示不出来tyyyyyyy,结果显示的是eeeeeeeeeee,也就是说if (chk.Checked == true)这条判断语句有错误,可实在看不出哪里错了
风一样的大叔 2012-06-12
  • 打赏
  • 举报
回复
TextBox1.Text = "tyyyyyyy";这样的话每次都覆盖了原来的值,TextBox1.Text += "tyyyyyyy"

62,268

社区成员

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

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

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

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