У меня есть сетка с рядами. Мне бы хотелось, чтобы пользователь мог захватить строку и переместить ее в одно из нескольких других видов сетки в winform. Как я могу сделать это? Я не знаком с тем, как реализовать перетаскивание здесь.
Какие-нибудь хорошие учебники по этому типу перетаскивания? Спасибо за вашу помощь.
ОБНОВЛЕНИЕ: Хорошо, у меня есть следующий код (чтобы перетащить из gridPODetails в dataGridView1. Он еще не работает, но я ближе (теперь я получаю стрелку перетаскивания и знак плюс в месте назначения). 1005 *
private void gridPODetails_MouseDown(object sender, MouseEventArgs e)
{
DataGridView.HitTestInfo info = gridPODetails.HitTest(e.X, e.Y);
if (info.RowIndex >= 0)
{
//DataRowView view = (DataRowView)gridPODetails.Rows[info.RowIndex].DataBoundItem; //WRONG
DataRow view = ((DataTable)(gridPODetails.DataSource)).Rows[info.RowIndex]; //RIGHT
if (view != null)
{
gridPODetails.DoDragDrop(view, DragDropEffects.Copy);
}
}
}
private void dataGridView1_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Copy;
}
private void dataGridView1_DragDrop(object sender, DragEventArgs e)
{
DataGridView grid = sender as DataGridView;
DataTable table = grid.DataSource as DataTable;
DataRow row = e.Data.GetData(typeof(DataRow)) as DataRow;
if (row != null && table != null && row.Table != table)
{
table.ImportRow(row);
row.Delete();
}
}
решено: см. Мое редактирование выше. На самом деле я собирал всю информацию, а не только строку, которую хотел. Конечно, пункт назначения знает, как работать со строками, а не со всеми таблицами. Теперь это работает!