有段时间不用GridView了,有点生疏了。最近用GridView,把GridView中格式化数据的方法总结一下。
一、动态生成列的格式化
此种GridView中的列是动态生成的,格式化可以通过RowDataBound事件进行。如下边代码,对第十列的值进行格式化。
protected
void
gvUserList_RowDataBound(
object
sender, GridViewRowEventArgs e)
{
//
格式化代码
if
(e.Row.Cells[
9
].Text
==
'
1
'
)
{
e.Row.Cells[
9
].Text
=
"
XXX
"
;
}
else
{
e.Row.Cells[
9
].Text
=
"
YYY
"
;
}
}
二、在源码中对已配置好列的格式化
下边的源码是已配置好列的GridView,将以此为例进行格式化。
代码
<
asp:GridView
ID
="GridView1"
runat
="server"
AutoGenerateColumns
="False"
>
<
Columns
>
<
asp:BoundField
DataField
="UserName"
HeaderText
="姓名"
/>
<
asp:BoundField
DataField
="Sex"
HeaderText
="性别"
/>
<
asp:BoundField
DataField
="State"
HeaderText
="状态"
/>
<
asp:BoundField
DataField
="LoginDateTime"
HeaderText
="最后登录时间"
/>
</
Columns
>
</
asp:GridView
>
此例中需要格式化的地方有:最后登录时间,性别,状态。最后登录时间为日期的格式化;性别是值为两种情况的格式化;状态是值为多种情况的格式化。
格式化方法:
方法一、使用后台进行格式化,即用动态生成列的格式化方法。
方法二、直接在源码上进行格式化。
这里我们重点介绍在源码上进行格式化。
2.2.1日期格式化
如上边GridView中的"最后登录时间" 要格式化成"yyyy-MM-dd"的形式。格式的化的方法是用DataformatString。
例子源码中<asp:BoundField DataField="LoginDateTime" HeaderText="最后登录时间" />的格式化代码如下。
<
asp:BoundField
DataField
="LoginDateTime"
HeaderText
="最后登录时间"
DataFormatString
="{0:yyyy-MM-dd HH:mm}"
/>
当然DataFormatString不只是只能格式化日期,也可以格式化货币、数字等,详情请参才MSDN。相关地址如下:
BoundColumn.DataFormatString 属性介绍:
http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.boundfield.dataformatstring.aspx
2.2.2 值为两种情况的格式化
如上边的GridView中的"性别"。性别有男、女两种情况,如果 0为男、1为女,则格式化方法可以用<TemplateField> +数据绑定表达式:<%#数据绑定表达式%> + 三元运算符在解决。
例子源码中<asp:BoundField DataField="Sex" HeaderText="性别" />的格式化代码如下。
<
asp:TemplateField
HeaderText
="性别"
>
<
ItemTemplate
>
<%
#
Eval
(
"
Sex
"
).ToString().Trim()
==
"
0
"
?
"
男
"
:
"
女
"
%>
</
ItemTemplate
>
</
asp:TemplateField
>
2.2.3 值为多种情况格式化
例子中“状态”有多种,其值和显示名称为:1:已登陆;2:未登陆;3:注销;4:删除;另外为其它
现在要格式化怎么办?显然三元运算符已无法解决这个问题。解决这个问题的方法与上边类似。但是用<TemplateField> +数据绑定表达式:<%#数据绑定表达式%> + 范型属性来解决。
我们首先在页面的后台代码中定义一个范型的共公属性,此属性用于格式化。并在Page_load中赋值。后台代码为:
protected
static
Dictionary
<
string
,
string
>
StateList {
get
;
set
; }
protected
void
Page_Load(
object
sender, EventArgs e)
{
StateList
=
new
Dictionary
<
string
,
string
>
();
StateList .Add(
"
1
"
,
"
已登陆
"
);
StateList .Add(
"
2
"
,
"
未登陆
"
);
StateList .Add(
"
3
"
,
"
注销
"
);
StateList .Add(
"
4
"
,
"
删除
"
);
}
细心的朋为会看到只有四个状态值,还有一个状态值“其它”没有看到,这个我们可以在源码中用三元运算符解决。
例子源码中<asp:BoundField DataField="State" HeaderText="状态" />的格式化代码如下。
<
asp:TemplateField HeaderText
=
"状态
"
>
<
ItemTemplate
>
<%
# StateList.ContainsKey(Eval(
"
State
"
).ToString().Trim())
?
StateList[Eval(
"
State
"
).ToString()] :
"
其它
"
%>
</
ItemTemplate
>
</
asp:TemplateField
>