2010-09-17 2 views
6

j'ai ce code qui remplit une zone de texte basée sur une cellule de la ligne sélectionnée d'un gridviewPrevent vide données Gridview de remplissage de «   » en boîte de texte

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) 
    { 

     txtComment.Text = row.Cells[14].Text.Trim(); 

    } 

Il affiche   dans la zone de texte txtComment Si la cellule [ 14] n'a pas de données.

Y a-t-il un moyen d'empêcher l'apparition de   lorsqu'il n'y a pas de données dans la cellule de la ligne sélectionnée?


Modifier J'ai essayé et ça n'a pas

if (row.Cells[14].Text.Trim().Length > 1) 
{ 
    txtComment.Text = row.Cells[14].Text.Trim(); 
} 
else 
{ 
    txtComment.Text = row.Cells[14].Text = ""; 
} 

========================= ==========================================

Cela a fonctionné

if (row.Cells[14].Text.Trim()!=" ") 
{ 
    txtComment.Text = row.Cells[14].Text.Trim(); 
} 
else 
{ 
    txtComment.Text = row.Cells[14].Text = ""; 
} 
+0

avez-vous essayé 'row.Cells [14] .Text = string.Empty;' ou '=" ";'? –

+0

J'ai essayé both = string.Vide; et = ""; et j'ai toujours le & nbsp –

Répondre

4

Le problème est que vous accédez à la propriété Text de la cellule HTML plutôt que La colonne de données. La vue de grille doit afficher   dans une cellule de tableau vide afin que cette cellule de tableau soit toujours visible lorsqu'elle est rendue à certains navigateurs. C'est à cause du HTML et n'a rien à voir avec vos données ou votre code;

Ce que vous devez faire est quelque chose comme ceci:

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    DataRow myRow = (DataRow)GridView1.SelectedRow.DataItem; 
    txtComment.Text = myRow[14]; 
} 

Le format pour accéder à la propriété d'élément de données va être un peu différent en fonction de ce que DataItem est en fait, vous pouvez le jeter aux type d'objet qui correspond à votre source de données, puis accédez à ses propriétés en conséquence.

EDIT: J'ai modifié l'exemple de code pour montrer comment transtyper la propriété DataItem en un objet DataRow. Vous devez le convertir en n'importe quel type en tant que DataSource. J'espère que c'est plus clair.

+0

Je reçois ce message d'erreur quand je l'essaye "Impossible d'appliquer l'indexation avec [] à une expression de type 'objet'" –

+0

@JoshuaSlocum: Voir mes modifications ci-dessus, vous devez convertir le DataItem en quel que soit le type d'objet utilisé comme source de données. – CodingGorilla

10

J'ai aussi eu un problème comme celui-ci, et je l'ai trouvé cela utile aussi:

txtComment.Text = row.Cells[14].Text.Replace(" ", ""); 

je l'espère, il peut vous aider :)

+0

mauvaise solution ... là beaucoup d'autres mieux travailler autour ... – elle0087

2

Il n'y a pas besoin d'écrire un code, il suffit d'ajouter HtmlEncode = "false" au Boundfield.

7

Utilisez NullDisplayText = »"

 <asp:BoundField DataField="EmployeeName" HeaderText="Name" NullDisplayText=" "/> 
+0

propre et fonctionne pour moi. – ZeeProgrammer

2

Utilisez ceci:

Server.HtmlDecode() 

Par exemple:

txtComment.Text = Server.HtmlDecode(row.Cells[14].Text); 

Il gère non seulement des espaces, mais aussi d'autres conversions comme esperluette (&) et etc.

Questions connexes