Почему DataColumn.Caption не работает?

Я пытаюсь создать DataTable и привязать его к DataGridView . Он работает, но я не могу устанавливать заголовки столбцов через свойство Caption . Вместо этого он отображает заголовки, используя ColumnName («Город»). MSDN говорит, что

«Вы можете использовать свойство Caption для отображения описательного или дружественного имени для DataColumn».

Вот мой код:

 DataColumn dc = new DataColumn("City", typeof(string)); dc.Caption = "Город"; DataTable dt = new DataTable(); dt.Columns.Add(dc); DataRow row = dt.NewRow(); row["City"] = "Moscow"; dt.Rows.Add(row); datagridview.DataSource = dt; 

Ну, MSDN прав. Это свойство Caption . Однако это не означает, что руководители должны использовать свойство caption. В этом случае Microsoft этого не делала (хотя они действительно должны были). Вы можете изменить свой код на это, хотя:

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

Я думаю, что когда вы привязываетесь к DataTable, DataGridView не использует свойство Caption. Он работает только при привязке к DataSet.

Вы можете вручную изменить заголовки столбцов следующим образом:

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

Вы должны попробовать следующее:

 datagridView.Columns[0].HeaderText = "Title Goes Here."; 

Вы можете сделать это для количества добавленных столбцов. Только индекс изменится.

в коде vb.net:

 Dim dt As New DataTable dt.Columns.Add("col1").Caption = "Your Header Text" 'and add more columns with .caption GridView1.DataSource = dt For Each col As DataColumn In dt.Columns GridView1.Columns(col.ColumnName).HeaderText = col.Caption Next 

@aquinas, это работает для меня

 foreach (DataGridViewColumn col in dataGridView1.Columns) { col.HeaderText = dt.Columns[col.Name].Caption; } 
  foreach (DataTable dataTable in dataSet.Tables) { form1.Controls.Add(new LiteralControl(String.Format("

{0}

", dataTable.TableName))); GridView grid = new GridView(); grid.AllowPaging = false; grid.AutoGenerateColumns = false; foreach (DataColumn col in dataTable.Columns) { grid.Columns.Add(new BoundField { DataField = col.ColumnName, HeaderText = col.Caption }); } grid.DataSource = dataTable; grid.DataBind(); form1.Controls.Add(grid); }