datagridПросмотреть правки - PullRequest
2 голосов
/ 16 июня 2011

У меня есть представление данных, которое связано с базой данных SQLite. Теперь я хочу изменить некоторые поля в представлении данных.

Имеется 4 столбца ТЕКСТ - метка времени, сообщение, тип, хэш. Теперь я нахожу строку, я хочу щелкнуть по ней правой кнопкой мыши ... И она должна иметь опцию - "включить". Итак, когда я нажимаю включить в контекстном меню, столбец Тип моего DGV должен измениться на "включить" из что бы это ни было раньше ... (я не хочу, чтобы оно было включено для редактирования .. Я просто хочу, чтобы оно изменилось в программе) Как мне получить индекс, по которому я щелкнул, и получить доступ к этой конкретной ячейке, чтобы изменить его ??

Ответы [ 2 ]

1 голос
/ 17 июня 2011

Этот код делает то, что вы хотите:

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

        BindingList<User> users = new BindingList<User>();
        users.Add(new User(){Name = "Fred", Included = "False", Title="Mr"});
        users.Add(new User(){Name = "Sue", Included = "False", Title="Dr"});
        users.Add(new User(){Name = "Jack", Included = "False", Title="Mr"});

        dataGridView1.DataSource = users;
    }


    private void dataGridView1_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == System.Windows.Forms.MouseButtons.Right)
        {
            DataGridView.HitTestInfo hit = dataGridView1.HitTest(e.X, e.Y);

            if (hit.rowIndex >= 0)
            {
                dataGridView1.ClearSelection();
                dataGridView1.Rows[hit.RowIndex].Selected = true;
                contextMenuStrip1.Show(this.dataGridView1, new Point(e.X, e.Y));
            }
        }
    }

    private void includeToolStripMenuItem_Click_1(object sender, EventArgs e)
    {
        // Included was the name of the column to change in my example code,
        // you could also use the index of the column if you know it.
        dataGridView1.SelectedRows[0].Cells["Included"].Value = "Included";
    }
}

public class User
{
    public string Name { get; set; }
    public string Title { get; set; }
    public string Included { get; set; }
}

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

1 голос
/ 16 июня 2011
private void dataGridView_DoubleClick(object sender, EventArgs e)
{  
    var grid = (DataGridView)sender;
    var point = grid.PointToClient(Cursor.Position);
    var hit = grid.HitTest(p.X, p.Y);      
    MessageBox.Show(string.Format("{0} / {1}", hit.ColumnIndex, hit.RowIndex));
}

Код не тестируется компиляцией, но теоретически это должно сработать.


dataGridView.Rows[rowIndex].Cells[cellIndex].Value = "something";

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...