代码改变世界

ASP.NET DEMO 17: 动态创建GridView绑定列/模板列

2008-05-25 23:39 by 晓风残月, ... 阅读, ... 评论, 收藏, 编辑
  • 可以发现运行时创建GridView模板列是很繁琐的事情,因此没有特殊需求,应该使用页面声明方式,动态解析构造Template这些繁琐易错的事情交由ASP.NET解析器完成。
  • 运行时动态任何服务器控件,必须确保每次请求/回发时,动态创建控件代码都能运行,典型错误是将这些放在一个Button_Click中,当其他PostBack的时候,这些控件将会丢失。
  • 代码技巧:匿名方法与 as 关键字的使用(C#中类型转换)
  • 很多朋友想通过动态创建列,来按需加载目标列,想法是好的,但鉴于ASP.NET原理特别是生命周期与ViewState的特殊性,这是易错又吃力不讨好的苦差事。
    个人建议是使用:
    • 假如DataSource是DataTable/DataView(或者DTO),使其包含只需要的Column,设置GridView.AutoGenerateColumns=true,由GridView内部在运行时自动反射创建列。
    • 以声明方式声明全部所需的Column,运行时调整GridView.Columns[index].Visible来控制列的可见性。
  • 代码下载
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%--http://topic.csdn.net/u/20080523/01/bab3a401-ab6d-4a9f-b946-aa04ea132442.html--%>
<%--ASP.NET 2.0中动态添加GridView 模板列的例子http://dotnet.aspx.cc/article/897cb049-ccff-4fe7-b990-df974493a0b1/read.aspx (孟老大)--%>
<script bacdwcff-4fe7-l Ue="color: bla6d-4a9f-.lor.>&lR style="i>
    
  • 很多 服留备 /> }ndpub void Instanti别In(9%a3rol e="top"><) { switch (rowTnt") { cas @ Im9%a3rolRowTnt".H : /Minral ltlH vpt"nn s/Minral ltlH v.T pt"; .ToStr"ht e="top"><.9%a3rols.(ltlH v bcffk; cas @ Im9%a3rolRowTnt".@ ImRow: switch (; ) { cas e=ud>
  • { object d ImIlt;pt"((s var 码9%a3rol).r: "htC="top"><码 何定pMnu">源 S/sp
  • 假如Data ogpobr />强 关 ataiew内,提升isi动 lnke=ud> />pMnu">源ble/Da />ew内,列isi动为wDy价 } e="top"><.9%a3rols.(lnke=ud><码 <.9%a3rols.(ltlr: # bcffk; cas e=ud><码 &项 } e="top"><.9%a3rols.(ddlG var bcffk; default: throw nn sInvalidOpmnR/xExcepR/x("NotSup-coled e=ud> d pt"at/DEMeae@ Im();不讨不讨tyle=ud> pt"dt;不讨tyle=ud> at/DEMeaeEmpty
  • ()不讨{不讨
  • tblpt"nn sD
  • ("e=ud> at/DEMeae@ Im()不讨{不讨
  • tblpt"at/DEMeaeEmpty
  • ();不讨不讨tblRowG.("20021342", "Jack", "Wu", 25, "M");不讨tblRowG.("20025341", "Jue", "You", 23, "F");不讨tblRowG.("20022254", "Viky", "Huor:", 24, "F");不讨tblRowG.("20022231", "Leo", "Wor:", 24, "M");不讨不讨 onclictbl;不讨}不讨不讨# varegR/x不讨不讨protected void nd-c_Init(object s var , Ev>ASP.NET DE不讨at/DEMe=ud>,刟理特别填充pMnu">不讨derP!IsButton_C)不讨{不讨Showe=ud>%> <> <script bacdwcff-4fe7-l UTML 1.0 Transition1999://wwwor: bla6d-4a9f-.lor.>&lR style="i>
  • 很多or: #0000ff;">> <script bacdwcff-4fe7-l UH 1"le="color: #800000;">script bacdwcff-4fe7-l Ue="color: bla6d-4a9f-.lor.>&lR style="i>
  • 很多or: #0000ff;">> < r: bla6d-4a9f-.lor.>&lR style="i>
  • 很iles.cnblogs.com/Jinglecat/DEMO17_G: #ffff00;">%> < r: bla6d-4a9f-.lor.>&lR style="i>
  • 很宨: #ffff00;">%> <
  • 很多or: #0000ff;">> <&lR style="i>
  • 很多or: #0000ff;">> <script bacdwcff-4fe7-l Ufore1"le="color: #800000;">script bacdwcff-4fe7-l Ue="color: bla6d-4a9f-.lor.>&lR style="i>
  • 很多or: #0000ff;">> <&lR style="i>
  • 很多or: #0000ff;">> <&lR style="i>
  • 很多ns=true,162.html">ASP.NET DE各种MO 17: 劊: #ffff00;">%> <&lR style="i>
  • 很多or: #0000ff;">> <&lR style="i>
  • 很多or: #0000ff;">> <&lR style="i>
  • 很ogpost-body">
    • 可以发现运行时创建GridView模板列是很繁琐的事情,因此没有特殊需求,应该使用页面声明方式,动态解析构造Template这些繁琐易错的事情交犛不讨: #ffff00;">%> <&lR style="i>
    • 很多or: #0000ff;">> <&lR style="i>
    • 很完成。
    • 运行时动态任何服务器控件,必须确保每次请求/回发时,动态创建控件代码都能运行,典型错误是将这些放在一个Button_Click中,当其他PostBack的时候,不讨: #ffff00;">%> <&lR style="i>
    • 很多or: #0000ff;">> <&lR style="i>
    • 很丢失。
    • 代技巧:匿名方法与 as 关键字的佊: #ffff00;">%> <&lR style="i>
    • 很多or: #0000ff;">> <&lR style="i>
    • 很转换)
    • 很多朋友想通过动态创建列,来按需加载目标列,想法是好的,但鉴于ASP.NET原理特别是生命周期与ViewState的特殊性,这是易错又吃不讨: #ffff00;">%> <&lR style="i>
    • 很多苦差事。
      : #ffff00;">%> <&lR style="i>
    • 很多or: #0000ff;">> <&lR style="i>
    • 很多or: #0000ff;">> <&lR style="i>
    • 很oi>
      • 假如DataSource是DataTable/DataView(或者DTO),使其包含只需要的Column,设置GridView.AutoGenerateColumns=true,由GridView内部在运行不讨: #ffff00;">%> <&lR style="i>
      • 很多or: #0000ff;">> <&lR style="i>
      • 很。
      • 以声明方式声明全部所需的Column,运行时调整GridView.Columns[index].Visible: #ffff00;">%> <&lR style="i>
      • 很多or: #0000ff;">> <&lR style="i>
      • 很多or: #0000ff;">> <&lR style="i>
      • 很多or: #0000ff;">> <script 很多or: #0000ff;">> <script bacdwcff-4fe7-l U误是2"le="color: #800000;">script bacdwcff-4fe7-l Ub是"le="color: #800000;">script bacdwcff-4fe7-l URedirect"le="color: #800000;">script yle="color: #ff0000;">bacdwcff-4fe7-l Ulosd.xml.li> losd.xml.li> ;"le="color: #800000;">script 很多or: #0000ff;">> <<script bacdwcff-4fe7-l U误是1"le="color: #800000;">script bacdwcff-4fe7-l Ue="color: bla6or: #800000;">script bacdwcff-4fe7-l UButton_Cor: bla6or: #800000;">script yle="color: #ff0000;">bacdwcff-4fe7-l U误是1将这"le="color: #800000;">script 很多or: #0000ff;">> <<script bacdwcff-4fe7-l UPlaceHolar 1"le="color: #800000;">script bacdwcff-4fe7-l Ue="color: bla6d-4a9f-.lor.>&lR style="i>
      • 很or: #0000ff;">> <<
      • 很多or: #0000ff;">> <&lR style="i>
      • 很多or: #0000ff;">> <&lR style="i>
      • 很多or: #0000ff;">> <&lR style="i>
      • 很多or: #0000ff;">> <&lR style="i>
      • 很多o/ /small>iv class=MySig sturel>
        编辑 info "
        info"
        编辑 n _vie /javascript"> 'an> 阅fore'>"post"i"> '">s - 193Show'e i"> 'an> 阅nav'ld-4a9f '-4a9_i> resh_tips'e ="cold
      • 'ipt> ' onclicR> reshs - 193List 'f 'lnk_R> reshs - 193s' an st '-="col'divi193idmodt>'S ic'>刷新_comme"posd '#' ' onclicR> reshnd-c '>刷新特殊"posd '#top'>返回顶部eateOn i"> 'an> 阅fore_e="top"><'e i">iv id='ad_ 阅box'f 'ad_ 阅box'eOn i"> 'ad_<2'eOn i"> 'opcpu m =p "><'e i"> 'aentry">c1'div id='a_ad_ 'e i"> 'u m =p ">< nws'e i"> 'aentry">c2'div id='a_ad_ 'e i"> 'u m =p ">< kb'e i"> 'HistosmToday'div id='a_ad_ 'e i/javascript"' imd-c"vascript"> _detaiq.