Держите строку datagridview выбранной пользователем - PullRequest
0 голосов
/ 15 июня 2010

Мне нужен код фрагмента в C # для сохранения выбранной строки из DataGridView после двойного щелчка по этой строке.

Сейчас я отображаю данные из набора данных, и режим выбора - FullRowSelect. Есть ли способ установить это?

Есть два сценария:

  1. Каждый раз, когда таймер отмечает выбранную строку, всегда переходите к первой строке таблицы данных.
  2. Если щелкнуть строку, она будет выбрана, но после того, как отметится таймер, выбранная строка перейдет к первой.

Спасибо за вашу помощь!

Новичок-программист

Ответы [ 3 ]

1 голос
/ 20 сентября 2012

Вы должны сделать это в функции timer_tick

private void timer3_Tick(object sender, EventArgs e)
    {
        int rowIndex;

        if (dgvOrdini.Rows.Count == 0)  //here I check if the dgv is empty
            rowIndex = 0;
        else
        // I save the index of the current row in rowIndex
        rowIndex = this.dgvOrdini.CurrentCell.RowIndex;  

        .......
        .......
        if (dgvOrdini.Rows.Count != 0)  //Now if the dgv is not empty
           //I set my rowIndex
           dgvOrdini.CurrentCell = dgvOrdini.Rows[rowIndex].Cells[0];    
    }

При использовании этого метода выбранная строка не изменится.

1 голос
/ 24 сентября 2013

Попробуй это.Сначала сохраните индекс выбранной строки на самом деле

int index = -1 //set the index to negative (because if you have only 1 row in your grid, this is a zero index
if (yourdatagridview.Rows.Count > 0) //if you have rows in datagrid
{
 index = yourdatagridview.SelectedRows[0].Index; //then save index into variable
}

, теперь вы можете обновить представление данных ...

После обновления вы должны установить выбранную строку:

if (index != -1) //if index == -1 then you don't have rows in your datagrid
{
 yourdatagridview.Rows[index].Selected = true; 
}

Это работает !

0 голосов
/ 15 июня 2010

Сейчас я отображаю данные из набора данных, и режим выбора - FullRowSelect.Любой способ установить это?

Свойство DataGridView.SelectionMode сделает это для вас через перечисление DataGridViewSelectionMode.

dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;

Что касается остальной части вашего вопроса, я думаю, что требуются дополнительные детали.Какое поведение вы после?

РЕДАКТИРОВАТЬ # 1

Согласно вашему комментарию:

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

Одним из решений может быть следующее:

private _dataGridViewRowSelectedIndex;

private void dataGridview1_CellDoubleClick(object sender, DataGridViewCellEventArgs e) {
    DataGridView dgv = (DataGridview)sender;
    if (dgv.Rows.GetRowState(e.RowIndex) == DataGridViewElementStates.Selected)
        _dataGridViewRowSelectedIndex = e.RowIndex;

    // Open your form here...

    // And when your form returns...
    // Set the selected index like so
    dgv.Rows[_dataGridViewRowSelectedIndex].Selected = true;
}

Вам это поможет?

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