2009-05-22 2 views
1

Я использую DataGridView в приложении WinForm для отображения таблицы данных. Все работает отлично, за исключением свойства Caption DataColumn. Я попытался установить свойство Caption, но кажется, что DataGridView использует имя DataColumn в качестве заголовка вместо значения свойства Caption?Как настроить подпись для DataGridView

Имейте Google для этого и, похоже, это свойство caption намеренно отключено.

Приложение для WinForm является локализованным, и мне нужно показать подпись на китайском языке. Кто-нибудь знает, как я могу это сделать?

Вот мой код для создания таблицы данных

// Create a new DataTable. 
DataTable table = new DataTable("Payments"); 

// Declare variables for DataColumn and DataRow objects. 
DataColumn column; 
DataRow row; 

// Create new DataColumn, set DataType, 
// ColumnName and add to DataTable.  
column = new DataColumn(); 
column.DataType = System.Type.GetType("System.Int32"); 
column.ColumnName = "id"; 
column.ReadOnly = true; 
column.Unique = true; 
column.Caption = LocalizedCaption.get("id") //LocalizedCaption is my library to retrieve the chinese caption 

// Add the Column to the DataColumnCollection. 
table.Columns.Add(column); 


// Create three new DataRow objects and add them to the DataTable 
for (int i = 0; i <= 2; i++) 
{ 
    row = table.NewRow(); 
    row["id"] = i; 
    table.Rows.Add(row); 
} 

//assign the DataTable as the datasource for a DataGridView 
dataGridView1.DataSource = table; 

ответ

1

Это работает для меня:

private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) 
{ 
    var dGrid = (sender as DataGrid); 
    if (dGrid == null) return ; 
    var view = dGrid.ItemsSource as DataView; 
    if (view == null) return; 
    var table = view.Table; 
    e.Column.Header = table.Columns[e.Column.Header as String].Caption; 
} 
3

У вас есть несколько вариантов. Вот быстрое решение, которое должно работать, просто добавьте это в конце вашего блока кода:

 //Copy column captions into DataGridView 
     for (int i = 0; i < table.Columns.Count; i++) { 
      if (dataGridView1.Columns.Count >= i) { 
       dataGridView1.Columns[i].HeaderText = table.Columns[i].Caption; 
      } 
     } 

Как вы можете видеть, это просто копирует существующие подписи столбцов в правильной HeaderText свойство каждого столбца DataGridView. Это предполагает, что в DataGridView не существует предыдущих столбцов, прежде чем вы привяжете DataTable.

Смежные вопросы