选择显示字体大小

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

     内置的 datagrid 列
  
    了解问题的大概情况后,现在我们后退一步,看一下 asp.net 中构建的 5 种 datagrid 列类型及其父类型 datagridcolumn。
  
    boundcolumn。这是文本字段的标准显示。它显示为纯文本,但是当 datagrid 处于“编辑”模式时,它将转换为 textbox。还可以选择格式化选项。
  
    hyperlinkcolumn。用于显示文本数据,还代表一个 web 地址 (url)。url 可以与显示文本相同,也可以不同,它们都可以单独设置。它显示为 <a href=...> 标记。
  
    buttoncolumn。它使用户能够按行与网格进行交互。它可以显示为超链接 linkbutton (<a href=...>) 或 pushbutton (<input type="button">)。单击该按钮时将触发 postback,而在 datagrid 上触发 itemcommand 事件。
  
    editcommandcolumn。它与 buttoncolumn 类似,但是它自动创建用于编辑 datagrid、取消或提交更改的按钮。触发 itemcommand 事件,以及所单击按钮的特定事件:editcommand、cancelcommand 或 updatecommand。
  
    templatecolumn。用于完全控制显示给用户的控件,分为多种模板,例如 itemtemplate 和 edititemtemplate。任何 asp.nethtml 控件或控件组都可以放置在这些模板中。
  
    注意:直接使用这些列类型之前,请关闭 autogeneratecolumns(运行时自动生成列)。然后,您可以在属性生成器中使用这些列类型,或者直接在 aspx 文件的 html 代码中使用。
  
  
  
  图 2:从 datagridcolumn 中继承的 5 种内置列
  
    尽管这些列类型非常有用,它们不过是了解 datagrid 列内容的开始。
  
    传统方法:templatecolumn 中的 dropdownlist
  
    在研究如何创建新列类型之前,首先让我们看一下如何通过直接在 templatecolumn 内使用 dropdownlist 解决下拉列表的问题,而不用自定义列。itemtemplate 将只包含表示当前值的纯文本表示,而 edititemtemplate 包含一个需要在运行时管理的 <asp:dropdownlist> 控件。
  
  <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" />
   <asp:templatecolumn headertext="ship method">
   <itemtemplate>
    <%#container.dataitem("shipvia")%>
   </itemtemplate>
   <edititemtemplate>
    <asp:dropdownlist runat="server" id="dropdownlist1"/>
   </edititemtemplate>
   </asp:templatecolumn>
  </columns>
  </asp:datagrid>
  
    绑定 datagrid 的代码:
  
  sub bindgrid()
   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")
   datagrid1.datasource = ds.tables("orders").defaultview
   datagrid1.databind()
  end sub
  
    当前编辑的项目是在触发 datagrid 的 itemdatabound 事件时绑定到 dropdownlist 的。使用 itemdatabound 事件时,请检查当前项目的 listitemtype,否则您可能会发现您正在使用 headeritem 或其他不适用的项目类型。为 edititem 引用 dropdownlist 控件。在下面的代码中,我直接使用单元格控件集进行说明(为了与后面的示例保持一致),但是,您可以采用简单的方法,直接为 dropdownlist 控件指定 id,并使用 datagrid 项目的 findcontrol 方法定位控件引用。由于 datagrid 被绑定到 datatable 的默认视图,而该视图的元素属于 datarowview 类型,所以您可以将当前项目的 dataitem 属性转换为一个 datarowview 实例。这样,您可以按字段名直接引用 dataitem 中的字段。使用这种方法,将“shipvia”的当前值保存到该记录中,并使用它选择相应的下拉列表项。
  
  private sub datagrid1_itemdatabound(byval sender as object, _
  byval e as system.web.ui.webcontrols.datagriditemeventargs) _
  handles datagrid1.itemdatabound
   if e.item.itemtype = listitemtype.edititem then
    dim drv as datarowview = ctype(e.item.dataitem, datarowview)
    dim currentship as string = drv("shipvia")
    dim ddl as dropdownlist = ctype(e.item.cells(4).controls(1), dropdownlist)
    dim sql as string = "select shipperid, companyname from shippers order by shipperid"
    dim da as sqldataadapter = new sqldataadapter(sql, connstr)
    dim ds as new dataset
    dim item as listitem
    da.fill(ds, "shippers")
    ddl.datasource = ds.tables("shippers").defaultview
    ddl.datatextfield = "companyname"
    ddl.datavaluefield = "shipperid"
    ddl.databind()
    item = ddl.items.findbyvalue(currentship)
   if not item is nothing then item.selected = true
   end if
  end sub
  
    最后,编写从 dropdownlist 中检索当前选定值的代码,并执行数据库更新:
  
  private sub datagrid1_updatecommand(byval source as object, _
  byval e as system.web.ui.webcontrols.datagridcommandeventargs) _
  handles datagrid1.updatecommand
   dim ddl as dropdownlist = ctype(e.item.cells(4).controls(1), dropdownlist)
   dim newship as integer = ddl.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
  
    


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

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