繁体   English   中英

C#如何在不覆盖先前选择的情况下从一个数据网格复制到另一个数据网格?

[英]C# How do I copy from one data grid to another without overwriting my previous selection?

我有一个数据表的2个datagrid视图。 我试图有一个按钮,单击该按钮时会将csv_datagridview中的行添加到optimum_datagridview中。 下面的工作,但是每当我在csv_datagridview中取消选择一个条目并再次按下按钮时,它都会清除该选择。 我想每次都有选择棒。

  if (selectedRowCount <= 9)
                {


                    List<object> destList = new List<object>();
                    foreach (DataGridViewRow row in csv_datagridview.SelectedRows)
                        destList.Add(row.DataBoundItem);
                    optimaldataGridView.DataSource = destList;

在此处输入图片说明

在此处输入图片说明

提前非常感谢您:)

目前尚不清楚您显示的小代码的确切问题是什么,但是只要您在语句中取消选中csv_datagridview的条目并再次单击按钮, csv_datagridview从您的语句中清除该选择。 我猜想如果没有选择任何内容,则当您按下添加所选按钮时, optimaldataGridView的数据optimaldataGridView清除。

我将假设csv_datagridview绑定到一个表。 您发布的代码显示了新List destList的创建,您将使用csv_datagridview的选定行填充该csv_datagridview 然后,将optimaldataGridView数据源设置为destList 我在这张图中看到的一个问题是,一旦离开if (selectedRowCount <= 9)子句…… destList将不再存在。 作为表单上DataGridView的数据源,我认为只要表单处于打开状态,您就希望将此List保持全局。 无论哪种方式……您都不添加选定的行,只是删除现有的行,然后添加在csv_datagridview中选择的csv_datagridview

希望以下代码对您有所帮助。 我创建了两个数据表,每个DataGridView一个。 csv_datagridview数据表填充了一些数据,第二个数据表留空。 然后,只需将csv_datagridview的选定行添加到optimaldataGridView的DataTable中,然后刷新optimaldataGridView

DataTable table1;
DataTable table2;

public Form1() {
  InitializeComponent();
  csv_datagridview.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
  optimaldataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
  table1 = GetTable("table1");
  table2 = GetTable("table2");
  FillTable(table1);
  csv_datagridview.DataSource = table1;
  optimaldataGridView.DataSource = table2;
}

private void button1_Click(object sender, EventArgs e) {
  if (csv_datagridview.SelectedRows.Count > 0) {
    foreach (DataGridViewRow row in csv_datagridview.SelectedRows) {
      DataRowView dr = (DataRowView)row.DataBoundItem;
      table2.Rows.Add(dr.Row.ItemArray[0], dr.Row.ItemArray[1], dr.Row.ItemArray[2]);
    }
    optimaldataGridView.Refresh();
  }
}

private DataTable GetTable(string name) {
  DataTable table = new DataTable(name);
  table.Columns.Add("col1");
  table.Columns.Add("col2");
  table.Columns.Add("col3");
  return table;
}

private void FillTable(DataTable table) {
  for (int i = 0; i < 10; i++) {
    table.Rows.Add("R" + i + "C0", "R" + i + "C1", "R" + i + "C2");
  }
}

希望这可以帮助。

您的代码在我这边工作。

  • 为csv_datagridview的数据源创建了一个数据表。
  • 在此网格中选择了一些行。
  • 单击按钮以将选定的行复制到bestdataGridView

所选行仍处于选中状态。

public Form1()
{
   InitializeComponent();
   DataTable dt = new DataTable();
   dt.ReadXml(Application.StartupPath + @"\test.xml");
   csv_datagridview.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
   csv_datagridview.DataSource = dt;
}

private void button1_Click(object sender, EventArgs e)
{
   List<object> destList = new List<object>();
   foreach (DataGridViewRow row in csv_datagridview.SelectedRows)
      destList.Add(row.DataBoundItem);
   optimaldataGridView.DataSource = destList;
}

确保没有任何可能影响选择的事件附加到网格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM