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
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];
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;
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];
}