【问题标题】:How to set unbound datagridview column cell to currency in c#如何在c#中将未绑定的datagridview列单元格设置为货币
【发布时间】:2018-04-23 04:01:22
【问题描述】:

我有这个未绑定的数据网格视图,它在表单加载期间添加列;

这里是代码;

private void loadfields()
        {
            dgvbulkentries.ColumnCount = 15;
            dgvbulkentries.Columns[0].Name = "ID No";
            dgvbulkentries.Columns[0].Width = 80;
            dgvbulkentries.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvbulkentries.Columns[1].Name = "Surname";
            dgvbulkentries.Columns[1].Width = 150;
            dgvbulkentries.Columns[2].Name = "First Name";
            dgvbulkentries.Columns[2].Width = 150;
            dgvbulkentries.Columns[3].Name = "Name Extn";
            dgvbulkentries.Columns[3].Width = 40;
            dgvbulkentries.Columns[4].Name = "Middle Name";
            dgvbulkentries.Columns[4].Width = 150;
            dgvbulkentries.Columns[5].Name = "Course";
            dgvbulkentries.Columns[5].Width = 110;
            dgvbulkentries.Columns[6].Name = "Year";
            dgvbulkentries.Columns[6].Width = 40;
            dgvbulkentries.Columns[6].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvbulkentries.Columns[7].Name = "Street/Block";
            dgvbulkentries.Columns[7].Width = 150;
            dgvbulkentries.Columns[8].Name = "Subdivision";
            dgvbulkentries.Columns[8].Width = 150;
            dgvbulkentries.Columns[9].Name = "Barangay";
            dgvbulkentries.Columns[9].Width = 150;
            dgvbulkentries.Columns[10].Name = "Municipality/City";
            dgvbulkentries.Columns[10].Width = 150;
            dgvbulkentries.Columns[11].Name = "Province";
            dgvbulkentries.Columns[11].Width = 150;
            dgvbulkentries.Columns[12].Name = "GWA";
            dgvbulkentries.Columns[12].Width = 60;
            dgvbulkentries.Columns[12].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            dgvbulkentries.Columns[13].Name = "Units";
            dgvbulkentries.Columns[13].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvbulkentries.Columns[13].Width = 50;
            dgvbulkentries.Columns[14].Name = "Total School Fees";
            dgvbulkentries.Columns[14].Width = 100;
            dgvbulkentries.Columns[14].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            DataGridViewComboBoxColumn sexes = new DataGridViewComboBoxColumn();
            sexes.HeaderText = "Sex";
            sexes.Name = "Sex";
            sexes.MaxDropDownItems = 4;
            sexes.Items.Add("Male");
            sexes.Items.Add("Female");
            dgvbulkentries.Columns.Add(sexes);
            dgvbulkentries.Columns[15].DisplayIndex = 5;
            dgvbulkentries.Columns[15].Width = 80;
            DataGridViewComboBoxColumn ssfapremarks = new DataGridViewComboBoxColumn();
            ssfapremarks.HeaderText = "Remarks";
            ssfapremarks.Name = "Remarks";
            ssfapremarks.MaxDropDownItems = 4;
            ssfapremarks.Items.Add("Enrolled");
            ssfapremarks.Items.Add("Not Enrolled");
            dgvbulkentries.Columns.Add(ssfapremarks);
            dgvbulkentries.Columns[16].Width = 120;
        }

我已经为 datagridview 中的特定列设置了货币文本框的代码。但问题是,当我在单元格中输入数字时,它根本不会改变。

这是我包含的代码;

private void dgvbulkentries_CellEndEdit(object sender, DataGridViewCellEventArgs e)
    {
        dgvbulkentries.Columns[14].DefaultCellStyle.Format = "n";
    }

例如,当我在 datagridview 的特定列中输入数字时,它不会将值格式化为货币格式。我已经按照你的建议做了,但它不起作用

我错过了什么?

【问题讨论】:

  • 查看您错过正确货币格式的代码,即“c”或“c2”。为什么你会在编辑过程中改变它??
  • @TaW 我的回答能解决 OP 的要求吗?
  • 您使用了有效的格式;但我真的不知道要求。在创建字段时,可以而且应该一劳永逸地设置格式,imo,而不是在某些 Cellxxx 事件中。货币应该从一开始就可以使用,即在加载后直接使用。
  • 我试过了,但似乎 OP 正在运行时(如文本框列)在 DGV 中输入值,当我尝试更改格式时在我的系统中没有初始化它但在使用单元格后让它醒来根据要求

标签: c#


【解决方案1】:

this 回答中所述 知道问题后,我认为使用数据网格视图的 CellLeave 事件将解决您的问题

void dataGridView1_CellLeave(object sender, System.Windows.Forms.DataGridViewCellEventArgs e)
{
   dgvbulkentries.Columns[14].DefaultCellStyle.Format = "c2";
   dgvbulkentries.Columns[14].DefaultCellStyle.FormatProvider = CultureInfo.GetCultureInfo("en-GB");
   dgvbulkentries.Columns[14].ValueType = typeof(decimal);
}

【讨论】:

  • 什么都没发生……我错过了什么……?
  • 在初始化 DataGrid 视图时应该试试这个
  • 我已经尝试过加载表单,但没有任何反应。你能给我一点提示吗?
  • 你能说出当你这样做的时候会发生什么吗?
  • 例如,当我在 datagridview 的特定列中输入数字时,它不会将值格式化为货币格式。我已经按照你的建议做了,但它不起作用。请帮忙..
猜你喜欢
  • 2016-08-29
  • 2018-06-21
  • 1970-01-01
  • 1970-01-01
  • 2014-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多