2010-04-21 1 views
1

J'ai intégré un contrôle de répéteur dans Gridview. À l'heure actuelle, il affiche des lignes gridview et un en-tête de répéteur pour chaque cas (qu'il y ait ou non des données pour cette ligne particulière dans le contrôle du répéteur). Je souhaite masquer l'en-tête de la ligne gridview et du répéteur lorsqu'il n'y a pas de données présentes pour cette ligne gridview particulière.Répétition de l'imbrication dans Gridview: Masquage de l'en-tête de la ligne gridview et du répéteur en l'absence de données dans le répéteur

Merci, Dans ce cas j'ai traité au niveau du code en filtrant la table de données résultante.

Maintenant, l'autre problème que je suis confronté: J'ai permis à la recherche de personnes sur le gridview à savoir pagesize 3. Lorsque les charges de page, il fonctionne très bien, mais quand je vais à la page 2 il génère l'erreur suivante: index était hors de portée. Doit être non négatif et inférieur à la taille de la collection. Nom du paramètre: index

Vous trouverez ci-dessous le code permettant de remplir la grille, le téléavertisseur et le répéteur de remplissage sur l'événement rowdatabound de la grille.

private void FillGrid() { clsCustomFunctions objShort = nouveau clsCustomFunctions(); grd1.DataSource = objShort.GetAll();
}

protected void grd1_PageIndexChanging(object sender, GridViewPageEventArgs e) 
{ 
    try 
    { 
     FillGrid(); 
     grd1.PageIndex = e.NewPageIndex; 
     grd1.DataBind(); 
    } 
    catch (Exception ex) 
    { 
     lblMsg.Text = ex.Message; 
    } 
} 

protected void grd1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    clsCustomFunctions objShort = new clsCustomFunctions();   
    if (e.Row.RowType == DataControlRowType.DataRow) 
    {    
     ((HtmlTable)e.Row.FindControl("gridTable")).BgColor = "#006699"; 
     Repeater rpt = (Repeater)e.Row.FindControl("rpt1"); 
     rpt.DataSource = objShort.GetResult(Convert.ToInt32(grd1.DataKeys[e.Row.DataItemIndex].Value)); 
     rpt.DataBind(); 
    } 
} 

grd1.DataKeys [e.Row.DataItemIndex] .Value ligne est de lancer erreur. Comment gérer ceci pour passer les valeurs de la page 2 seulement.

Répondre

1

Essayez de gérer l'événement OnRowDataBound de la grille. Cela vous donne un objet GridViewRowEventArgs (disons e).

Vous pouvez ensuite consulter e.Row.DataItem pour obtenir les données auxquelles il est lié afin de vérifier si vous devez masquer l'en-tête.

Vous pouvez utiliser e.RindControl ("RepeaterName") pour que le répéteur puisse être manipulé comme vous le souhaitez.

Questions connexes