我根据搜索参数在gridview中自动生成列,将添加或删除少量列.
请建议我为gridview中的整个列设置日期格式为dd-mmm-yyyy.
现在,我正在使用rowdatabound.它检查每一行,因此显示结果需要时间.
这就是我在rowdatabound中所做的
if (e.Row.RowType == DataControlRowType.DaTarow) { System.Data.DaTarowView dtview; DateTime dt; int intCounter; dtview = (DaTarowView)e.Row.DataItem; for (intCounter = 0; intCounter <= dtview.Row.ItemArray.Length - 1; intCounter++) { if (dtview.Row.ItemArray[intCounter] is System.DateTime) { dt = (DateTime)dtview.Row.ItemArray[intCounter]; e.Row.Cells[intCounter].Text = dt.ToString("dd-MMM-yyyy"); } } }
这将检查所有记录,然后根据条件进行更改.
但我想做得更好,只需识别列并更改完整列的日期格式.
解决方法
免责声明:我自己没试过,但看起来很可能.
GridView有一个名为ColumnsGenerator的公共属性,其属性类型为IAutoFieldGenerator.这是确定如何生成列的对象.
已经有IAutoFieldGenerator的实现,默认的一个:GridViewColumnsGenerator.这是一个公开的非密封类,您可以从中派生出类型.
您必须覆盖的方法是这样的:
public override List<AutoGeneratedField> CreateAutoGeneratedFields( object dataObject,Control control);
注意输出,List< T> AutoGeneratedField. AutoGeneratedField有一个名为DataFormatString的属性:
public override string DataFormatString { get; set; }
所以你要做的就是覆盖CreateAutoGeneratedFields,如下所示:
public class MyDerivedGridViewColumnsGenerator : GridViewColumnsGenerator { public override List<AutoGeneratedField> CreateAutoGeneratedFields( object dataObject,Control control) { var list = base.CreatedAutoGeneratedFields(dataObject,control); foreach(var field in list) { if(field.DataType == typeof(DateTime)) field.DataFormatString = "dd-MMM-yyyy"; } return list; } }
现在,我不清楚如何设置ColumnsGenerator属性,因此您可能必须在代码中执行此操作.但这应该相当简单,因为GridViewColumnsGenerator有一个无参数构造函数:
// GridView myGridView; myGridView.ColumnsGenerator = new MyDerivedGridViewColumnsGenerator();
我会在绑定到GridView之前设置它,所以它在创建列时就到位了.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。