绑定DataGridView时不应用DefaultCellStyle格式

问题描述

| 我有一个通过绑定源将datagridview绑定到datatable的代码
_bind.DataSource = Table;
lGrid.DataSource = _bind;
在DataBindingComplete事件中,我为某些列设置了DefaultCellStyle:
void lGrid_DataBindingComplete(object sender,DataGridViewBindingCompleteEventArgs e)
{
    if (e.ListChangedType == ListChangedType.Reset)
        lGrid.Columns[0].DefaultCellStyle.Format = \"+#,##0;-#,##0;0\";
}
此时,表仍为空。因此,稍后将行添加到表中并很好地反映在DataGridView中时,由于某种原因,该格式未应用于列0的单元格。 我检查了CellFormatting事件中的格式:
private void lGrid_CellFormatting(object sender,DataGridViewCellFormattingEventArgs args)
{
    if (args.ColumnIndex == lGrid.Columns[0].Index)
    {
        string s1 = lGrid.Columns[0].DefaultCellStyle.Format;
        string s2 = lGrid[0,args.RowIndex].Style.Format;
    }
}
和s1返回我正确的格式,但s2只是一个空字符串。 您能告诉我我在做什么错,以及如何格式化我的单元格。 谢谢!     

解决方法

尝试在CellFormatting事件中格式化单元格样式。
private void lGrid_CellFormatting(object sender,DataGridViewCellFormattingEventArgs args) 
{
    if (args.ColumnIndex == 0)
    {
        args.Value = // format Value here
        args.FormattingApplied = true;
    }
}
    ,这可能是由于DataTable Columns数据类型设置为string(默认情况下)引起的。 因此,您可以将DataTable Columns数据类型更改为数字: 使用列创建DataTable时
Table.Columns.Add(ColumnName,typeof(double));
稍后更改日期类型
Table.Columns[0].DataType = typeof(decimal);
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...