2010-06-15 2 views
0

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

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

Есть два сценария, чтобы иметь дело с:

  1. Everytime таймера клещами выбранной строка всегда идет в первую строку DataGridView.
  2. После того, как щелкнул строку, она будет выбрана, но после того, как таймер отметит выбранную строку, она будет первой.

Благодарим за помощь!

начинающего программиста

ответ

0

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

Недвижимость DataGridView.SelectionMode будет делать это за вас через перечисление DataGridViewSelectionMode.

dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; 

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

EDIT # 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; 
} 

ли это помочь вам?

+0

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

+0

Спасибо за ваш ответ, но, прочитав много, я думаю, что могу лучше объяснить мою проблему. Моя проблема в том, что каждый раз, когда я вызываю метод populate_datagridview, помимо актуализации данных, выбирается первая строка datagrid, а не сохраняется выбранная текущая строка или строка. В принципе, мне нужно обновить FirstDisplayedScrollingRowIndex до текущего индекса строки. – user367509

+0

Это в основном то, что делает мой образец кода, не так ли? Есть ли какая-то существенная разница? Возможно, у тебя есть кое-что, о чем я не знаю. Спасибо, что поделились, если так. знак равно –

1

Вы должны сделать это в функции 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

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

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 
} 

теперь вы можете обновить DataGridView ...

После обновления необходимо установить selecvted строку:

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

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

Смежные вопросы