在编程创建的gridview中将日期格式字符串设置为d / M / yyyy和htmlencode = false

时间:2010-12-10 21:47:34

标签: asp.net gridview date-format

MyDataSource是存储在通过搜索页面传递的会话中的数据源

  protected void Page_Load(object sender, EventArgs e)
{

    gridview1.DataSource = Session["MyDataSource"];
    gridview1.DataBind();




}

gridview1是一个gridview,没有数据源等待页面加载事件将它绑定到数据源,在我的例子中是MyDataSource

<asp:GridView ID="gridview1" runat="server" BackColor="LightGoldenrodYellow" 
    BorderColor="Tan" BorderWidth="1px" CellPadding="2" ForeColor="Black" 
    GridLines="None">
    <AlternatingRowStyle BackColor="PaleGoldenrod" />
    <FooterStyle BackColor="Tan" />
    <HeaderStyle BackColor="Tan" Font-Bold="True" />
    <PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue" 
        HorizontalAlign="Center" />
    <SelectedRowStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" />
    <SortedAscendingCellStyle BackColor="#FAFAE7" />
    <SortedAscendingHeaderStyle BackColor="#DAC09E" />
    <SortedDescendingCellStyle BackColor="#E1DB9C" />
    <SortedDescendingHeaderStyle BackColor="#C2A47B" />
</asp:GridView>

此网格视图中显示的日期显示为M / d / yyyy +时间 例如12/31/2010 00:00:00

我的问题:我需要一种方法来显示日期为d / M / yyyy,例如没有时间 31/12/2010 通常我通过设置gridview属性来执行此操作htmlencode = false和dateformatstring =“{0:M-dd-yyyy}” 但在这种情况下,gridview不显示任何字段,因为它仅在运行时绑定数据

请尽快在这个问题上帮助你。 提前谢谢

2 个答案:

答案 0 :(得分:3)

尝试使用此代码:

<asp:GridView ID="gridview1" runat="server" BackColor="LightGoldenrodYellow" 
BorderColor="Tan" BorderWidth="1px" CellPadding="2" ForeColor="Black" 
GridLines="None" AutoGenerateColumns="false">
<AlternatingRowStyle BackColor="PaleGoldenrod" />
<FooterStyle BackColor="Tan" />
<HeaderStyle BackColor="Tan" Font-Bold="True" />
<PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue" 
    HorizontalAlign="Center" />
<SelectedRowStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" />
<SortedAscendingCellStyle BackColor="#FAFAE7" />
<SortedAscendingHeaderStyle BackColor="#DAC09E" />
<SortedDescendingCellStyle BackColor="#E1DB9C" />
<SortedDescendingHeaderStyle BackColor="#C2A47B" />

<Columns>
    <asp:BoundField DataField="PropertyName" />
    <asp:BoundField DataField="PropertyName" />
    <asp:BoundField DataField="DateTimeProperty" DataFormatString="{0:dd/M/yyyy}" />
</Columns>

它在我的电脑上工作正常。希望它会对你有所帮助。

祝你好运, 迪马。

答案 1 :(得分:2)

除非您告诉它要显示什么,否则gridview不会显示任何数据。

快速修复将是这样的:

<asp:GridView ID="gridview1" runat="server" OnRowDataBound="gridview1_RowDataBound">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Label ID="dateLabel" runat="server" />
            <ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

然后在您的代码隐藏中:

protected void gridview1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow && e.Row.DataItem != null)
    {
        var item = (MyCustomDataBoundObject)e.Row.DataItem;
        var dateLabel = (Label)gridview1.FindControl("dateLabel");
        dateLabel.Text = item.Date.ToString("dd/MM/yyyy");
    }
}

以上是未经测试的,但应该足以让你得到你想要的东西。

出于好奇,你为什么要通过会话传递数据源?我对你的应用程序一无所知,但它从来都不是我以前采用的方法。为什么不将gridview绑定到您在aspx页面中定义的objectdatasource?然后你可以使用一个简单的绑定列。