2009-01-20 6 views
0

Je voudrais insérer par programme des lignes supplémentaires dans un DataGrid (pour agir comme des sous-titres). J'ai suivi un certain nombre d'articles en ligne (à savoir l'option 3 de http://aspalliance.com/723) mais ils se traduisent tous par l'affichage correct de la ligne, mais sans contenu.Comment puis-je insérer par programme une ligne supplémentaire dans un DataGrid ASP.NET?

Voici la partie importante du code J'utilise:

private void MyDataGrid_ItemCreated(object sender, DataGridItemEventArgs e) 
{ 

    // This method will create a subheading row if needed 
    if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item) 
    { 
     // TableCell 
     TableCell tc = new TableCell(); 
     tc.Controls.Add(new LiteralControl("foo")); 
     tc.ColumnSpan = e.Item.Cells.Count; 

     // DataGridItem 
     DataGridItem di = new DataGridItem(e.Item.ItemIndex + 1, 0, ListItemType.Item); 
     di.Height = new Unit(100, UnitType.Pixel); 
     di.CssClass = "testClass"; 
     di.Controls.Add(tc); 

     // DataGrid Table 
     DataGrid dg = (DataGrid)sender; 
     Table childTable = (Table)dg.Controls[0]; 
     childTable.Rows.Add(di); 
    }  

} 

Il en résulte le balisage suivant généré au bon endroit, mais sans LiteralControl (« foo »)

<tr class="testClass" style="height:100px;"> 
</tr> 

Je voudrais utiliser cette approche plutôt que de manipuler la source de données elle-même. Qu'est-ce qui pourrait mal tourner?

+0

Je viens d'essayer un exemple isolé en utilisant le code que vous avez posté et cela fonctionne très bien. Cela doit être quelque chose à voir avec la config de votre DataGrid ou quelque chose d'ailleurs dans votre code. –

+0

Vous avez raison, merci – tjrobinson

+0

J'ai donné votre réponse à +1 mais j'allais marquer ma propre réponse comme réponse choisie une fois que les 48 heures se sont écoulées - pour ne pas être égoïste, mais parce qu'elle donne un peu plus de détails sur le cause du problème. – tjrobinson

Répondre

2

Problème résolu - quelque part dans les 2500 lignes du code-behind existant, quelque chose masquait la première colonne, supprimant effectivement mon ajout. Quelque chose à surveiller si quelqu'un d'autre a des problèmes similaires.

Edition - Voici le code que j'ai écrit pour contourner le problème d'une manière raisonnable générique:

private void InsertDataGridRow(DataGrid dataGrid, int index, TableCell tc) 
{ 
    DataGridItem di = new DataGridItem(index, 0, ListItemType.Item); 

    // Check which columns are visible 
    bool foundFirstVisibleColumn = false; 
    int numberOfVisibleColumns = 0; 
    foreach (DataGridColumn column in dataGrid.Columns) 
    { 
     if (column.Visible == true) 
     { 
      numberOfVisibleColumns++; 
      foundFirstVisibleColumn = true; 
     } 

     // Add dummy columns in the columns that are hidden 
     if (!foundFirstVisibleColumn) 
     { 
      di.Cells.Add(new TableCell()); 
     } 

    } 

    tc.ColumnSpan = numberOfVisibleColumns; 
    di.Cells.Add(tc); 
    Table t = (Table)dataGrid.Controls[0]; 
    t.Rows.Add(di); 
} 

Et ci-dessus peut être appelé quelque chose comme ceci:

private void MyDataGrid_ItemCreated(object sender, DataGridItemEventArgs e) 
{ 
    // This method will create a subheading row if needed 
    if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item) 
    { 
     TableCell tc = new TableCell(); 
     tc.Controls.Add(new LiteralControl("foo")); 

     InsertDataGridRow(
      (DataGrid)sender, 
      e.Item.ItemIndex + 1, 
      tc); 
    }  

} 
1

Je viens essayé un exemple isolé en utilisant le code que vous avez posté et cela fonctionne très bien. Cela doit être quelque chose à voir avec la config de votre DataGrid ou quelque chose d'ailleurs dans votre code.