急求C#编程大神指导,如何使DataGridView1中的某行数据删除后将该行数据添加到DataGridView2中?

一个窗口中有两个DataGridView控件,如何实现DataGridView1表格中的某行数据删除后将这行数据添加到DataGridView2的表格中。最好有实例代码演... 一个窗口中有两个DataGridView控件,如何实现DataGridView1表格中的某行数据删除后将这行数据添加到DataGridView2的表格中。最好有实例代码演示。 展开
 我来答
神赐睿智
2014-12-22 · TA获得超过989个赞
知道小有建树答主
回答量:833
采纳率:75%
帮助的人:428万
展开全部
你这样的最好用listbox来做, 比如说你上面两面分别是LISTBOX1 和listbox2 左移和右移的代码分别是

//获取列表框的选项数
int count = lielist.Items.Count;
int index = 0;
//循环判断各个项的选中状态
for (int i = 0; i < count; i++)
{
ListItem Item = lielist.Items[index];
//如果选项为选中状态从目的列表框中删除并添加到源列表框中
if (lielist.Items[index].Selected == true)
{
lielist.Items.Remove(Item);
ListBox2.Items.Add(Item);
//将当前选项索引值减1
index--;
}
//获取下一个选项的索引值
index++;
}

//获取列表框的选项数
int count = ListBox2.Items.Count;
int index = 0;
//循环判断各个项的选中状态
for (int i = 0; i < count; i++)
{
ListItem Item = ListBox2.Items[index];
//如果选项为选中状态从源列表框中删除并添加到目的列表框中
if (ListBox2.Items[index].Selected == true)
{
ListBox2.Items.Remove(Item);
lielist.Items.Add(Item);
//将当前选项索引值减1
index--;
}
//获取下一个选项的索引值
index++;
}
追问
谢谢你的回答。我还想问,如果用listbox的话,再将数据更新到数据库该怎么做?
追答
if (ListBox2.Items.Count == 0)   return;  //没有选就直接返回
for (int i = 0; i < ListBox2.Items.Count; i++) //对LISTBOX2所有项目遍历
{
这里写加入数据库代码,把 ListBox2.Items[i].Text依次加入数据库
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Java程序员说
2014-12-22 · TA获得超过138个赞
知道答主
回答量:167
采纳率:0%
帮助的人:64.6万
展开全部
//--我只写个大概,思路是这样的,在Click事件下面添加这些代码
var rows=DataGridView1.SelectedRows;
DataGridView1.Remove(rows);//可能要写个循环
DataGridView2.AddRange(rows);
DataGridView1.Refresh();
DataGridView2.Refresh();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xuchao41771983
2014-12-23 · TA获得超过157个赞
知道小有建树答主
回答量:370
采纳率:100%
帮助的人:119万
展开全部
楼主,这个功能最简捷的实现就是通过数据源绑定到两个控件上,那些中间的左右移按钮事件处理程序中,对这两个数据源数据增减,数据源会自动通知UI刷新数据变化。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tonalilili
2014-12-21 · TA获得超过1.6万个赞
知道大有可为答主
回答量:8050
采纳率:71%
帮助的人:3068万
展开全部
你百度搜索【datagridview 选中行】
追问
能不能来个具体的例子?
追答

如图,先在属性--事件里双击弹出RowHeaderMouseClick。这个事件触发函数。
public static string[] s ;//静态数组,用来接收数据后,可以被别的函数调用,方便。
private void dataGridView1_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
    int r = e.RowIndex;//选中的行。
    dataGridView1.Rows.RemoveAt(e.RowIndex);//删除第r行。只是DatagridView1里显示删了,数据库没删
    int c = dataGridView1.ColumnCount;//DatagridView1的列数
    /*把第r行的单元格数据,逐个赋给数组s*/
    for (int i = 0; i < c; i++)
    {
        s[i] = dataGridView1.Rows[r].Cells[i].Value.ToString();
    }
}
//数组s的元素获得所删行的内容了。你在你button_click里给DatagridView2的行赋值吧
int r2 = dataGridView2.RowCount;//dataGridView2显示的行数,因为数据是逐格添加、得先知道添加到哪一行。
for (int i = 0; i < s.Length; i++)
{
     dataGridView2.Rows[r2 - 1].Cells[i].Value = "a";
}
这时候有个问题,我发现dataGridView里无数据时,此时直接给它的单元格赋值会报错说超出索引范围,因为没有任何行。所以你第一次给DatagridView2数据时,应该用Datatable来。
等它有行数了,你再通过数组来给单元格赋值。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式