格式化动态GridView

时间:2010-11-22 19:55:53

标签: c# .net asp.net

我有一个GridView,其中列是动态的。 GridView绑定到DataTable。

其中一列是DateTime列。我需要格式化该列以显示“01/01/2010”而不是“01/01/2010 12:00:00 AM”。

我无法更改列来存储字符串而不是DateTime。

最好的方法是什么?

<asp:GridView ID="gvResults" runat="server">
</asp:GridView>


CustomReportDataTable dt = new CustomReportDataTable();
dt.LoadData();
gvResults.DataSource = dt;
gvResults.DataBind();

3 个答案:

答案 0 :(得分:6)

我假设您正在使用带有AutoGenerateColumns的网格,如果是这种情况,我不确定是否有正确的方法,如果有的话,但这是一种快速而肮脏的方式来更改正在输出的文本

 protected void grdTest_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.DataItem != null)
        {
            e.Row.Cells[1].Text = DateTime.Parse(e.Row.Cells[1].Text).ToShortDateString();
        }
    }

此代码将创建一个on row数据绑定事件,然后解析文本,并按照您希望的方式对其进行格式化。只有当您知道日期将始终位于特定列中时,这才有效。

如果您想要动态列但更多控制的另一个选项是将AutoGenerateColumns设置为false,并在绑定之前使用所需的列动态填充网格视图的列,这样您就可以使用数据格式字符串。这是一个更多的工作,但你仍然可以控制你的列:

BoundField Col1 = new BoundField();
Col1.DataField = "StringFieldName";

BoundField Col2 = new BoundField();
Col2.DataField = "DateFieldName";
Col2.DataFormatString = "{0:d}";

grdTest.Columns.Add(Col1);
grdTest.Columns.Add(Col2);

答案 1 :(得分:2)

以下是一个例子:

<asp:BoundField DataField="DataFieldName" DataFormatString="{0:d}"></asp:BoundField>

以下是供参考的链接:

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.boundfield.dataformatstring.aspx

答案 2 :(得分:0)

将列添加到网格视图时,可以设置“DisplayFormat”以显示货币。