Подтвердить что ты не робот

Почему DataColumn.Caption не работает?

Я пытаюсь создать DataTable и привязать его к DataGridView. Он работает, но я не могу устанавливать заголовки столбцов через свойство Caption. Он отображает заголовки, используя ColumnName ( "Город" ). 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;
4b9b3361

Ответ 1

Хорошо, MSDN прав. Для этого используется свойство Caption. Однако это не означает, что руководители должны использовать свойство caption. В этом случае Microsoft этого не делала (хотя они действительно должны были). Вы можете изменить свой код на это, хотя:

///snip

dataGridView1.DataSource = dt;

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

Ответ 2

Я думаю, что когда вы привязываетесь к DataTable, DataGridView не использует свойство Caption. Он работает только при привязке к DataSet.

Вы можете вручную изменить заголовки столбцов следующим образом:

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

Ответ 3

Вы должны попробовать следующее:

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

Вы можете сделать это для количества добавленных столбцов. Изменяется только индекс.

Ответ 4

в коде 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

Ответ 5

@aquinas, это работает для меня

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

Ответ 6

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