GridView1中CheckBox多选时,点击外面的button按钮显示信息问题

Dotar 2011-09-22 03:29:01
GridView中CheckBox多选时,点击外面的button按钮显示信息到GridView2中
选择代码:
public void bind()
{
DataTable ds = DB.GetDataTable("select * from 表");

this.GridView1.DataSource = ds;
this.GridView1.DataKeyNames = new string[] { "ID" };
this.GridView1.DataBind();


}
protected void Button1_Click(object sender, EventArgs e)
{
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
if (cbox.Checked == true)
{
DataTable ds = DB.GetDataTable("select 字段 from 表 where ID=" + Convert.ToUInt32(GridView1.DataKeys[i].Value) + "");

this.GridView2.DataSource = ds;
this.GridView2.DataBind();
}
}
bind();

}


如果我选择两行,能够显示到GridView2中两行信息。目前上面的代码只能显示选择的最后一行的信息,求大侠给思想,给方法
我试过while(cbox.Checked == true)不行,求高手指点!!!!!!!!!!!!!!!
...全文
140 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dotar 2011-09-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 taomanman 的回复:]
你这样循环,肯定取的是最后一条记录了,前面的都被后面一条覆盖掉了。



C# code

public void bind()
{
DataTable ds = DB.GetDataTable("select * from 表");

this.GridView1.DataSource = ds;
this.GridView1.DataKeyNames = ……
[/Quote]

正解!感谢2楼给了我思想,我回来后已经有这么多人回答,感谢所有回答的人,自己解决的方法:
protected void Button1_Click(object sender, EventArgs e)
{
string sql = "select 字段 from 表 where ID in(";
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
if (cbox.Checked == true)
{
sql = sql + GridView1.DataKeys[i].Value + ",";

}
}
sql = sql.Substring(0, sql.Length - 1) + ")";
DataTable ds = DB.GetDataTable(sql);

this.GridView2.DataSource = ds;
this.GridView2.DataBind();
bind();
}
h_zai888 2011-09-22
  • 打赏
  • 举报
回复
就是for循环覆盖了前面的绑定 只显示最后一条记录
[Quote=引用 5 楼 net_lover 的回复:]
你应该这样
protected void Button1_Click(object sender, EventArgs e)
{
DataTable ds
String where = "";
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
CheckBox cbox = (CheckBox)Grid……
[/Quote]
暖枫无敌 2011-09-22
  • 打赏
  • 举报
回复
你这样循环,肯定取的是最后一条记录了,前面的都被后面一条覆盖掉了。



public void bind()
{
DataTable ds = DB.GetDataTable("select * from 表");

this.GridView1.DataSource = ds;
this.GridView1.DataKeyNames = new string[] { "ID" };
this.GridView1.DataBind();


}

protected void Button1_Click(object sender, EventArgs e)
{
StringBuilder sb =new StringBuilder();
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
if (cbox.Checked == true)
{
sb.Append(GridView1.DataKeys[i].Value+",");
}
}
DataTable ds = DB.GetDataTable("select 字段 from 表 where ID in (" +sb.ToString().TrimEnd(',') +")");
this.GridView2.DataSource = ds;
this.GridView2.DataBind();
}

pgxuser 2011-09-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 pgxuser 的回复:]
我的思路是,将所有选中的Id用for循环集合起来,
最后 string sqlStr=("select 字段 from 表 where ID in "+ID集合);
DataTable ds = DB.GetDataTable(sqlStr);
this.GridView2.DataSource = ds;
this.GridView2.DataBind();
[/Quote]
[Quote=引用 4 楼 pgxuser 的回复:]
string IDs="";//声明变量ID集合
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
if (cbox.Checked == true)
{
ID+= Co……
[/Quote]
结合到一起就行了。
zou0702tao 2011-09-22
  • 打赏
  • 举报
回复
string sql="select 字段 from 表 where "
for(...)
{
string str="or ID="+ Convert.ToUInt32(GridView1.DataKeys[i].Value);
sql+=str;
}
自己写代码去掉第一个or
lijing5916 2011-09-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 pgxuser 的回复:]
string IDs="";//声明变量ID集合
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
if (cbox.Checked == true)
{
ID+= Co……
[/Quote]
孟子E章 2011-09-22
  • 打赏
  • 举报
回复
或者
protected void Button1_Click(object sender, EventArgs e)
{
DataTable ds
String where = "(";
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
if (cbox.Checked == true)
{
where += GridView1.DataKeys[i].Value.ToString() + ","
}
}
if(where!="(")
{
where = where.TrimEnd(",") + ")";
ds = DB.GetDataTable("select 字段 from 表 where ID IN " + where);
this.GridView2.DataSource = ds;
this.GridView2.DataBind();
}

}
孟子E章 2011-09-22
  • 打赏
  • 举报
回复
你应该这样
protected void Button1_Click(object sender, EventArgs e)
{
DataTable ds
String where = "";
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
if (cbox.Checked == true)
{
where += " ID = " + GridView1.DataKeys[i].Value.ToString() + " Or"



}
}
if(where!="")
{
where = where.TrimEnd("Or");
ds = DB.GetDataTable("select 字段 from 表 where " + where);
this.GridView2.DataSource = ds;
this.GridView2.DataBind();
}

}
pgxuser 2011-09-22
  • 打赏
  • 举报
