日期:2014-05-20  浏览次数:20831 次

求助关于吧dataGridView中选中的一行,添加到同一页面中另一个DataGridView中
各位大哥:
  如题我有两个DataGridView dgvA和dgvB,dgvA中选中了一行,在一个添加按钮中,想把该选中行SelectRows[i]的数据完整的添加到另一个dgvB中,如何实现????
  如题上一个是完整的添加,还有一个是仅仅添加改行中的某几个单元格的数据到dgvB中 该如何做呢???
部分代码如下
C# code

 for(int i=0;i<dgvA.selectRows.Count;i++)
{
    DataGridViewRow dgvRow=dgv.selectRows[i];
    dgvB.Rows.remove(dgvRow);//如果选中行有多个这时移除不完全,比如选中了三个只移除了俩,为什么???该怎么做呢。
    dgvB.Rows.Add(dgvRow);//这里添加的数据在dgvB中不显示。
}






各位大哥为什么???该怎么做呢???

------解决方案--------------------
C# code

Page
<asp:GridView ID="GridView1" runat="server" 
          AutoGenerateColumns = "false">
            <Columns>
                <asp:BoundField DataField = "Id" HeaderText ="ID" />
                <asp:BoundField DataField = "Name" HeaderText ="Name" />
                <asp:BoundField DataField ="Age" HeaderText = "Age" />
                <asp:TemplateField>
                    <ItemTemplate>
                      <asp:Button ID="btnAdd" runat="server" Text="Add" OnClick = "btnAdd_Click"/>
                    </ItemTemplate>
                    
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
           <asp:GridView ID="GridView2" runat="server">
        </asp:GridView>

Model

    [Serializable]
    public class Student
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }

.cs

        protected void btnAdd_Click(object sender, EventArgs e)
        {
            Button btn = sender as Button;

            GridViewRow row = btn.Parent.Parent as GridViewRow;
                        
            if (row == null) return;
            
            Student s = new Student();
            s.Id = int.Parse(row.Cells[0].Text);
            s.Name = row.Cells[1].Text;
            s.Age = int.Parse(row.Cells[2].Text);

            List<Student> students = this.AddStudent;
            students.Add(s);

            this.GridView2.DataSource = students;
            this.GridView2.DataBind();

            this.AddStudent = students;


        }

        public List<Student> AddStudent
        {
            get
            {
                if (this.ViewState["Students"] == null) return new List<Student>();

                return this.ViewState["Students"] as List<Student>;
            }
            set
            {
                this.ViewState["Students"]= value;
            }

        }
    }

------解决方案--------------------
C# code

DataGridViewRow[] drs=new DataGridViewRow[dataGridView1.SelectedRows.Count];
            dataGridView1.SelectedRows.CopyTo(drs, 0);
            for (int i = 0; i < drs.Length; i++)
            {
                //这是完整的添加
                DataGridViewRow dr = new DataGridViewRow();
                dr.CreateCells(dataGridView2);
                dr.CreateCells(dataGridView2);
                //也可以只部分添加
                //只需要改变这个的赋值项
                dr.Cells[0].Value = drs[i].Cells[0].Value;
                dr.Cells[1].Value = drs[i].Cells[1].Value;
                dataGridView2.Rows.Add(dr);
            }

------解决方案--------------------
探讨
各位大哥:
如题我有两个DataGridView dgvA和dgvB,dgvA中选中了一行,在一个添加按钮中,想把该选中行SelectRows[i]的数据完整的添加到另一个dgvB中,如何实现????
如题上一个是完整的添加,还有一个是仅仅添加改行中的某几个单元格的数据到dgvB中 该如何做呢???
部分代码如下

C# code

 for(int i=0;i<dgvA.s……

------解决方案--------------------
C# code
 
object[] ob = new object[] { dgv1.CurrentRow.Cells["itemName"].Value.ToString(), 
                dgv1.CurrentRow.Cells["ITEMM_MID"].Value.ToString(), "", "",
                dgv1.CurrentRow.Cells["checkup_price"].Value.ToString()
            };
            //添加一行数据
            dgv2.Rows.Add(ob);
//写个数组~

------解决方案--------------------
dgvB.Rows.remove(dgvRow);
dgvB.Rows.Add(dgvRow);

这样本身不对吧。dgvRow是第一个gridview的引用,直接加到第二个对象肯定不行,而且你先remove了,再去加,应该加的是个空对象吧。建议remove之前在dgvB新建一个row,再把dgvRow深拷贝过来,再去remove第一个。