ASP.NET2.0中动态添加GridView模板列

来源:互联网 发布:百度端口天龙八部 编辑:程序博客网 时间:2024/04/30 04:25
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
.Znq810{display:none;}

动态添加列,关键是实现ITemplate.InstantiateIn方法。下面是一个添加GridView模板列的例子。

C#代码

<%...@PageLanguage="C#"%>
<%...@ImportNamespace="System.Data"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<scriptrunat="server">...
 ICollectionCreateDataSource()
 ...{
   DataTabledt=newDataTable();
   DataRowdr;
   dt.Columns.Add(newDataColumn("id",typeof(Int32)));
   dt.Columns.Add(newDataColumn("text",typeof(string)));
   for(inti=0;i<6;i++)
   ...{
     dr=dt.NewRow();
     dr[0]=i;
     dr[1]="列表项目"+i.ToString();
     dt.Rows.Add(dr);
   }
   DataViewdv=newDataView(dt);
   returndv;
 }

 publicclassGridViewTemplate:ITemplate
 ...{
   privateDataControlRowTypetemplateType;
   privatestringcolumnName;

   publicGridViewTemplate(DataControlRowTypetype,stringcolname)
   ...{
     templateType=type;
     columnName=colname;
   }

   publicvoidInstantiateIn(System.Web.UI.Controlcontainer)
   ...{
     switch(templateType)
     ...{
       caseDataControlRowType.Header:
         Literallc=newLiteral();
         lc.Text=columnName;         
         container.Controls.Add(lc);         
         break;
       caseDataControlRowType.DataRow:
         DropDownListdrr=newDropDownList();
         drr.ID="dropdown";


         drr.AppendDataBoundItems=true;
         drr.Items.Add(newListItem("-----请选择------",""));
         drr.Items.Add(newListItem("AA","a"));
         drr.Items.Add(newListItem("BB","b"));
         drr.Items.Add(newListItem("CC","c"));
         container.Controls.Add(drr);
         break;
       default:
        break;
     }
   }
 }
 
 protectedvoidPage_Load(objectsender,EventArgse)
 ...{
   if(!IsPostBack)
   ...{
     TemplateFieldcustomField=newTemplateField();
     customField.ShowHeader=true;
     customField.HeaderTemplate=newGridViewTemplate(DataControlRowType.Header,"动态添加列");
     customField.ItemTemplate=newGridViewTemplate(DataControlRowType.DataRow,"");
     GridView1.Columns.Add(customField);
     GridView1.DataSource=CreateDataSource();
     GridView1.DataBind();
   }
 }

 protectedvoidGridView1_RowDataBound(objectsender,GridViewRowEventArgse)
 ...{
   if(e.Row.RowType==DataControlRowType.DataRow)
   ...{
     //可以在这里访问数据库的其它字段的值,可以设置默认选择项,具体应用,看自己的发挥了。
     //下面只是例子,举一反三,不再费话了
     DataRowViewgv=(DataRowView)e.Row.DataItem;
     intitemSeleted=Int32.Parse(gv.Row["id"].ToString())>3?0:Int32.Parse(gv.Row["id"].ToString());
     DropDownListdr=(DropDownList)e.Row.FindControl("dropdown");
     dr.SelectedIndex=itemSeleted;
   }
 }
</script>

<htmlxmlns="http://www.w3.org/1999/xhtml">
<headid="Head1"runat="server">
 <title>GridView动态添加模板列的例子</title>
</head>
<body>
<formid="form1"runat="server">
 <ASP:GridViewID="GridView1"runat="server"AutoGenerateColumns="False"
    OnRowDataBound="GridView1_RowDataBound">
   <Columns>
     <ASP:BoundFieldHeaderText="标题" DataField="text"/>
   </Columns>
 </ASP:GridView>
</form>
</body>
</html>

<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
原创粉丝点击