18 votes

Pourquoi DataColumn.Caption ne fonctionne-t-il pas?

Je suis en train de créer un DataTable et de le lier à un DataGridView. Cela fonctionne, mais je ne peux pas définir les en-têtes de colonnes via la propriété Caption. Il affiche les en-têtes en utilisant le ColumnName ("City") à la place. MSDN dit que

"Vous pouvez utiliser la propriété Caption pour afficher un nom descriptif ou convivial pour une DataColumn."

Voici mon code :

DataColumn dc = new DataColumn("City", typeof(string));
dc.Caption = ""; 

DataTable dt = new DataTable();
dt.Columns.Add(dc); 

DataRow row = dt.NewRow(); 
row["City"] = "Moscou";
dt.Rows.Add(row);

DataGridView.DataSource = dt;

31voto

aquinas Points 10517

Eh bien, MSDN a raison. C'est à cela que sert la propriété Caption. Cependant, cela ne signifie pas que les fabricants de contrôles doivent utiliser la propriété de légende. Dans ce cas, Microsoft ne l'a pas fait (bien qu'ils auraient vraiment dû le faire). Vous pouvez cependant modifier votre code comme ceci :

///snip

dataGridView1.DataSource = dt;

foreach (DataGridViewColumn col in dataGridView1.Columns) {
  col.HeaderText = dt.Columns[col.HeaderText].Caption;
}

6voto

Nick Bray Points 1865

Je pense que lorsque vous liez à un DataTable, le DataGridView n'utilise pas la propriété Caption. Cela fonctionne uniquement lorsque vous liez à un DataSet.

Vous pouvez modifier manuellement les en-têtes de colonne comme ceci:

dataGridView.Columns[i].HeaderText = dt.Columns[i].Caption;

1voto

TriumphTruth Points 51

Vous devriez essayer ceci :

datagridView.Columns[0].HeaderText = "Le titre va ici.";

Vous pouvez faire ceci pour le nombre de colonnes que vous avez ajoutées. Seul l'index changera.

1voto

s.h yadegari Points 11

Dans le code vb.net :

Dim dt As New DataTable
dt.Columns.Add("col1").Caption = "Votre texte d'en-tête"
'et ajoutez d'autres colonnes avec .caption
GridView1.DataSource = dt

For Each col As DataColumn In dt.Columns
    GridView1.Columns(col.ColumnName).HeaderText = col.Caption
Next

1voto

P.A. SOW Points 23

@aquinas, cela fonctionne pour moi

foreach (DataGridViewColumn col in dataGridView1.Columns) {
  col.HeaderText = dt.Columns[col.Name].Caption;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X