Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why DataColumn.Caption doesn't work?

I am trying to create a DataTable and bind it to a DataGridView. It works, but I can't set columns headers via the Caption property. It displays headers using the ColumnName ("City") instead. MSDN says that

"You can use the Caption property to display a descriptive or friendly name for a DataColumn."

Here is my code:

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;
like image 491
Alex P. Avatar asked Jan 10 '13 21:01

Alex P.


3 Answers

Well, MSDN is right. That is what the Caption property is for. However, that doesn't mean that control makers have to use the caption property. In this case, Microsoft didn't do that (although they really should have). You can modify your code to this though:

///snip

dataGridView1.DataSource = dt;

foreach (DataGridViewColumn col in dataGridView1.Columns) {
  col.HeaderText = dt.Columns[col.HeaderText].Caption;
}
like image 70
aquinas Avatar answered Oct 09 '22 11:10

aquinas


I think when you bind to a DataTable, the DataGridView does not use the Caption property. It only works when you bind to a DataSet.

You can modify the column headers manually like this:

dataGridView.Columns[i].HeaderText = dt.Columns[i].Caption;
like image 40
Nick Bray Avatar answered Oct 09 '22 12:10

Nick Bray


You should try this:

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

You may do this for the number of columns you have added. Only the index will change.

like image 24
TriumphTruth Avatar answered Oct 09 '22 11:10

TriumphTruth