我做的工程里面,有个gridview,其中根据不同的情况,与不同的结果集绑定,这些结果集中有的有时间字段,有的没有时间字段,因为时间字段的类型在数据库中定义的是datatime,所以显示的时候老显示类似2008-3-24 00:00:00,我现在想实现 如果结果集中有时间字段,就显示2008-3-24(不要后面的时,分,秒) ,如果没有时间字段,就正常显示其他的字段信息。我在网上找了下这方面的资料,都不能达到我那个要求,望知道的给予指点,谢谢!

解决方案 »

  1.   

    呃~在cs设个公共函数吧:    public string convertTotime(object ob)
         {
               //这里判断是否为时间字段?return time:return ob;
         }   <%# convertTotime(Eval("str"))%>
    //当然,你也可以直接在aspx上把值当变量处理,效果一样
      

  2.   

    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();
            }
    }
      

  3.   


    <asp:TemplateField HeaderText="出生日期" SortExpression="birthday">
                        <headerstyle width="100px" />
                        <ItemTemplate>
                        <%#DateTime.Parse(Eval("birthday").ToString().Trim()).ToString("yyyy-MM-dd")%>
                        
    </ItemTemplate>
                        </asp:TemplateField>
      

  4.   


    3楼的方法是常用方法public string convertTotime(object obj)
    {
        if(obj != null)
        {
            return Convert.ToDateTime(obj).ToShortTimeString();
        }
        return null;
    }
    当然如果LZ用的DataSource是DataTable那么这个问题无法解决
      

  5.   

       <asp:BoundField DataField="date_limit" HeaderText="限交日期" DataFormatString="{0:yyyy-MM-dd}" HtmlEncode="False">
                                    
      

  6.   

    首先感谢楼上几位的帮忙,但是好像不符合我的要求,我在将我的问题描述下,意思是这样的:用户在查询的时候,所查询字段由用户自己挑选,其中有可能选到时间字段,有可能没有选到时间字段,
    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类型的字段,但是值又该不过来,真是郁闷,望大家在回帖的时候仔细看看的我要求,多提提建议!
      

  7.   

                 
                   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(); 
            }
     } } 
      

  8.   

      <ItemTemplate>
       <%#((DateTime)(Eval("Ord_Date"))).ToString("yyyy-MM-dd")%>
      </ItemTemplate>这样就行了,我自己就是这样用的
      

  9.   

    protected string DateTimeDeal(object objTime)
    {
      string re="";
      if(objTime != null)
      {
        try
        {
          re=DateTime.Parse(objTime.ToString()).ToString("yyyy-mm-dd");
        }
        catch{ re=objTime.ToString(); }
      }
      return re;
    }前台绑定: <%#DateTimeDeal(Eval("DateField")) %>
      

  10.   

    代码里如此:ToString("yyyy-MM-dd");
    sql里: CONVERT(VARCHAR(10),dateTime,120)自己选择
      

  11.   

    你的时间在数据库里是一个字段吧?
    一般情况下,GridView里要显示某个字段的话,肯定要先绑定啊!在绑定的时候进行设置就可以了。比如数据库中字段factdate,类型为DateTime,绑定到GridView中一列,将其DataField设为factdate,DataFormatString设置为{0:d},再将HtmlEncode设置为False,例子如下:
     <asp:BoundField HeaderText="实际完成日期" DataField="factdate" DataFormatString="{0:d}" HtmlEncode="False" >
    这样,如果数据库中factdate有数据,就显示年月日,如果没有数据,则显示为空。
      

  12.   


    看看这个
    http://topic.csdn.net/u/20090327/09/13c27f97-d94e-48f5-a25c-c2bc0268f8ca.html
      

  13.   

    谢谢楼上几位的解答,我最后自己想出来了,跟11楼的方法类似,在dataset中找到字段是DataTime的字段,把字段的INDEX传给  GridView1_RowDataBound