![](/img/trans.png)
[英]How do I copy one list to another that has an object with additional properties in C# ? (without a foreach)
[英]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");
}
}
希望这可以帮助。
您的代码在我这边工作。
所选行仍处于选中状态。
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.