C # datagridview щелкните правой кнопкой мыши, чтобы выбрать строку и показать меню, чтобы вызвать форму для редактирования выбранной строки. - PullRequest
1 голос
/ 13 февраля 2012

я ищу везде, но не могу найти решение своей проблемы Мне просто интересно, как сделать правое меню в представлении сетки данных, чтобы редактировать данные из SQL

это мой код для создания контекстного меню для щелчка правой кнопкой мыши, но я не могу вызвать форму, чтобы получить данные из строки, в которой я щелкнул правой кнопкой мыши, и отредактировать данные ..

public void Rightclick()
   {
       ContextMenu Rmnu = new ContextMenu();
       MenuItem mnuCCS = new MenuItem("Change Class Size");
       MenuItem mnuDeactv = new MenuItem("Deactivate");

       mnuCCS.Click += new EventHandler(radGridView_Class_View_Click);
       mnuDeactv.Click += new EventHandler(radGridView_Class_View_Click);

       Rmnu.MenuItems.AddRange(new MenuItem[] { mnuCCS, mnuDeactv });
       radGridView_Class_View.ContextMenu = Rmnu;



   }
   private void radGridView_Class_View_Click(object sender, EventArgs e)
   {
       Rightclick();
   }

Я хочу создать форму для редактирования ..., которая получает данные из сетки данных и редактирует их ... используя меню правой кнопки мыши ...

Может кто-нибудь мне помочь .. спасибо ...

1 Ответ

3 голосов
/ 14 февраля 2012

Думаю, вам стоит заглянуть в эту MSDN-статью . Он показывает, как использовать ContextMenuStrip для вашей проблемы.

Образец ниже:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace test1
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        // Test-Data
        dataGridView1.DataSource = GetTestData();

        // Add menu
        AddContextMenu(dataGridView1);

        // remember mouse location
        AddMouseEnterEvent();
    }

    private DataTable GetTestData()
    {
        DataTable tab = new DataTable();
        DataColumn c1 = new DataColumn("col1");
        DataColumn c2 = new DataColumn("col2");
        tab.Columns.AddRange(new DataColumn[] { c1, c2 });
        DataRow r1 = tab.NewRow(); r1[c1] = "cell 1"; r1[c2] = "cell 2";
        DataRow r2 = tab.NewRow(); r2[c1] = "cell 3"; r2[c2] = "cell 4";
        tab.Rows.Add(r1);
        tab.Rows.Add(r2);

        return tab;
    }

    private void AddContextMenu(DataGridView dgv)
    {
        var strip = new ContextMenuStrip();
        var menu1 = strip.Items.Add("Change Class Size");
        var menu2 = strip.Items.Add("Deactivate");

        menu1.Click += new EventHandler(menu1_Click);
        menu2.Click += new EventHandler(menu2_Click);
        foreach (DataGridViewColumn column in dgv.Columns)
        {
            column.ContextMenuStrip = strip;
        }
    }

    DataGridViewCellEventArgs mouseLocation;
    void AddMouseEnterEvent()
    {
        dataGridView1.CellMouseEnter += (s,e) => { mouseLocation = e; };
    }

    void menu2_Click(object sender, EventArgs e)
    {
        var cell = dataGridView1.Rows[mouseLocation.RowIndex].Cells[mouseLocation.ColumnIndex];
        // do something stupid
        cell.Style.BackColor = Color.Red;
    }

    void menu1_Click(object sender, EventArgs e)
    {
        var cell = dataGridView1.Rows[mouseLocation.RowIndex].Cells[mouseLocation.ColumnIndex];
        // do something even more stupid
        cell.Style.BackColor = Color.Blue;
    }
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...