Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > манипуляции в DataGridView


Автор: tatbesidovska 14.5.2008, 10:47
Такая ситуация: Как сделать так, чтобы при выделении записей в DataGridView при нажатии на правую кнопку мыши выходило- "копировать", "вставить", далее при нажатии "копировать" данные копировались в буфер, далее всав на новую строку в  DataGridView и нажав на "Вставить" данные добавлялись в DataGridView, заранее спасибо

Автор: thomas 14.5.2008, 13:05
tatbesidovska, 
Используем контекстное меню.  smile 

Автор: tatbesidovska 14.5.2008, 13:29
thomas, Вы знаете, я новичок в освоении этого материала, а не могли ли Вы подробнее мне рассказать про контекстное меню. Спасибо.

Автор: tatbesidovska 14.5.2008, 15:51
Подскажите пожалуйста, как написать обработку осбытия-"Копировать" и "Вставить" в DataGridView. Например, выделяем строку, копируем и вставляем данные в новую строку, заранее спасибо.

Автор: tatbesidovska 15.5.2008, 12:29
Ну кто-нить подскажите!!!! ОООООООООООчень надо

Автор: thomas 15.5.2008, 15:30
tatbesidovska, 
Для копирования данных из грида нужно создавать обьект DataRow и присваивать значения полям из ячеек выделенной строки в гриде.
Вставка происходит наоборот, имея обьект DataRow добавляете его в DataSource грида и обновляете грид. Или заменяете выделенную в гриде строку своей. Опять же через DataSource грида.

Кодировать по обстакановке, исходя из того что вы имееете.

Автор: tatbesidovska 20.5.2008, 15:21
а код можно????

Автор: Chef 21.5.2008, 18:22

Получаем список выделеных записей
Код

DataGridViewRow bufferRow = grid.SelectedRows[0];


Если у тебя стоит MultiSelect = false, то получишь одну запись (если она выделена). Если True то тогда избегай этого, проверяй grid.SelectedRows.Count (количество выделеных записей)

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

Код

DataGridViewRow row = grid.SelectedRows[0];


Сразу присвоить нельзя, потому что только для чтения. Получили присвоили и все.
Код

row = bufferRow;


Если работаешь с данными из DataSet то нужно данные там изменять а не в гриде

Вроде так, мож в чем то ошибся  smile 

Автор: Chef 22.5.2008, 17:26
Мышью щелкать и копировать..... Вот накидал наверно ты етого хотел
Создаешь событие для грида

Код

dtGridView.CellMouseDown += new DataGridViewCellMouseEventHandler(SelectFullRow);


Вот код события

Код

private void SelectFullRow(object sender, DataGridViewCellMouseEventArgs e)
        {
            //throw new Exception("The method or operation is not implemented.");
            if (e.Button == MouseButtons.Right)
                if ((e.ColumnIndex == -1) && (e.RowIndex > -1))
                {
                    DataGridView dt = sender as DataGridView;
                    foreach (DataGridViewRow rw in dt.SelectedRows)
                    {
                        rw.Selected = false;
                    }
                    dt.Rows[e.RowIndex].Selected = true;
                    menuTable.Show(MousePosition.X, MousePosition.Y);
                }
        }


Сдесь в коде если ты щелкаешь на крайней ячейке (ну которая серая  smile ) , то выделяеться все строка, выходит меню, где ты и выбираешь копировать, вставить или еще что.

Этот кусок убирает все выделеные до этого строки, навсякий случай, а то бывает.......
Код

DataGridView dt = sender as DataGridView;
 foreach (DataGridViewRow rw in dt.SelectedRows)
 {
      rw.Selected = false;
 }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)