Sélection des lignes par programmation dans DataGridView

je veux sélectionner une rangée de rangées précédemment sélectionnées après un événement mon code est comme ci-dessous.

int currentRow = dgvIcbSubsInfo.CurrentCell.RowIndex;
//code to execute
dgvIcbSubsInfo.Rows[currentRow].Selected = true;

après l'exécution du code de l'aperçu sera comme ci-dessous. mais j'ai besoin d'obtenir le symbole > id = 1272741 (bleu sélection) et pas dans 1272737

enter image description here

19
demandé sur Uthistran Selvaraj 2013-01-29 10:18:38

3 réponses

probablement vous pourriez avoir jeté un oeil à la DataGridView.Propriété CurrentRow, qui est une propriété en lecture seule:

obtient la ligne contenant la cellule courante.

mais dans la section Remarques, il y a écrit:

pour changer la ligne courante, vous devez définir le CurrentCell bien à un cellule dans la rangée désirée.

aussi, de la DataGridView.CurrentCell La propriété, nous constatons que:

lorsque vous changez la valeur de cette propriété, l'événement selection Modified se produit avant l'événement Modifiépar Currentcell. Tout événement modifié par sélection handler accédant à la propriété CurrentCell à ce moment-là obtiendra son valeur précédente.

Donc, il n'est pas nécessaire que vous sélectionnez currentRow becasue il sera sélectionné lorsque vous définissez CurrentCell valeur (sauf si vous avez un code à exécuter à l'intérieur du portée actuelle entre les SelectionChanged et CurrentCellChanged événements). Essayez ceci:

//dgvIcbSubsInfo.Rows[currentRow].Selected = true;
dgvIcbSubsInfo.CurrentCell = dgvIcbSubsInfo.Rows[currentRow].Cells[0];
44
répondu Alex Filipovici 2013-01-29 06:59:43

je pense que vous voulez mettre en surbrillance la ligne. S'il vous plaît essayer de code suivant, je pense que ça pourrait aider:

Color color = dgv.Rows[prevRowIndex].DefaultCellStyle.SelectionBackColor;
dgv.Rows[curRowIndex].DefaultCellStyle.SelectionBackColor = color;
0
répondu mihirj 2013-01-29 06:36:02

essayez ce qui suit pour changer la ligne courante. Étant donné que L'OP n'est pas très claire quant à la nouvelle rangée, mon exemple montre simplement le déplacement de la rangée actuelle à la rangée précédente (s'il y a une rangée précédente). La première ligne de code est facultatif. Vous pouvez aussi hardcode col à 0 (ou une autre colonne) pour utiliser une colonne fixe si vous ne voulez pas utiliser FullRowSelect.

dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
int row = dataGridView.CurrentCell.RowIndex;
int firstRow = dataGridView.Rows.GetFirstRow(DataGridViewElementStates.None);
if (row != firstRow)
{
  row--;
  int col = dataGridView.CurrentCell.ColumnIndex;
  dataGridView.CurrentCell = dataGridView[col, row];
}
0
répondu Goal Man 2018-09-30 03:59:18