选择显示字体大小

asp.net datagrid创建自定义列(4)

     使用 dropdowncolumn
  
    以上是创建 dropdowncolumn 类所需的所有代码,下面我们看一看如何在应用程序中使用该控件。如果您是在家中学习,而且还没有开始做,请将上面创建的命名空间编译到 mycustomcolumn.dll 中,并将其复制到您想试验的应用程序的 /bin 文件夹中。本例中,我创建一个新的 web 应用程序 usecustomcolumn,并在我的 /bin 目录的 mycustomcolumn.dll 中添加一个引用。在 aspx 文件的顶部,添加 @register 指令:
  
  <%@ register tagprefix="dgg"
  namespace="mycustomcolumn"
  assembly="mycustomcolumn" %>
  
    请注意,新的 datagrid 列类型不会为 datagrid 出现在 visual studio .net 属性生成器中,因此您需要进入 html 视图并在其中添加列声明。确保 datagrid 声明位于一组 <form runat="server">...</form> 标记之中,这些标记用于处理 postback。aspx 文件的其余部分应如下所示:
  
  <%@ page language="vb"
  autoeventwireup="false"
  codebehind="webform1.aspx.vb"
  inherits="usecustomcolumn.webform1"
  trace="false" debug="true"%>
  <!doctype html public "-//w3c//dtd html 4.0 transitional//en">
  <html
  <head>
  <title>webform1</title>
  <link rel="stylesheet" type="text/css" href="styles.css">
  <meta name="generator" content="microsoft visual studio.net 7.0">
  <meta name="code_language" content="visual basic 7.0">
  <meta name="vs_defaultclientscript" content="javascript">
  <meta name="vs_targetschema"
  content="http://schemas.microsoft.com/intellisense/ie5">
  </head>
  <body>
  <form id="form1" method="post" runat="server">
  <asp:datagrid id="datagrid1"
  runat="server" cssclass="grid"
  autogeneratecolumns="false">
  <columns>
  <asp:editcommandcolumn
  edittext="edit" canceltext="cancel"
  updatetext="update" />
  <asp:boundcolumn
  datafield="orderid"
  readonly="true"
  headertext="order id"/>
  <asp:boundcolumn
  datafield="shipname"
  headertext="ship to"
  readonly="true"/>
  <asp:boundcolumn
  datafield="shipcountry"
  headertext="country"
  readonly="true"/>
  <dgg:dropdowncolumn datafield="shipvia" headertext="ship method" />
  </columns>
  </asp:datagrid>
  </form>
  </body>
  </html
  
    datagrid 被绑定到 northwind 示例的 orders 表,自定义 dropdowncolumn 被绑定到 shipvia 列。现在我只设置 datafield 属性,因为刚刚绑定到一个简单的 arraylist,不需要 datatextfield 和 datavaluefield 属性。如果您有预定义的常数列表或者您需要一个快速设置选项的方法,arraylist 选项最简单。dropdowncolumn 的 datasource 在代码中设置,首先引用 dropdowncolumn:
  
  dim ddc as mycustomcolumn.dropdowncolumn
  ddc = ctype(datagrid1.columns(4), mycustomcolumn.dropdowncolumn)
  dim al as new arraylist
  al.add("shipping company a")
  al.add("shipping company b")
  al.add("shipping company c")
  ddc.datasource = al
  
    下面是运行此代码的结果:
  
  
  
  图 3:使用 arraylist
  
    接下来,我需要转换该示例以便使用数据库中的活动表。shipvia 是查找表 shippers 的外键,我在代码中将其指定为 dropdowncolumn 的 datasource。我还需要改变 dropdowncolumn 声明,以包括与 shippers 表中的相应字段匹配的 datatextfield 和 datavaluefield 名称:
  
  <dgg:dropdowncolumn datafield="shipvia" datatextfield="companyname"
  datavaluefield="shipperid" headertext="ship method" />
  
    然后将两个 orders 表绑定到 datagrid,将 shippers 表绑定到自定义列:
  
  dim sql as string =
  "select orderid, shipname, shipcountry, shipvia from orders"
  dim da as sqldataadapter = new sqldataadapter(sql, connstr)
  dim ds as new dataset
  da.fill(ds, "orders")
  'dim cmd as sqlcommand = new sqlcommand(sql, conn)
  'conn.open()
  'datagrid1.datasource = _
  cmd.executereader(commandbehavior.closeconnection)
  datagrid1.datasource = ds.tables("orders").defaultview
  sql = "select shipperid, companyname " & _
  "from shippers order by shipperid"
  da.selectcommand.commandtext = sql
  da.fill(ds, "shippers")
  ddc.datasource = ds.tables("shippers").defaultview
  datagrid1.databind()
  
    datagridcolumn 使用活动数据,根据 orders 表中的值(1、2 或 3)自动选择正确的项目,如下所示:
  
  
  
  图 4:从数据库中检索数据
  
    使用 dropdowncolumn 的最后一步是检索选定的值以传递回数据库更新。为此,只需在单元格内引用 dropdownlist 控件,并确定其 selectedvalue 属性:
  
  private sub datagrid1_updatecommand( byval source as object, _
  byval e as system.web.ui.webcontrols.datagridcommandeventargs) _
  handles datagrid1.updatecommand
   dim customddl as dropdownlist = _
    ctype(e.item.cells(4).controls(0), dropdownlist)
   dim newship as integer = customddl.selectedvalue
   dim orderid as integer = int32.parse(e.item.cells(1).text)
   dim sql as string = "update orders set shipvia=@ship where orderid=@id"
   dim conn as sqlconnection = new sqlconnection(connstr)
   dim cmd as new sqlcommand(sql, conn)
   cmd.parameters.add(new sqlparameter("@ship", newship))
   cmd.parameters.add(new sqlparameter("@id", orderid))
   conn.open()
   cmd.executenonquery()
   conn.close()
   datagrid1.edititemindex = -1
   bindgrid()
  end sub
  
    小结
  
    上文概述了如何以 datagridcolumn 为父类型创建一个新类型、如何进行数据绑定以及如何将其应用到实际应用程序中。这只是可重复使用的 datagrid 列的一个示例,因此,您需要检查您自己的应用程序,以确定哪些重复的功能可以封装到其自己的自定义 datagrid 列中。您可以开发自己的列,以解决常见问题(例如,在列中显示 dropdownlist),或满足您公司的特殊需要。您也不必拘泥于本文的示例,只在自定义列中包含一个 asp.net 控件,您可以编写更复杂的结构,例如将一系列控件、第三方内容或整个 datagrid 控件嵌套到列中,以表现多层信息。总之,您可以充分发挥您的想象力。
  
    5个内置的列类型非常有用,它们可以满足使用 datagrid 控件进行显示的大多数情况下的需要。现在并没有开发您自己的控件,只是将一些有意义的内容随便放到 templatecolumn 中。创建自定义列使您可以突破这些限制,在您的 datagrid 应用程序中添加丰富的功能。
    


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons