在Codebehind内动态设置显示内容的DataFormatString

在DataGrid内控制单元格显示内容的格式,如时间格式的时候
如果AutoGenerateColumns=false
那么绑定列中设置 DataFormatString="{0:dd/mm/yyyy}" 就可以做到了
可是AutoGenerateColumns=true的时候,就不好办了
一个办法,可以在sql语句中使用convert或者cast函数转换一下。
我们正在做的一个项目中
有个动态查询功能,是根据用户选择的条件、需显示的字段来动态生成Sql语句(破坏了三层结构,不知道其他朋友如何做?)来查询的。
如果用Sql的函数将非常麻烦,我采用了如下方法,在后台绑定数据的时候设置内容格式。

示例:

 

<%@ Page Language="C#" Debug="true" %>
<%@ Import Namespace="System.Data" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="gb2312" lang="gb2312">
<head>
<title> AutoGenerateColumns为true时,在Codebehind内设置内容的DataFormatString </title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta name="title" content="" />
<meta name="author" content="活靶子,Huobazi,www.AspxBoy.com" />
<meta name="subject" content="" />
<meta name="language" content="gb2312" />
<meta name="keywords" content="" />
<meta name="Copyright" content="www.AspxBoy.com" />
<meta name="robots" content="all" />
<script language="c#" runat="server">
void BindGrid()
{
        DataTable dt 
= new DataTable();
        DataRow dr;
        dt.Columns.Add(
new DataColumn("我是日期"typeof(DateTime)));
        dt.Columns.Add(
new DataColumn("俺也是日期"typeof(DateTime))); 
        dt.Columns.Add(
new DataColumn("偶也是日期啊,怎么我还带着时间?",typeof(DateTime)));
        
for (int i = 0; i < 10; i++
        
{
            dr 
= dt.NewRow();
            dr[
0= DateTime.Now;
            dr[
1= DateTime.Now;
            dr[
2= DateTime.Now;  
            dt.Rows.Add(dr);
        }

        dg.DataSource
= dt;
        dg.DataBind();
}

void Page_Load(object o, EventArgs e)
{
    
if(!IsPostBack)
    
{
        BindGrid();
    }

}

void ItemDataBound(object o , DataGridItemEventArgs e)
{
    
if(e.Item.ItemType==ListItemType.Item ||e.Item.ItemType==ListItemType.AlternatingItem )
    
{
        DataRowView drv 
= (DataRowView)e.Item.DataItem;
        
for(int i=0;i<e.Item.Cells.Count;i++)
        
{     
            e.Item.Cells[i].Wrap 
=    false;
            string columnName
=drv.Row.Table.Columns[i].ColumnName;
            
if( columnName.StartsWith("") )
            
{
                e.Item.Cells[i].Text 
= ((DateTime)drv[columnName]).ToString("yyyy-MM-dd");
                
//也可以这样
                //e.Item.Cells[i].Text = DataBinder.Eval(e.Item.DataItem,columnName,"{0:yyyy-MM-dd}");
            }

            
if( columnName.StartsWith("") )
            
{
                e.Item.Cells[i].Text 
= ((DateTime)drv[columnName]).ToString("dd/MM/yy");
                
//也可以这样
                //e.Item.Cells[i].Text = DataBinder.Eval(e.Item.DataItem,columnName,"{0:yy-MM-dd}");
            }

        }

    }

}

</script>
</head>
<body>
<form runat="server">
        
<ASP:DataGrid id="dg" runat="server"       
            HeaderStyle-BackColor
="#aaaadd"
            AutoGenerateColumns
="true"
            OnItemDataBound
="ItemDataBound"
            Width
="100%"
        
>
        
</asp:DataGrid>        
</form>
</body>
</html>

 

http://www.aspxboy.com/Files/71/66/285.Aspx

 

Tag标签: asp.net,.net

posted on 2004-11-16 13:04 武眉博<活靶子.Net> 阅读(2962) 评论(0)  编辑 收藏 所属分类: Asp.Net


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-04-03 19:22 编辑过


相关链接:
 



导航

公告

广告开始
广告结束

本blog文字只代表靶子某一时间内的观点或结论,与本人所在公司没有任何关系,对其的正确性没有任何担保或假设,如要发表评论请先看清楚日期。 另:本人有权认定一个回复是否包含广告或者其他恶意内容并删除,谢谢!。

统计

与我联系

搜索

 

留言簿(51)

我参加的小组

我参与的团队

我的标签

随笔分类(186)

随笔档案(146)

相册

收藏夹(326)

常去链接

我的东西

友情博客

积分与排名

最新评论

阅读排行榜

评论排行榜

 武眉博联系电话:029-83099661  上官艳丽联系电话:029-83700139