Bonjour à tous,
Cela fait 3 jours que j'essaie de modifier mon code pour essayer d'insérer une ligne dans le gridview juste avant celle qui est en train d 'être ajoutée dans le rowdatabound.
Je m'explique avec un exemple :
Ma requête trouve 6 lignes à mettre dans le gridview représentant 6 enregistrements de 3 types différents (A, B ou C)
l.1: A
l.2: A
l.3: B
l.4: B
l.5: C
l.6: C
Je cherche à faire la somme des enregistrements de même type, puis à insérer une ligne représentant cette somme avant le prochain type. Dans cette exemple :
l.1: A
l.2: A
new_line: (A+A)
l.3: B
l.4: B
new_line: (B+B)
l.5: C
l.6: C
new_line: (C+C)
Le code proposé fait ceci:
l.1: A
l.2: A
l.3: B
newline: (A+A)
l.4: B
l.5: C
newline: (B+B)
l.6: C
Pourquoi? Car quand je compare le type de la ligne en cours dans le rowdatabound avec celui de la ligne précédente (que je sauvegarde dans une var temporaire) et qu'il sont différents, j'insère ma nouvelle ligne, mais l'insertion s'effectue toujours après la ligne en cours. J'aimerai l'insérer avant la ligne en cours.
Voilà comment je procède:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 protected void grid_list_RowDataBound(object sender, GridViewRowEventArgs e) { double test = 0; if (e.Row.RowType == DataControlRowType.DataRow) { try { if (e.Row.RowIndex == 0) Tmp_ref = e.Row.Cells[0].Text; else { if(Tmp_ref != e.Row.Cells[0].Text){ Table table = e.Row.Parent as Table; CreateRow(table,e.Row.RowIndex); } Tmp_ref = e.Row.Cells[0].Text; } } catch (NullReferenceException) { } } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 private void CreateRow(Table table,int index) { GridViewRow row = new GridViewRow(1, 1, DataControlRowType.DataRow, DataControlRowState.Insert); row.Cells.Add(CreateColumn("New Row ", index, 1)); table.Rows.Add(row); }Je commence sérieusement à me demander si c'est possible à réaliser donc si quelqu'un de plus calé que moi à une idée je suis preneur, j'ai déjà essayé tellement de choses et d'autres ( AddAt[index] , RowCreated, fonction qui balaye de gridview etc etc ) .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 private TableCell CreateColumn(string entete, double valeur, int span) { TableCell cell = new TableCell(); cell.ColumnSpan = span; cell.Text = entete + valeur.ToString(); return cell; }
Cordialement,
Lamarch'
Partager