Хочу менять местами строки в DataGridView перетаскивая их
От: zmaxic  
Дата: 24.01.08 11:29
Оценка:
Всем привет. Хочу менять строки местами в DataGridView путем их перетаскивания через drag and drop.
Вробе бы все получается, но натолкнулся на проблему:
как определить, какая строка лежит под курсором мыши в момент события dragdrop?
Например для списков есть функция IndexFromPoint() , а для DataGridView — я что то такого аналога не нашел...

Подскажите, пожалуйста?
и ещё сразу уж тогда вопрос — как сделать, чтобы когда тащишь объект он рисовался вслед за мышью бледной тенью?

Спасибо...

24.01.08 20:26: Перенесено модератором из '.NET' — AndrewVK
Re: Хочу менять местами строки в DataGridView перетаскивая и
От: Rius Россия  
Дата: 16.07.08 17:23
Оценка:
Здравствуйте, zmaxic, Вы писали:

Z>Всем привет. Хочу менять строки местами в DataGridView путем их перетаскивания через drag and drop.

Z>Вробе бы все получается, но натолкнулся на проблему:
Z>как определить, какая строка лежит под курсором мыши в момент события dragdrop?
Z>Например для списков есть функция IndexFromPoint() , а для DataGridView — я что то такого аналога не нашел...

Z>Подскажите, пожалуйста?

Z>и ещё сразу уж тогда вопрос — как сделать, чтобы когда тащишь объект он рисовался вслед за мышью бледной тенью?

Z>Спасибо...


Встретилась такая же задача...

В лоб решил так:
перебираем индекс строки от dataGridView.FirstDisplayedScrollingRowIndex до + dataGridView.DisplayedRowCount (или выхода индекса за количество строк);
приводим координаты курсора мыши из события DragOver к координатам в пределах dataGridView;
получаем прямоугольник строки dataGridView.GetRowDisplayRectangle(rowIndex, true);
если координаты курсора попадают в этот прямоугольник, то курсор над строкой;

здесь можно сохранять в какой-то переменной индекс найденной строки и, если он новый, вызывать dataGridView.Invalidate(); что позволит графически выделить строку с помощью события dataGridView.CellFormatting;
Re: Хочу менять местами строки в DataGridView перетаскивая и
От: Rius Россия  
Дата: 17.07.08 03:52
Оценка:
Здравствуйте, zmaxic, Вы писали:

Z>и ещё сразу уж тогда вопрос — как сделать, чтобы когда тащишь объект он рисовался вслед за мышью бледной тенью?


Windows Explorer style ghost drag image in a C# application
Re: Хочу менять местами строки в DataGridView перетаскивая и
От: seimur  
Дата: 17.07.08 16:35
Оценка:
Здравствуйте, zmaxic, Вы писали:

Z>Всем привет. Хочу менять строки местами в DataGridView путем их перетаскивания через drag and drop.

Z>Вробе бы все получается, но натолкнулся на проблему:
Z>как определить, какая строка лежит под курсором мыши в момент события dragdrop?
Z>Например для списков есть функция IndexFromPoint() , а для DataGridView — я что то такого аналога не нашел...

Z>Подскажите, пожалуйста?

Z>и ещё сразу уж тогда вопрос — как сделать, чтобы когда тащишь объект он рисовался вслед за мышью бледной тенью?

Z>Спасибо...



        private void dataGridView1_DragDrop(object sender, DragEventArgs e)
        {
            System.Windows.Forms.DataGridView.HitTestInfo htInfo 
                = dataGridView1.HitTest(e.X, e.Y);
        }
Теоретически нет разницы между теорией и практикой, но на практике она есть
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.