回复
string IDs="";//声明变量ID集合
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
if (cbox.Checked == true)
{
ID+= Convert.ToUInt32(GridView1.DataKeys[i].Value) + ",";
}
}
if(IDs.Length>0)
{
IDs=IDs.substring(0,IDs.Length-1);
}
pgxuser 2011-09-22
  • 打赏
  • 举报
回复
我的思路是,将所有选中的Id用for循环集合起来,
最后 string sqlStr=("select 字段 from 表 where ID in "+ID集合);
DataTable ds = DB.GetDataTable(sqlStr);
this.GridView2.DataSource = ds;
this.GridView2.DataBind();
Dotar 2011-09-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pgxuser 的回复:]
很明显,执行for循环时,每次都把原来的绑定覆盖了。最后执行的绑定就是最终显示的了。
DataTable ds = DB.GetDataTable("select 字段 from 表 where ID=" + Convert.ToUInt32(GridView1.DataKeys[i].Value) + "");

this.GridView2.DataSource = ds;
……
[/Quote]

怎么不覆盖呢?
pgxuser 2011-09-22
  • 打赏
  • 举报
回复
很明显,执行for循环时,每次都把原来的绑定覆盖了。最后执行的绑定就是最终显示的了。
DataTable ds = DB.GetDataTable("select 字段 from 表 where ID=" + Convert.ToUInt32(GridView1.DataKeys[i].Value) + "");

this.GridView2.DataSource = ds;
this.GridView2.DataBind();
Android的系统架构 6 一、应用程序 6 二、应用程序框架 6 三、Android Runtime 7 四、系统库 7 五、Linux 内核 8 Webkit浏览器引擎简介 9 Dalvik虚拟机简介 11 什么是Dalvik虚拟机 11 Dalvik和Android系统 11 Dalvik虚拟机的主要特征 12 Android应用开发和Dalvik虚拟机 15 Activity生命周期 16 一、Activity栈 16 二、Activity的4种状态 16 三、Activity的生命周期 17 四、实例说明 18 Android控件的继承关系 22 一、View与ViewGroup关系 22 二、各控件的继承关系 23 界面布局 25 LinearLayout(线性布局) 25 TableLayout(表格布局) 28 RelativeLayout(相对布局) 31 AbsoluteLayout(绝对布局) 34 FrameLayout(框架布局) 34 Toast 36 Notification 38 对话框 42 一、带三个按钮的对话框 42 二、简单列表对话框、单选列表对话框、多选列表对话框 44 三、水平进度对话框和圆形进度对话框 47 四、自定义对话框 49 Menu菜单 52 选项菜单 52 上下文菜单 53 三、子菜单 54 4种响应菜单项单击事件的方式 56 显示和编辑文本的控件 57 TextView 57 CheckedTextView 60 EditText 60 ExtraEditText 61 AutoComplteteTextView、MultiAutoCompleteTextView (自动完成输入内容) 61 Button 63 ImageButton 65 ZoomButton 65 日期和时间控件 66 DatePicker、TimePicker 66 AnalogClock、DigitalClock 68 单选框、复选框、开关状态按钮 69 单项选择(RadioGroup、RadioButton) 69 复选框(CheckBox) 71 开关状态按钮(ToggleButton) 73 下拉列表框Spinner 74 ScrollView、HorizontalScrollView 77 垂直滚动(ScrollView) 77 水平滚动(HorizontalScrollView) 78 两个方向均可滚动 78 TabHost 79 ProgressBar、SeekBar、RatingBar 81 进度条(ProgressBar) 81 拖动条(SeekBar) 83 评分组件(RatingBar) 86 GridView、Gallery和ImageSwitcher 88 GridView 88 Gallery和ImageSwitcher 91 ListView 94 一、普通的ListView 94 可以单选和多选的ListView 95 使用SimpleAdapter建立复杂的列表项 97 自定义Adapter来建立复杂的列表项 99 动态添加、删除ListView列表项 102 改变ListView列表项选状态的背景颜色 102 可展开的列表组件 102 数据的存取 103 SharePreferences 6.1 103 文件的存储6.2 103 SQLite数据库6.4 103 ContentProvider、ContentResolver 6.5 105 Intent 106 用Intent启动Activity,并在Activity之间传递数据 106 调用其他应用程序的Activity(打电话、浏览网页、发Email等) 109 接收和发送广播 113 接收系统广播 113 在自己的应用程序发送广播 117 Android服务 118 系统服务 8.2 118 时间服务 8.3 118 跨进程访问 8.4 118 网络 119 图形、音频、视频 120 图形 10.1 120 音频、视频 10.2 120 2D动画 121 帧动画 121 补间动画 121 OpenGL ES编程 122 Android支持的各种资源 123 窗口小部件(App Widget) 124 NDK编程 125

62,041

社区成员

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

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

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

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