为什么DataColumn.Caption不起作用?

我正在尝试创建一个DataTable并将其绑定到DataGridView 。 它可以工作,但我无法通过Caption属性设置列标题。 它使用ColumnName (“City”)显示标题。 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属性的用途。 但是,这并不意味着控制制造商必须使用标题属性。 在这种情况下,微软没有这样做(虽然他们真的应该这样做)。 您可以将代码修改为:

 ///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); }