7
votes

Swap Rows dans DataGridView en C #


J'ai un DataGridView qui n'est pas lié à DataTable.
Et je veux échanger par exemple les 1er et 10ème rangées dans DataGridView.
J'utilise ce code pour cela xxx

mais je veux savoir s'il y a un moyen simple de le faire ??


1 commentaires

Ce n'est pas bon, vous n'avez pas besoin d'appeler valeur.tostring () et ainsi de suite, stockez simplement la valeur dans un objet. Ce sera générique, contrairement à votre code, qui ne fonctionne que avec des chaînes.


6 Réponses :


4
votes

salut,
Avez-vous essayé:

DataGridViewRow temp =grid.Rows[row_1];
grid.Rows[row_1] = grid.Rows[row_10];
grid.Rows[row_10] = temp;


1 commentaires

Je reçois le message suivant: DataGridViewrowCollection.Cet [int] ne peut pas être attribué - il est lu que



2
votes

Essayez:

DataGridViewRow temp = grid.Rows[row_1].Clone();
grid.Rows[row_1] = grid.Rows[row_10].Clone();
grid.Rows[row_10] = temp;


0 commentaires

9
votes
var r10 = grid.Rows[9];
var r1 = grid.Rows[0];
grid.Rows.Remove(r1);
grid.Rows.Remove(r10);
grid.Rows.Insert(0, r10);
grid.Rows.Insert(9, r1);

0 commentaires

1
votes

Tout comme Ajout:

Si vous avez besoin de l'échange plus souvent, placez la méthode ci-dessus que vous préférez la plupart dans sa propre classe et appelez la méthode (E.G. Interchange ())


0 commentaires

4
votes

Je voulais commenter cela.

Pendant qu'il - il a été possible de faire un échange droit en C # avant, comme Smoore / Gabriels - P>

DataGridViewRow temp = grid.Rows[row_1].Clone();
grid.Rows[row_1] = grid.Rows[row_10].Clone();
grid.Rows[row_10] = temp;


0 commentaires

0
votes

Cette méthode fonctionne bien:

private static void SwapRows(DataGridView grid, int row1, int row2)
{
  if (row1 != row2 && row1 >= 0 && row2 >= 0 && row1 < grid.RowCount && row2 < grid.RowCount)  
  {
    var rows = grid.Rows.Cast<DataGridViewRow>().ToArray();
    var temp = rows[row1];
    rows[row1] = rows[row2];
    rows[row2] = temp;
    grid.Rows.Clear();
    grid.Rows.AddRange(rows);
  }
}


0 commentaires