У меня есть dataGridView1
, dataGridView2
и ButtonAdd
в одной форме.
Пользователь будет:
1- выберите любую «Ячейку» или «Весь ряд».
2-выбрать несколько строк
Потом:
выбранные данные будут перемещены из dataGridView1 в dataGridView2 при нажатии кнопки. это все, что мне нужно сделать.
Моя попытка:
Я попробовал это решение после многих поисков, и оно почти готово, но есть небольшая проблема, с которой я не смог справиться:
Полный код:
private const string strconneciton = @"YourConnectionString";
SqlConnection con = new SqlConnection(strconneciton);
SqlCommand cmd = new SqlCommand();
DataTable dataTable;
private void loadDataIntoGridView1()
{
try
{
con.Open();
cmd.CommandText = "SELECT id, accNum, accName FROM Employees";
cmd.Connection = con;
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = cmd;
dataTable = new DataTable();
adapter.Fill(dataTable);
BindingSource bSource = new BindingSource();
bSource.DataSource = dataTable;
dataGridView1.DataSource = bSource;
//i don't know if this line is useful...
dataGridView2.DataSource = dataTable.Clone();
adapter.Update(dataTable);
con.Close();
}
catch (Exception ed)
{
con.Close();
MessageBox.Show(ed.Message);
}
}//end loadDataIntoGridView1
private void buttonSend_Click(object sender, EventArgs e)
{
if (dataGridView1.SelectedCells.Count > 0)
{
foreach (DataGridViewCell oneCell in dataGridView1.SelectedCells)
{
if (oneCell.Selected)
{
//this should add the rows that is selected from dataGridView1 and,
//pass it to dataGridView2
var currentRow = ((DataRowView)dataGridView1.CurrentRow.DataBoundItem).Row;
((DataTable)dataGridView2.DataSource).ImportRow(currentRow);
//this will remove the rows you have selected from dataGridView1
dataGridView1.Rows.RemoveAt(oneCell.RowIndex);
}//end if
}//end foreach
}//end if
}//end button click
Отладка:
просто Обратите внимание на одну вещь, прежде чем начать:
- метод удаления строк (несколько или один) работает нормально во всех случаях.
- проблема заключается в методе добавления в DGV2, я взял его из здесь... он отлично работает при выборе один ряд, а не несколько.
1- если вы выбрали одну ячейку/строку, она будет успешно добавлена и удалена.
2- если вы выбрали несколько строк, скажем, первую и вторую, она добавит вторую и третью, затем определенно удалит их, но добавляется только одна.. почему?!
Потому что здесь
var currentRow = ((DataRowView)dataGridView1.CurrentRow.DataBoundItem).Row;
((DataTable)dataGridView2.DataSource).ImportRow(currentRow);
получает текущий индекс существующих строк в DGV1, выполняет итерацию по количеству выбранных строк и добавляет их в DGV2.
Скриншот:
изображение того, как выполняется процесс: .
Что нужно сделать, чтобы решить эту проблему?