2013-01-10 44 views
12

Tôi đang cố gắng tạo một DataTable và liên kết nó với một số DataGridView. Nó hoạt động, nhưng tôi không thể đặt tiêu đề cột qua thuộc tính Caption. Nó hiển thị tiêu đề bằng cách sử dụng ColumnName ("Thành phố") để thay thế. MSDN nói rằngTại sao DataColumn.Caption không hoạt động?

"Bạn có thể sử dụng thuộc tính Caption để hiển thị một mô tả hoặc thân thiện tên cho một DataColumn."

Đây là mã của tôi:

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; 

Trả lời

22

Vâng, MSDN là đúng. Đó là những gì các tài sản Caption là dành cho. Tuy nhiên, điều đó không có nghĩa là các nhà sản xuất điều khiển phải sử dụng thuộc tính phụ đề. Trong trường hợp này, Microsoft đã không làm điều đó (mặc dù họ thực sự cần phải có). Bạn có thể thay đổi mã của bạn để mặc dù điều này:

///snip 

dataGridView1.DataSource = dt; 

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

Nó không làm việc nếu dataTable của bạn xuất phát từ tập dữ liệu được nhập mạnh mẽ. Tôi nghĩ rằng có một lỗi trong đó chú thích không thể được lấy từ mã; Ví dụ: dt.Columns (n) .Caption thực sự truy lục dt.Columns (n) .ColumnName mặc dù tôi đã đặt rõ ràng Chú thích khác với Tên trong trình thiết kế xsd. – joedotnot

+0

Tôi nghĩ bạn nên sử dụng 'dt.Columns [col.DataPropertyName] .Caption' để thay thế. Điều này sẽ đảm bảo nó được liên kết với cột đúng trong 'DataTable'. –

4

Tôi nghĩ rằng khi bạn liên kết với một DataTable, DataGridView không sử dụng thuộc tính Caption. Nó chỉ hoạt động khi bạn liên kết với một DataSet.

Bạn có thể sửa đổi các tiêu đề cột bằng tay như thế này:

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

Bạn nên cố gắng này:

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

Bạn có thể làm điều này cho số lượng cột mà bạn đã thêm. Chỉ có chỉ số sẽ thay đổi.

1

trong mã 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, công trình này cho tôi

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

Bạn có thể giải thích mã này không? [Từ đánh giá] (http://stackoverflow.com/review/low-quality-posts/12536163) –

Các vấn đề liên quan