2013-01-10 27 views
12

Próbuję utworzyć DataTable i powiązać go z DataGridView. Działa, ale nie mogę ustawić nagłówków kolumn za pomocą właściwości Caption. Wyświetla nagłówki, używając zamiast tego ColumnName ("Miasto"). MSDN mówi, żeDlaczego DataColumn.Caption nie działa?

„Można użyć właściwości Caption wyświetlać opisową lub przyjazną nazwy dla DataColumn”.

Oto mój kod:

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; 

Odpowiedz

22

Cóż, MSDN ma rację. Właśnie do tego służy właściwość Caption. Nie oznacza to jednak, że twórcy kontroli muszą używać własności caption. W tym przypadku Microsoft tego nie zrobił (choć tak naprawdę powinien). Można modyfikować swój kod do tego jednak:

///snip 

dataGridView1.DataSource = dt; 

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

To nie działa, jeśli twoja dataTable pochodzi z mocno wpisanego zestawu danych. Myślałem, że jest błąd, że napisu nie można odzyskać z kodu; np. dt.Columns (n) .Caption faktycznie pobiera dt.Columns (n) .ColumnName, mimo że wyraźnie ustawić Caption, aby być różnym od Name w projektancie xsd. – joedotnot

+0

Myślę, że powinieneś użyć 'dt.Columns [col.DataPropertyName] .Caption' zamiast tego. To zapewni, że jest on połączony z poprawną kolumną w 'DataTable'. –

4

Myślę, że jeśli wiążą się z DataTable, DataGridView nie wykorzystuje właściwość Caption. Działa tylko wtedy, gdy łączysz się z DataSet.

Można modyfikować nagłówki kolumn ręcznie tak:

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

Należy spróbować tego:

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

Można to zrobić za liczbę kolumn dodanych. Zmieni się tylko indeks.

1

w kodzie 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 
0

@aquinas, to działa na mnie

foreach (DataGridViewColumn col in dataGridView1.Columns) { 
    col.HeaderText = dt.Columns[col.Name].Caption; 
} 
-1
  foreach (DataTable dataTable in dataSet.Tables) 
     { 
      form1.Controls.Add(new LiteralControl(String.Format("<h1>{0}</h1>", 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); 
     } 
+1

Czy mógłbyś wyjaśnić ten kod? [Z recenzji] (http://stackoverflow.com/review/low-quality-posts/12536163) –