格式化 DataGrid 输出

 

格式化 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 事件。 大脑中应记住这些规则,下面是这决定要做的事情:

 

方法说明
NameHelper输出需要简单的组合 FirstName 和 LastName 字段.
EmailNone不做任何改变.
StatusItemDataBound需要改变基于 Manager 字段值的行的背景色。另外,需要改变显示基于 Manager 字段值的 ManagerEmployee 。第二部分能够使用 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控件的可有性。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
注意:本3.0版控件过于老旧,该控件最新版本为4.7版,您可以到http://myyouping.download.csdn.net/免费下载,也是完全免费的,没有任何功能及使用时间限制,0积分下载。我将3.0版控件的下载分提为10分,是希望大家使用最新版的控件。 控件特色: 1、超强大的DataGridView打印功能,不光可以以多种形式(普通打印、分栏打印、跨页打印、工资条打印)打印DataGridView表格,基本上能完全按DataGridView控件本身设置的格式如字体、字号、背景颜色、前景颜色、单元格对齐方式等打印出来,文字图像都可以打印,而且是完全根据表格当前的显示顺序进行打印的,如果您在使用时调整了列的顺序,刷新打印后就会按调整后的列显示顺序进行打印(这是网上很多DataGridView打印控件没有实现的),基本上做到了所见即所得的打印。 2、强大的文本打印输出功能,打印文本时,如果需要,控件会自动换行或换页打印输出。 3、支持同一文档多种版面格式打印(类似于Word中的节的功能):对同一份文档,不同的页面可以设置不同的格式(纸张大小、纸张方向、页边距),只需要在新增一页时在NewPage方法中指定要使用的页面格式即可,使用非常简单。 4、报表功能。本控件允许将当前打印预览的内容保存为报表文件,以后使用本控件重新打开该报表文件即可重现原来保存报表时的打印内容。 5、打印方案保存与读取功能。可以将当前打印参数保存为打印方案文件,或都从保存的打印方案文件中读取打印参数。 6、水印功能。根据需要,可以在页面中打印或不打印以半透明空心文字打印水印。 7、特殊文字效果功能。本版控件具有打印浮雕文字、阴影文字、空心文字、块文字的功能,效果非常不错。 8、页眉页脚中既可打印文字,也可打印图像,或者即打印图像又打印输出文字。 9、图像打印输出功能。 本控件包括两个打印组件:DGVprint打印组件与VB2008print打印组件。VB2008Print为通用打印控件(为可视化组件),可以混合打印一个或多个DataGridView表格、DataGrid表格与文字、图片等内容;而DGVprint是以VB2008Print为基础开发的(为非可视化组件),为专用的表格打印控件,可以很方便打印单个DatatGridview、DataGrid、DataTable表格的内容,并提供打印时的可视化设置界面,可设置表格打印方式(普通打印、分栏打印、跨页打印、工资条打印)、标题内容及字体、页眉页脚、选择要打印的表格列、列顺序调整及列格式设置、更改列标题名称等,使用非常方便,功能非常强大。 与本控件的上一个版本2.1版相比,本版控件新增功能如下: VB2008Print打印组件新增功能: 1、多种特效文字打印输出功能,能打印的特效文字有 空心文字、浮雕文字、块文字、阴影文字等。 2、水印打印功能。可以在面页中以半透明空心文字的形式打印背景水印,只需要简单设置控件的WaterMarkText等几个以WaterMark开头的属性即可,程序会自动打印水印。 3、PrintDGV函数可直接使用DGVPrint组件保存的打印方案文件打印输出DataGridView表格, 4、在页眉页脚中不光可以打印文本,还可以打印图像,文本与图像可同时打印(即在图像上显示文本)。此外,页眉页脚文字可以换行打印了,页面的左边也右边距也可以打印内容了(调用相应的函数PrintLeft与PrintRight实现)。 5、改进DrawText函数输出文本的功能,现在,即便调用没有指定打印区域或打印宽度的DrawText函数输出文本,打印输出时控件也会智能换行和换页(原版本是需要指定打印宽度才能自动换行换页打印的) 6、改进DrawImage与DrawCellImage输出图像功能,如果图像比较小(小于打印区域大小),可以不进行放大打印。(但如果图像大于打印区域的话,还是采用整体缩小打印,而不是区域剪裁打印)。 7、增加IsShowPrintStatusDialog属性,指示在发送到打印机打印时,是否显示一个指示正在打印的状态窗口(可以取消打印),为TRUE表示要显示,为False表示不显示。 8、改进页眉页脚事件,将原来的HeaderOut与FooterOut统一为HeaderFooterOut事件,在该事件中,您可以调用PrintFooter、PrintHeader、PrintLeft、PrintRight函数分别打印上下左右的页眉。(PrintLeft与PrintRight函数为新增加的,用于在左边与右边页边距处输出内容) DGVPrint打印组件新增功能: 1、打印方案保存与读取功能。本版控件可以将您的可视化设置(包括列格式设置等)全部保存为打印方案文件(文本文件,您可以用记事本打开并修改),并有读取方案文件的功能,不再需要每次都进行打印格式设置了,一劳永逸! 2、直接调用打印方案文件打印功能。您不光可以设计DGVPrint打印组件的属性来进行打印,还可以直接调用DGVPrint组件中保存的打印方案文件,直接利用保存的方案文件的参数进行打印预览输出。 3、新增在可视化打印参数设置界面的列标题重命名功能,可能修改列标题要打印的名字。 4、水印打印功能。如果水印文本设置为空,则不打印水印。 5、导出数据成Excel功能。暂未提供该功能的函数接口,只在打印参数设置窗口中增加了一个数据导出的按钮,可以将当前要打印的DataGridView的内容导出成Excel文件。该功能以后会进一步完善。 6、在进行页眉页脚文本设置时,可以用 [页码] 代表要输出的当前页码,用 [总页数] 代表要输出总页数,控件在进行输出时,会自动将其转换为对应的页码与文档总页数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值