c #, Установить формат столбца datagridview после того, как источник данных был установлен - PullRequest
3 голосов
/ 28 августа 2009

У меня есть сетевое представление данных, которое я заполнил программно, и мне было интересно, как я могу заставить один из столбцов соответствовать указанному формату - "C2".

Можно ли это сделать после назначения источника данных?

Приветствие.

Ответы [ 3 ]

3 голосов
/ 22 мая 2014

Роб отвечает за GridView (веб-элемент управления), а не DataGridView (элемент управления winforms).

Я адаптировал его ответ для winforms.

var persons = new[] {new {name = "aaa", salary = 40000}, 
                 new  {name = "aaa", salary = 40000}, 
                 new  {name = "aaa", salary = 40000}, 
                 new  {name = "aaa", salary = 40000}};

DataGridView1.AutoGenerateColumns = false;

var NameField = new DataGridTextBoxColumn();

NameField.HeaderText = "Name";
NameField.DataPropertyName = "name";
DataGridView1.Columns.Add(NameField);

var SalaryField = new DataGridViewTextBoxColumn();
SalaryField.HeaderText = "Salary";
SalaryField.DataPropertyName = "salary";
SalaryField.DefaultCellStyle.Format = "{0:c2}";
DataGridView1.Columns.Add(SalaryField);

DataGridView1.DataSource = persons;

На что обратить внимание:

  1. Источник данных устанавливается в конце определения столбца - это потому что DataGridView будет автоматически связывать данные, когда его данные установлены.
  2. Для столбцов установлено значение DataGridViewTextBoxColumns. Это стандартный способ отображения текстовой информации в DataGridView. Если вы используете DataGridViewColumn, тогда он не будет знать, как отобразить данные.
3 голосов
/ 28 августа 2009
       var persons = new[] {new {name = "aaa", salary = 40000}, 
                     new  {name = "aaa", salary = 40000}, 
                     new  {name = "aaa", salary = 40000}, 
                     new  {name = "aaa", salary = 40000}};


    GridView1.DataSource = persons;
    GridView1.AutoGenerateColumns = false;

    var NameField = new BoundField();

    NameField.HeaderText = "Name";
    NameField.DataField = "name";
    GridView1.Columns.Add(NameField);

    var SalaryField = new BoundField();
    SalaryField.HeaderText = "Salary";
    SalaryField.DataField = "salary";
    SalaryField.DataFormatString = "{0:c2}";
    SalaryField.HtmlEncode = false;
    GridView1.Columns.Add(SalaryField);


    GridView1.DataBind();
2 голосов
/ 19 декабря 2011

Вы также можете сделать это в grid_ColumnAdded обработчике событий вот так.

  if (e.Column.HeaderText == "YourColumnHeaderText") 
    {
     e.Column.DefaultCellStyle.Format = "C2";
    }
...