我做的工程里面,有个gridview,其中根据不同的情况,与不同的结果集绑定,这些结果集中有的有时间字段,有的没有时间字段,因为时间字段的类型在数据库中定义的是datatime,所以显示的时候老显示类似2008-3-24 00:00:00,我现在想实现 如果结果集中有时间字段,就显示2008-3-24(不要后面的时,分,秒) ,如果没有时间字段,就正常显示其他的字段信息。我在网上找了下这方面的资料,都不能达到我那个要求,望知道的给予指点,谢谢!
调试欢乐多
{
//这里判断是否为时间字段?return time:return ob;
} <%# convertTotime(Eval("str"))%>
//当然,你也可以直接在aspx上把值当变量处理,效果一样
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
//你的时间在GridView中是第几个(这个得从0开始数)我的时间是第3个我在e.Row.Cells[2]就写2
e.Row.Cells[2].Text = Convert.ToDateTime(e.Row.Cells[2].Text).ToShortDateString();
}
}
<asp:TemplateField HeaderText="出生日期" SortExpression="birthday">
<headerstyle width="100px" />
<ItemTemplate>
<%#DateTime.Parse(Eval("birthday").ToString().Trim()).ToString("yyyy-MM-dd")%>
</ItemTemplate>
</asp:TemplateField>
3楼的方法是常用方法public string convertTotime(object obj)
{
if(obj != null)
{
return Convert.ToDateTime(obj).ToShortTimeString();
}
return null;
}
当然如果LZ用的DataSource是DataTable那么这个问题无法解决
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
//你的时间在GridView中是第几个(这个得从0开始数)我的时间是第3个我在e.Row.Cells[2]就写2
e.Row.Cells[2].Text = Convert.ToDateTime(e.Row.Cells[2].Text).ToShortDateString();
}
} 这种方法不是蛮适合我的情况,我首先得找到哪个列(来确定e.Row.Cells[I].Text)的数据类型是DataTime的,然后再用上面的方法,但是我不知道怎么样找,我试过很多方法,但是没有找到,我认为,在GridView1_RowDataBound这个函数执行的时候,数据的数据类型没有带过来,所以找不到。因为查询的结果是放在数据集中的,我试图在数据集中改变字段是DataTime类型的字段,找是可以找到,但是时间字段的里面的值改变不过来,例如我设置dataSet.Tables["mytable"].Rows[j][i]=“2008-3-27”,但是显示出来的还是2008-3-27 0:00:00,如果用这种方法改变非DataTime类型的字段,又可以改,可能是DataTime类型的字段自动在时间后面自动加上0:00:00,郁闷,前面一种方法可以改值,但是不知道怎么样找到哪些字段是DataTime类型的字段,后面一种方法可以找到哪些是DataTime类型的字段,但是值又该不过来,真是郁闷,望大家在回帖的时候仔细看看的我要求,多提提建议!
DataTable dt=new DataTable();
ArrayList al = new ArrayList();
for (int i = 0; i < dt.Columns.Count; i++)
{
dt.Columns[i].GetType().Equals(typeof(DateTime));
al.Add(i);
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
//你的时间在GridView中是第几个(这个得从0开始数)我的时间是第3个我在e.Row.Cells[2]就写2
for(int i=0;i<al.Count;i++)
{
int x=al[i];
e.Row.Cells[i].Text = Convert.ToDateTime(e.Row.Cells[i].Text).ToShortDateString();
}
} }
<%#((DateTime)(Eval("Ord_Date"))).ToString("yyyy-MM-dd")%>
</ItemTemplate>这样就行了,我自己就是这样用的
{
string re="";
if(objTime != null)
{
try
{
re=DateTime.Parse(objTime.ToString()).ToString("yyyy-mm-dd");
}
catch{ re=objTime.ToString(); }
}
return re;
}前台绑定: <%#DateTimeDeal(Eval("DateField")) %>
sql里: CONVERT(VARCHAR(10),dateTime,120)自己选择
一般情况下,GridView里要显示某个字段的话,肯定要先绑定啊!在绑定的时候进行设置就可以了。比如数据库中字段factdate,类型为DateTime,绑定到GridView中一列,将其DataField设为factdate,DataFormatString设置为{0:d},再将HtmlEncode设置为False,例子如下:
<asp:BoundField HeaderText="实际完成日期" DataField="factdate" DataFormatString="{0:d}" HtmlEncode="False" >
这样,如果数据库中factdate有数据,就显示年月日,如果没有数据,则显示为空。
看看这个
http://topic.csdn.net/u/20090327/09/13c27f97-d94e-48f5-a25c-c2bc0268f8ca.html