问题描述
|
我有一个通过绑定源将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);