如何将gridview1中的数据读到gridview2中?

fireleopard 2009-03-23 03:46:43
页面上有两个gridview控件,分别为gridview1和gridview2,现在在gridview1中设置了一个checkbox控件,通过点击checkbox将gridview1中对应的行传递到gridview2中:

protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
{
DataTable tb = new DataTable();
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
if (cbox.Checked == true)
{
DataRow D2 = GridView1.Rows[i];
tb.Rows.Add(D2);
}
else
{
tb.Rows.Remove(D2);
}
}
GridView2.DataSource = tb;
GridView2.DataBind();
}

现在就是提示DataRow D2 = GridView1.Rows[i];这一句错误,无法将类型“System.Web.UI.WebControls.GridViewRow”隐式转换为“System.Data.DataRow”。
这一句该如何写啊?
...全文
259 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
mengbingqiang 2011-04-01
  • 打赏
  • 举报
回复
那代码是写在第一个的aspx,页面下面的,所以GridView2.DataSource = tb;
GridView2.DataBind();肯定会有波浪线,显示找不到GridView2啊
hekecd 2009-03-24
  • 打赏
  • 举报
回复
高手,学习一下……
fireleopard 2009-03-24
  • 打赏
  • 举报
回复
后来用了两个方法解决,一个就是借用缓存了,
protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
{
DataSet myds = (DataSet)Cache["D2"];
DataTable tb = new DataTable();
tb = myds.Tables[0].Clone();
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
if (cbox.Checked == true)
{
cbox.Checked = true;
DataRow D2 = (DataRow)myds.Tables[0].Rows[i];
tb.Rows.Add(myds.Tables[0].Rows[i].ItemArray);
}
else
{
cbox.Checked = false;
}
}
GridView2.DataSource = tb;
GridView2.DataBind();
}
不过感觉上功能还是有欠缺,后来还是用数组的方法解决了,将gridview1的行读到数组中,然后在SQL中后台筛选了。
fireleopard 2009-03-23
  • 打赏
  • 举报
回复
实际上就是建立一个新的数据集,将gridview1中选中的行的数据传递到该数据集中,然后作为gridview2的数据源datasource。
想想应该是这么简单,不过就是不知道该如何实现啊。
fireleopard 2009-03-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 yanghj_gc 的回复:]

把你选中的数据添加数据集中,然后再将数据集的数据添加到另1个gridview
[/Quote]

该如何实现?
A海阔天空 2009-03-23
  • 打赏
  • 举报
回复

把你选中的数据添加数据集中,然后再将数据集的数据添加到另1个gridview
marssongxs 2009-03-23
  • 打赏
  • 举报
回复
你可以这样试一下:
string[] str = new string[n]; //n是gridview中的列数
DataTable dt = new DataTable();
if (cbox.Checked == true)
{
str[0] = gv.Rows[i].Cells[0].Text.ToString();
str[1] = gv.Rows[i].Cells[1].Text.ToString();
.
.
.
str[n] = gv.Rows[i].Cells[n-1].Text.ToString();
dt.Rows.Add(str);

}
可能会有点麻烦,但应该会好用
liuhong_0325 2009-03-23
  • 打赏
  • 举报
回复
GridView2.DataSource = GridView1.DataSource;

不过你的字段名称要一样的
fireleopard 2009-03-23
  • 打赏
  • 举报
回复
不是要传递全部的行的,在gridview1中每一行都有个checkbox控件,通过点击checkbox将对应行传递到gridview2中的。是这么个需求。
dmnrli 2009-03-23
  • 打赏
  • 举报
回复
貌似Header/detail的结构。
Daniel_Hsu_CN 2009-03-23
  • 打赏
  • 举报
回复
是不是有很多行?
先把要的数据 选中 然后一次性添加到GridView2里面去?
如果是这样 有两种办法
一是 自己定义个DataTable dt2=new DataTable() 然后用一个循环
把选中的行 的数据 一行一行 获取 再手动 添加到这个DataTable里去
再把这个dt2绑定到GridView2

第二种方法是 想用循环获取选定行的主键
再通过这些主键 查询一次数据出 返回 DataTable
再将这个DataTable绑定到GridView上面去

benbirdar 2009-03-23
  • 打赏
  • 举报
回复
哦,你要传递相应行的数据记录,我理解错了
benbirdar 2009-03-23
  • 打赏
  • 举报
回复

if(CheckBox1.Checked)
{
this.GridView2.DataSource = this.GridView1.DataSource;
this.GridView2.DataBind();
}
CloneCenter 2009-03-23
  • 打赏
  • 举报
回复
提取 DataGridView 的数据源的数据来写入到新的数据表中。
strife013 2009-03-23
  • 打赏
  • 举报
回复
恩,你那样肯定不行啊。
mqc507 2009-03-23
  • 打赏
  • 举报
回复

DataRow D2 = (DataRow)GridView1.Rows[i];


上面的强制转化是不够严密的,看你的GridView的绑定结构了。建议你建立GridView1的datasource的copy,结合checkbox的选中集合来操作绑定。
moonshineidolon 2009-03-23
  • 打赏
  • 举报
回复
GridView1.Rows[i]; 这个返回的类型是 GridViewRow

跟你写的Datarow不是一个类型当然错了

你的数据如果少的话。就把gridview1的Datasource留下来,比如变量是tb1
tb.rows.add( tb1.row
  • )

62,073

社区成员

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

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

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

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