分享
 
 
 

格式化 DataGrid 输出

王朝c#·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

格式化 DataGrid 输出

翻译:nxyc_twz@163.com

在这个论坛中,我看到了大量的关于如何在DataGrid中格式化显示数据的问题。人们想知道在特殊情况下,怎样改变某行的颜色,文字或基本的显示值 。 在这篇文章中,我将使用两种不同的技术向您演示如何修改您的数据的输出格式。我将向你展示怎样使用helper函数来改变数据数据显示格式。在这之后,我将解释怎样使用DataGrid的OnItemDataBound事件来修改DataGrid的数据并格式化显示它。

计划

首先,我设计了这个示例中的数据文件,它是一个简单的关于联系人的XML文件。我的DataGird中的显示需求包括:

合并首尾姓名。

如果Manager的值是1或Employee的值是0时改变Manager的显示方式。

如果Manager字段中有任一一行的值是1,则改变该行的背景色。

<?xml version="1.0" standalone="yes"?>

<Contacts>

<Contact>

<Email>myaddress@mycompany.com</Email>

<FirstName>John</FirstName>

<LastName>Doe</LastName>

<Manager>0</Manager>

</Contact>

<Contact>

<Email>youraddress@yourcompany.com</Email>

<FirstName>Jane</FirstName>

<LastName>Doe</LastName>

<Manager>1</Manager>

</Contact>

<Contact>

<Email>fred@bedrock.com</Email>

<FirstName>Fred</FirstName>

<LastName>Flintstone</LastName>

<Manager>0</Manager>

</Contact>

<Contact>

<Email>barney@bedrock.com</Email>

<FirstName>Barney</FirstName>

<LastName>Rubble</LastName>

<Manager>0</Manager>

</Contact>

<Contact>

<Email>slate@bedrock.com</Email>

<FirstName>Mr</FirstName>

<LastName>Slate</LastName>

<Manager>1</Manager>

</Contact>

</Contacts>

接下来设置数据网格。我想用First Name, Last Name 格式将名字组合到一列中,因此我使用 TemplateColumn。其它两列,每列简单的绑定在一个字段 ,因此用 BoundColumn 就足够了。

<asp:DataGrid id="dgContacts" runat="server" AutoGenerateColumns="False" Width="370px">

<ItemStyle CssClass="item"></ItemStyle>

<HeaderStyle CssClass="heading"></HeaderStyle>

<Columns>

<asp:TemplateColumn HeaderText="Name">

<ItemTemplate>

<asp:Label runat="server" Text= '<%# DataBinder.Eval(Container, "DataItem.FirstName") %>'>

</asp:Label>

</ItemTemplate>

</asp:TemplateColumn>

<asp:BoundColumn DataField="Email" ReadOnly="True" HeaderText="Email"></asp:BoundColumn>

<asp:BoundColumn DataField="Manager" ReadOnly="True" HeaderText="Status">

<HeaderStyle HorizontalAlign="Center"></HeaderStyle>

<ItemStyle HorizontalAlign="Center"></ItemStyle>

</asp:BoundColumn>

</Columns>

</asp:DataGrid>

哪个方法?

现在,需要显示网格数据,我需要决定使用哪个方法来显示这些数据。 使用 helper 函数是一种非常容易的改变数据输出的方法。 为了改变网格的格式,应使用 ItemDataBound 事件。 大脑中应记住这些规则,下面是这决定要做的事情:

方法

说明

Name

Helper

输出需要简单的组合 FirstName 和 LastName 字段.

Email

None

不做任何改变.

Status

ItemDataBound

需要改变基于 Manager字段值的行的背景色。另外,需要改变显示基于 Manager字段值的 Manager 或 Employee 。第二部分能够使用 helper 函数很容易的实现,但是因为我已经使用了 ItemDataBound 事件,因此我决定在同一个位置做两次操作。

Helper 函数

设置helper 函数非常简单。 首先,我在代码区创建了这个函数。 注意:函数作用域被声明为 protected. 这是必需的,因为函数将会在代码后的ASPX页中被调用。 去掉函数的私有属性将会在分析页面时出现错误。

[C#]

protectedstring FormatFullName(object FirstName, object LastName)

{

// Combine the names to get the Last, First format.

return (string)LastName + ", " + (string)FirstName;

}

[VB]

ProtectedFunction FormatFullName(ByVal FirstName AsObject, ByVal LastName AsObject) AsString

' Combine the names to get the Last, First format.

ReturnCType(LastName, String) & ", " & CType(FirstName, String)

EndFunction

为了从网格中调用函数,我改变了TemplateColumn中标签的文本值。

<asp:Label runat="server" Text='<%# FormatFullName(DataBinder.Eval(Container, "DataItem.FirstName"), DataBinder.Eval(Container, "DataItem.LastName")) %>'>

ItemDataBound 事件

然后,我设置了网格的 ItemDataBound 事件。有一件事你必须记住:当使用这个事件时,它会触发DataGrid中已建立的每一行。 这包含了页首及页尾行! 结果是,你必须确信你正确的设置了数据行的类型。 这由检查Item对象的ItemType属性来完成。我无法告诉你当我试着存取数据行中已存在的控件时,曾经遇到过多少次运行时错误,但页首中就不存在这样的情况。

[C#]

protectedvoid dgContacts_ItemDataBound(object source, System.Web.UI.WebControls.DataGridItemEventArgs e)

{

// 确定是数据行而非页首或页尾

if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)

{

// 取得 manager 字段的值

string isManager = (string)DataBinder.Eval(e.Item.DataItem, "Manager");

if (isManager == "1")

{

// 设置文本及背景颜色.

e.Item.Cells[2].Text = "Manager";

e.Item.BackColor = System.Drawing.Color.AliceBlue;

}

else

{

// 仅设置文本.

e.Item.Cells[2].Text = "Employee";

}

}

}

[VB]

PrivateSub dgContacts_ItemDataBound(ByVal sender AsObject, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles dgContacts.ItemDataBound

' 确定是数据行而非页首或页尾

If e.Item.ItemType = ListItemType.ItemOrElse e.Item.ItemType = ListItemType.AlternatingItem Then

' 取得 manager 字段的值

Dim isManager AsString = CType(DataBinder.Eval(e.Item.DataItem, "Manager"), String)

If isManager = "1"Then

' 设置文本及背景颜色.

e.Item.Cells(2).Text = "Manager"

e.Item.BackColor = System.Drawing.Color.AliceBlue

Else

' 仅设置文本.

e.Item.Cells(2).Text = "Employee"

EndIf

EndIf

EndSub

结果

最后,我们总结一下,看看已经创建了什么! 如果我已经正确的完成了每件工作,我将可以获得一个包含了3列的简单网格。名字由last name 和 first name组合而成。接着是电子邮件地址,然后是状态列指示此人是否是管理员或雇员。 最后,任何显示为管理人员的行都有背景色,让我们看看最终的运行结果!

摘要

正如你所看到的,有多种不同的方法可以改变你的DataGrid中的数据输出格式。 你所选择的方法依赖于你需要执行的操作或你考虑的方式。 以上方法都非常简单,当你使用它们的时候,就会增加DataGrid控件的可有性。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有