页面上有两个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”。
这一句该如何写啊?
{
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”。
这一句该如何写啊?
tb.rows.add( tb1.row[*] )
DataRow D2 = (DataRow)GridView1.Rows[i];
上面的强制转化是不够严密的,看你的GridView的绑定结构了。建议你建立GridView1的datasource的copy,结合checkbox的选中集合来操作绑定。
if(CheckBox1.Checked)
{
this.GridView2.DataSource = this.GridView1.DataSource;
this.GridView2.DataBind();
}
先把要的数据 选中 然后一次性添加到GridView2里面去?
如果是这样 有两种办法
一是 自己定义个DataTable dt2=new DataTable() 然后用一个循环
把选中的行 的数据 一行一行 获取 再手动 添加到这个DataTable里去
再把这个dt2绑定到GridView2 第二种方法是 想用循环获取选定行的主键
再通过这些主键 查询一次数据出 返回 DataTable
再将这个DataTable绑定到GridView上面去
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); }
可能会有点麻烦,但应该会好用
把你选中的数据添加数据集中,然后再将数据集的数据添加到另1个gridview
想想应该是这么简单,不过就是不知道该如何实现啊。
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中后台筛选了。
GridView2.DataBind();肯定会有波浪线,显示找不到GridView2啊