2008-09-22 7 views
2

Je crée une gridView qui permet d'ajouter de nouvelles lignes en ajoutant les commandes nécessaires à l'insertion dans le FooterTemplate, mais quand le ObjectDataSource n'a pas de documents, j'ajouter une ligne fictive comme FooterTemplate est seulement affiché quand il y a des données.masquer une ligne GRIDVIEW dans asp.net

Comment puis-je cacher cette rangée factice? J'ai essayé de définir e.row.visible = false sur RowDataBound mais la ligne est toujours visible.

Répondre

0

Ceci est l'utilisation incorrecte du contrôle GridView. Le contrôle GridView a un InsertRow spécial qui est l'endroit où vos contrôles devraient aller.

+0

Je veux toujours le pied de page présentée comme que est où mes contrôles d'insertion sont contenues, je veux cacher le DummyRow que j'ajoute. – Nicholas

0

Peut-être essayer:

e.Row.Height = Unit.Pixel(0); 

Ce n'est pas la bonne réponse, mais il pourrait fonctionner en attendant jusqu'à ce que vous obtenez la bonne réponse.

+0

Ne fonctionne pas, affiche toujours la ligne vide :-( – Nicholas

0

Peut-être utiliser CSS pour définir l'affichage aucun ?!

1

Je pense que c'est ce que vous avez besoin:

<asp:GridView ID="grid" runat="server" AutoGenerateColumns="false" ShowFooter="true" OnRowDataBound="OnRowDataBound"> 
    <Columns> 
     <asp:TemplateField HeaderText="headertext"> 
      <ItemTemplate> 
       itemtext 
      </ItemTemplate> 
      <FooterTemplate> 
       insert controls 
      </FooterTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

et codebehind:

protected void OnRowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     e.Row.Attributes["style"] = "display:none"; 
    } 
} 

Mais je ne comprends pas pourquoi vous ajoutez vos « insérer des contrôles » au pied de page au lieu de placer eux en dessous de la grille.

3

Vous pouvez gérer l'événement Databound de gridview et masquer la ligne factice. (Ne pas oublier d'attribuer la propriété d'événement dans le code ASPX):

protected void GridView1_DataBound(object sender, EventArgs e) 
    { 
     if (GridView1.Rows.Count == 1) 
      GridView1.Rows[0].Visible = false; 
    } 
0

GridView a une propriété particulière pour accéder à pied Row, nommé "FooterRow"

Ensuite, vous essayez froid yourGrid.FooterRow. Visible = faux;

0

Je l'ai fait lors d'un travail précédent, mais puisque vous pouvez ajouter des lignes, je l'ai toujours visible dans la ligne de pied de page. Pour faire en sorte que la grille se présente, je lié une rangée vide du type qui est normalement lié

dim row as Datarow = table.NewRow() 
table.AddRow(row) 
gridView.DataSource = table 
gridView.Databind() 

il a toutes les colonnes et dont vous avez besoin. Vous pouvez accéder au pied de page en tirant ceci:

'this will get the footer no matter how many rows there are in the grid. 

Dim footer as Control = gridView.Controls(0).Controls(gridView.Controls(0).Controls.Count -1) 

puis d'accéder à l'un des contrôles dans le pied de page que vous allez faire:

Dim cntl as Control = footer.FindControl(<Insert Control Name Here>) 

Je suppose que vous seriez en mesure de faire un:

footer.Visible = false 

pour rendre la ligne de bas de page invisible.

J'espère que cela aide!

Modifier Je viens de comprendre ce que vous avez dit. Je supprime fondamentalement la ligne quand j'en ajoute une nouvelle, mais pour ce faire, vous devez vérifier s'il y a d'autres lignes, et s'il y en a, vérifiez s'il y a des valeurs dedans.

Pour supprimer la ligne fictive faire quelque chose comme ceci:

If mTable.Rows.Count = 1 AndAlso mTable.Rows(0)(<first column to check for null value>) Is DBNull.Value AndAlso mTable.Rows(0)(<second column>) Is DBNull.Value AndAlso mTable.Rows(0)(<thrid column>) Is DBNull.Value Then 
mTable.Rows.Remove(mTable.Rows(0)) 
End If 
mTable.Rows.Add(row) 
gridView.Datasource = mTable 
gridView.Databind() 
0

Pour le rendre visible, il suffit d'utiliser:

Gridview.Rows.Item(i).Attributes.Add("style", "display:block") 

Et pour le rendre invisible

Gridview.Rows.Item(i).Attributes.Add("style", "display:none") 
0

Pourquoi vous n'utilisez pas le EmptyDataTemplate? Il semble fonctionner à merveille, même si je ne l'utilise depuis quelques jours ...

0

Vous devez utiliser DataKeyNames dans votre GridView:

<asp:GridView ID="GridView1" runat="server" DataKeyNames="FooID">

Et puis le récupérer sur votre code: GridView1.DataKeys[0].Value.ToString()

Où « 0 » est le numéro de la ligne que vous souhaitez obtenir le « fooid »

3

S'il vous plaît essayer le

suivant
protected void GridView1_DataBound(object sender, EventArgs e) 
    { 
     GridView1.Rows[0].Visible = false; 
    } 
+0

Cela a caché mon GV entier – SearchForKnowledge

-4

Il peut se faire facilement par SQL

USE YourdatabaseName select * from TableName where Column_Name <> '' 
+4

-1 La question n'a rien à voir avec SQL, il essaie de travailler avec un GridView. – JustinDoesWork

0

Si vous ne voulez pas afficher les données lorsque la colonne/ligne est nulle:

if (!String.IsNullOrEmpty(item.DataName)) 
{ 
    e.Row.Visible = false; 
} 
Questions connexes