OVH Cloud OVH Cloud

Gérer colonnes d'un datagrid

4 réponses
Avatar
[- bernard - ]
Bonsoir, je m'explique:
comment faire pour gérer facilement dans un datagrid la longueur d'un
champ ?
j'aimerais n'afficher que 30 caractères sur 100 pour finir avec "..."
par exemple....
ou n'afficher (temporairement) que des étoiles dans le champ...
si quelqu'un a une idée....

merci a tous !

--
[ - Bernard - ]
Carpe Diem

4 réponses

Avatar
Norm
coté aspx
utilises des <asp:TemplateColums> pour ton datagrid
dans le Itemtemplate tu places un label ex: lbltest

code behind
dans l'évenement item_databound du datagrid
tu affectes le label
If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType ListItemType.AlternatingItem Then

CType(e.Item.FindControl("lbltest"), System.Web.UI.WebControls.Label).Text left(e.Item.DataItem("Nom"),30) & " ..."

End if


"[- bernard - ]" <@> a écrit dans le message de
news:
Bonsoir, je m'explique:
comment faire pour gérer facilement dans un datagrid la longueur d'un
champ ?
j'aimerais n'afficher que 30 caractères sur 100 pour finir avec "..."
par exemple....
ou n'afficher (temporairement) que des étoiles dans le champ...
si quelqu'un a une idée....

merci a tous !

--
[ - Bernard - ]
Carpe Diem



Avatar
Eric COUTIER
[- bernard - ] a écrit :
Bonsoir, je m'explique:
comment faire pour gérer facilement dans un datagrid la longueur d'un
champ ?
j'aimerais n'afficher que 30 caractères sur 100 pour finir avec "..."
par exemple....
ou n'afficher (temporairement) que des étoiles dans le champ...
si quelqu'un a une idée....

merci a tous !



J'ai déjà fait cà. Demain, j'essaierai de penser à publier le code
source sur le forum. En bref, je crois qu'il faut jouer avec un ITemplate.

Salutations.
Avatar
[- bernard - ]
[- bernard - ] a formulé la demande :
Bonsoir, je m'explique:
comment faire pour gérer facilement dans un datagrid la longueur d'un champ ?
j'aimerais n'afficher que 30 caractères sur 100 pour finir avec "..." par
exemple....
ou n'afficher (temporairement) que des étoiles dans le champ...
si quelqu'un a une idée....

merci a tous !



merci pour vos réponses.....

bon dev ...

--
[ - Bernard - ]
Carpe Diem
Avatar
reituoccire
> J'ai déjà fait cà. Demain, j'essaierai de penser à publier le code
source sur le forum. En bref, je crois qu'il faut jouer avec un ITemplate.


Deux classes:
-ShortedLabel, qui permet en plus de générer un alt text au survol de
la souris
-ShortedItemTemplate

Le problème c'est que je constitue mon DataGrid au sein du code
également(et pas depuis WebMatrix).

Exemple:
TemplateColumn tc = new TemplateColumn();
tc.ItemTemplate = new ShortedItemTemplate("CustomerName", Page);
tc.HeaderText = "Nom du client";
monDataGrid.Columns.Add(tc);
----------------------------------------------------------------------
public class ShortedLabel : Label {
protected int troncateAt;
protected static int DEFAULT_TRONCATE = 40;
public ShortedLabel() : base() {
troncateAt = DEFAULT_TRONCATE;
}
protected override void Render (HtmlTextWriter output) {
String altText;
String textToOutput;
if (Text.Length > troncateAt) {
altText = " title="" + Text + """;
textToOutput = Text.Remove(troncateAt, Text.Length -troncateAt) +
"...";
}
else {
altText = "";
textToOutput = Text;
}
output.WriteLine("<span" + altText + ">" + textToOutput +
"</span>");
}
}//ShortedLabel


public class ShortedItemTemplate : ITemplate {
private String columnName;
private Page page;
public ShortedItemTemplate (string columnName, Page page) {
this.columnName = columnName;
this.page = page;
}

public void InstantiateIn(Control container) {
ShortedLabel label;
label = new ShortedLabel();
label.DataBinding += new EventHandler(bind);
container.Controls.Add(label);
}
public void bind(object sender, EventArgs e) {
ShortedLabel label = (ShortedLabel)sender;
DataGridItem container = (DataGridItem)(label.NamingContainer);
label.Text = ((DbDataRecord)container.DataItem)[columnName] "";
}
}//ShortedItemTemplate