2015-03-10 3 views
0

У меня есть Gridview с 30 строками и 12 столбцами с мультиселекцией true и режимом выбора: выбор ячейки. Я хочу сделать следующее:Изменение цвета нескольких выделенных ячеек в строке DataGridView

a) Когда пользователь выбирает ячейки, цвет ячеек должен меняться. Однако я хочу ограничить пользователя, чтобы он мог выбирать несколько ячеек из одной строки только в то время, когда пользователь не может выбирать несколько ячеек в разных строках.

b) Если пользователь выбирает несколько ячеек в строке, то цвет меняется, а ячейка остается выбрана до тех пор, пока пользователь не переустановит ее, чтобы изменить цвет, чтобы удалить изменение цвета (отменить выбор цвета по умолчанию). Прямо сейчас, если пользователь выбирает определенные ячейки, цвет меняется, но когда пользователь перемещается для выбора других ячеек, тогда выбранные ранее ячейки меняют цвет по умолчанию (автоматически отменяет выбор).

Прямо сейчас я могу изменить цвет выбранных ячеек, но я не могу выполнить вышеуказанные условия.

foreach (DataGridViewRow row in dataGridView1.Rows) 
      { 
       foreach (DataGridViewColumn col in dataGridView1.Columns) 
       { 

        dataGridView1.Rows[row.Index].DefaultCellStyle.SelectionBackColor = Color.Pink; 

       } 
      } 

[Update]: Я пробовал это, но до сих пор не в состоянии решить мою проблему

private void dataGridView1_CellClick(object sender, 
     DataGridViewCellEventArgs e) 
    { 
     List<DataGridViewRow> rowCollection = new List<DataGridViewRow>(); 



     foreach (DataGridViewCell cell in dataGridView1.SelectedCells) 
     { 
      rowCollection.Add(dataGridView1.Rows[cell.RowIndex]); 

     } 




     foreach (DataGridViewRow row in rowCollection) 
     { 

       dataGridView1.Rows[row.Index].DefaultCellStyle.SelectionBackColor = Color.Pink; 


     } 

    } 

ответ

0

Я рекомендую смотреть на события по умолчанию для DataGridViews. Из звуков ваших условий вам понадобится список выбранных ячеек (или, возможно, уже есть флаг объекта Cell, который вы можете оценить), и вам нужно добавить обработчик событий для события Cell Click. Таким образом, вы можете проверить строку ячейки в списке 'selectedCells' против щелчка новой ячейки. Если они одинаковы, вы можете покрасить эту ячейку. Вы также можете проверить наличие этой ячейки в списке уже, указав, что вы хотите удалить раскраску.

https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellclick%28v=vs.110%29.aspx

Надеется, что это помогает! :)

0

а) Вы можете сделать это просто с DataGridView «s SelectionChanged события:

private void dataGridView1_SelectionChanged(object sender, EventArgs e) 
{ 
    int currentRowIndex = dataGridView1.CurrentCell.RowIndex; 

    foreach (DataGridViewCell cell in dataGridView1.SelectedCells) 
     if (cell.RowIndex != currentRowIndex) 
      cell.Selected = false; 
} 

б) Ваша проблема не ясно для меня. Это похоже на а). Кстати, вы можете выбрать несколько ячеек в DataGridView, удерживая клавишу CTRL.

И, наконец, не используйте DefaultCellStyle.SelectionBackColor, это довольно медленно. Я предлагаю вам обработать событие DataGridViewCellPainting для цветных ячеек:

private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) 
{ 
    if ((e.State & DataGridViewElementStates.Selected) != 0) 
    { 
     e.CellStyle.SelectionBackColor = Color.Pink; 
    } 
} 
Смежные вопросы