Я пытаюсь реализовать переупорядочивание строки перетаскивания C# с listview, который затем обновил бы базу данных SQL с текущим порядком строк. Я столкнулся с некоторыми отрывками кода в Интернете (один с этого веб-сайта, который реализовал класс 'var'), но ни один, кажется, не работает с моими потребностями. Я не нуждаюсь в помощи, обновляя базу данных, поскольку у меня есть хорошая идея, как я сделал бы это, но, может казаться, не заставляю переупорядочение строки работать правильно, любой вход ценился бы.
спасибо
m&a
Убедитесь, что для AllowDragDrop
установлено значение true
.
Реализуйте обработчики как минимум для этих 3 событий
private void myList_ItemDrag (объект-отправитель, ItemDragEventArgs e)
{
DoDragDrop (e.Item, DragDropEffects.Link);
}
private void myList_DragEnter (отправитель объекта, DragEventArgs e)
{
e.Effect = DragDropEffects.Link;
}
private void myList_DragDrop (отправитель объекта, DragEventArgs e)
{
// делаем все, что вам нужно, чтобы переупорядочить список.
}
Получение индекса строки, на которую вы перетащили, может выглядеть примерно так:
Point cp = myList.PointToClient (new Point (e.X, e.Y));
ListViewItem dragToItem = myList.GetItemAt (cp.X, cp.Y);
int dropIndex = dragToItem.Index;
Я знаю, что это не ListView
, но у меня есть пример кода для реализации перетаскивания строк из / в DataGridView
. Некоторые из них, очевидно, относятся к конкретным элементам управления, другой код на самом деле довольно общий (например, определение того, когда его перетаскивать):
http://adamhouldsworth.blogspot.com/2010/01/datagridview-multiple-row-drag-drop .html
Совершенно забыл о том, что ListView
уже допускает перетаскивание!
Я также могу добавить немного теории - когда на вашем элементе управления происходит падение, вам нужно будет выполнить проверку нажатия на эти координаты (вероятно, метод под названием HitTest
) в ListView
, чтобы увидеть, какая строка была поражена, это основа для вставки перетаскиваемой строки.
Несвязанный - этот класс var
, возможно, новое ключевое слово var
в C #?