Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Копирование в DataGridView переносом 
:(
    Опции темы
okaton
Дата 10.12.2008, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 24.11.2006

Репутация: нет
Всего: нет



Извиняюсь за клонирование темы.
Подскажите как в DataGridView реализовать Drag&Drop?


Это сообщение отредактировал(а) okaton - 11.12.2008, 14:16
PM MAIL   Вверх
Unlocker
Дата 12.12.2008, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 2.11.2007
Где: Москва - Знаменск (Капустин Яр)

Репутация: 1
Всего: 2



Касательно технологии Drag&Drop могу сказать следующее.
На любом наследнике класса Control (каким DataGridView и является) есть свойство AllowDrop булевского типа.
Если интересует более подробная информация, то рекомендую обратиться к MSDN 2005.
Локальная документация мне выдала следующую ссылку на информацию о свойстве и примере

ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.NETDEVFX.v20.en/CPref17/html/P_System_Windows_Forms_Control_AllowDrop.htm
ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.NETDEVFX.v20.en/CPref17/html/M_System_Windows_Forms_Control_DoDragDrop_1_334b7c3a.htm

рекомендую попробовать штатные средства, прежде чем придумывать нечто уникальное.  smile 

Это сообщение отредактировал(а) Unlocker - 12.12.2008, 21:56
--------------------
"Если бы Шекспир был программистом, то фразу "To be or not to be" он написал бы так: 2b | ! 2b."
PM MAIL ICQ Skype GTalk Jabber   Вверх
okaton
Дата 12.12.2008, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 24.11.2006

Репутация: нет
Всего: нет



с AllowDrop не все так просто...

 smile в порыве отчаянии придался  жестокому гуглингу и рамблеренгу и что же я выяснил?
инет разделился на 2 половины, одна - знает как это сделать, но при этом выкладывает обрезанные примеры
другая - не знает как это делать и безуспешно пользует примеры первой

товарищи  smile, если кто-то владеет данной технологией пожалуйста  smile отзовитесь
PM MAIL   Вверх
okaton
Дата 15.12.2008, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 24.11.2006

Репутация: нет
Всего: нет



Кое что интересное нашел

Код

        private DataGridViewBehavior _GridBehavior1;
        private DataGridViewBehavior _GridBehavior2;
        private void toolStripButton5_Click(object sender, EventArgs e)
        {
            _GridBehavior1 = new DataGridViewBehavior();
            _GridBehavior1.Attach(dataGridView1);
            _GridBehavior2 = new DataGridViewBehavior();
            _GridBehavior2.Attach(dataGridView2);
            _GridBehavior1.Enabled = true;
            _GridBehavior2.Enabled = true;

        }


        public class DataGridViewBehavior
        {      
            private string[,] _Data;
            private DataGridView _Grid;
            private DataGridView.HitTestInfo _HitTest;
            private Point _HitTestPoint;
            private Rectangle _DragBox;
            public bool Enabled { get; set; }

            public void Attach(DataGridView grid)
            {
                _Grid = grid;
                _Data = new string[_Grid.RowCount, _Grid.ColumnCount];
                _Grid.MouseDown += _MouseDown;
                _Grid.MouseMove += _MouseMove;
                _Grid.VirtualMode = true;
                _Grid.AllowUserToAddRows = false;
                _Grid.AllowDrop = true;
                _Grid.DragOver += _DragOver;
                
                _Grid.DragDrop += _DragDrop;
                _Grid.CellValuePushed += (s, e) => _Data[e.RowIndex, e.ColumnIndex] = Convert.ToString(e.Value);
                _Grid.CellValueNeeded += (s, e) => e.Value = _Data[e.RowIndex, e.ColumnIndex];
            }
            
            void _DragDrop(object sender, DragEventArgs e)
            {
                if (Enabled == true)
                {
                    Point p = _Grid.PointToClient(new Point(e.X, e.Y));
                    var ht = _Grid.HitTest(p.X, p.Y);
                    if (ht.Type != DataGridViewHitTestType.Cell)
                        return;
                    if (e.Data.GetDataPresent(DataFormats.Text, true))
                    {
                        var data = e.Data.GetData(DataFormats.Text, true);
                        _Grid.Rows[ht.RowIndex].Cells[ht.ColumnIndex].Value = data;
                    }
                }                
            }

            void _DragOver(object sender, DragEventArgs e)
            {
                if (!e.Data.GetDataPresent(typeof(System.String)))
                {
                    e.Effect = DragDropEffects.None;
                    return;
                }              
                if ((e.KeyState & 4) == 4 && (e.AllowedEffect & DragDropEffects.Move) == DragDropEffects.Move)
                {
                    e.Effect = DragDropEffects.Move;
                }
                else if ((e.KeyState & 8) == 8 && (e.AllowedEffect & DragDropEffects.Copy) == DragDropEffects.Copy)
                {
                    e.Effect = DragDropEffects.Copy;
                }
                else if ((e.AllowedEffect & DragDropEffects.Move) == DragDropEffects.Move)
                {
                    e.Effect = DragDropEffects.Move;
                }
                else
                    e.Effect = DragDropEffects.None; 
            }            
            
            void _MouseDown(object sender, MouseEventArgs e)
            {
                if (Enabled == true)
                {
                    var ht = _Grid.HitTest(e.X, e.Y);
                    if (ht.Type == DataGridViewHitTestType.Cell)
                    {
                        _HitTest = ht;
                        _HitTestPoint = e.Location;
                        _DragBox = new Rectangle(new Point(e.X - (SystemInformation.DragSize.Width / 2), e.Y - (SystemInformation.DragSize.Height / 2)),
                            SystemInformation.DragSize);
                    }
                    else
                        _HitTest = DataGridView.HitTestInfo.Nowhere;
                }
            }
            void _MouseMove(object sender, MouseEventArgs e)
            {
                if (Enabled == true)
                {
                    if (((e.Button & MouseButtons.Left) != MouseButtons.Left)
                        || _HitTest == DataGridView.HitTestInfo.Nowhere
                        || _DragBox.Contains(e.X, e.Y))
                        return;
                    var data = _Grid.Rows[_HitTest.RowIndex].Cells[_HitTest.ColumnIndex].Value;
                    if (data != null)
                        _Grid.DoDragDrop(data, DragDropEffects.All);                
                }
            }
        }


Это сообщение отредактировал(а) okaton - 17.12.2008, 12:33
PM MAIL   Вверх
okaton
Дата 17.12.2008, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 24.11.2006

Репутация: нет
Всего: нет



Вопрос в следующем: почему работает только копирование? Иконка меняется, а перемещение не работает.

И еще одна непонятность. В word если копировать из таблицы и выделить одну или несколько ячеек в строке, копируется вся
строка в одну ячейку грида. Если выделить несколько символов, то с копируется правильно.
В exel копирование из таблицы нормальное, если выделить несколько ячеек, копируется все в в одну ячейку грида...
Как исправить проблемы с word. Как копировать несколько ячеек из редактора в несколько ячеек грида, и соответственно из грида?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0425 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.