GridView动态生成列之一

 今天做了一个功能,根据页面不同的按钮预览关联的数据列表,之前用MultiView 实现了此功能,后来查找资料通过动态生成GridView列生成预览效果,

 现分享如下:

 数据源:Excel /Access/sql....

 环境:VS 2008

一、普通列显示:

     公共方法:

代码
    /// <summary>
    
/// 绑定生成GridView
    
/// </summary>
    
/// <param name="gdv">要绑定的GridView</param>
    
/// <param name="dtblDataSource">GridView的数据源</param>
    
/// <param name="strDataKey">GridView的DataKeyNames</param>
    public static void GridViewBind(GridView gv, DataTable source, string dataKeys)
    {
        gv.Columns.Clear();

        gv.AutoGenerateColumns 
= false;
        gv.DataSource 
= source;
        gv.DataKeyNames 
= new string[] { dataKeys };

        
for (int i = 0; i < source.Columns.Count; i++)   //绑定普通数据列
        {
            BoundField bfColumn 
= new BoundField();
            bfColumn.DataField 
= source.Columns[i].ColumnName;
            bfColumn.HeaderText 
= source.Columns[i].Caption;
            
            gv.Columns.Add(bfColumn);
        }

        
//gv.Columns[1].Visible = false;

        CommandField field 
= new CommandField();  //绑定命令列
         field.ButtonType = ButtonType.Button;
        field.SelectText 
= "修改";
        field.ShowSelectButton 
= true;
        gv.Columns.Add(field);

        gv.DataBind();
    }

 二 aspx页面:GridViewDynamicBind.aspx,

   

代码
    <form id="form1" runat="server">
    
<div>
            
<table width="100%" border="0" cellpadding="0" cellspacing="0">
        
<tr>
             
<td align="right">
                 
<table>
                     
<tr align="right">
                     
</tr>
                 
</table>
             
</td>
            
</tr>
            
<tr>
                
<td height="12"><img src="http://images.cnblogs.com/spacer.gif" alt="" width="1" height="1" border="0"/> </td>
            
</tr>           
            
<tr >
             
<td> 
                 
<table>
                    
<tr>
                       
<td><img src="http://images.cnblogs.com/common/general/arrow1.gif" alt="" width="9" height="10" border="0"/></td>
                       
<td>费用类型: </td>
                       
                        
<td>
                            
<asp:RadioButtonList ID="rblType" runat="server" RepeatDirection="Horizontal">
                            
</asp:RadioButtonList>
                        
</td>
                    
</tr>
                    
<tr>
                       
<td><img src="http://images.cnblogs.com/common/general/arrow1.gif" alt="" width="9" height="10" border="0"/></td>
                       
<td>文件: </td>
                       
                        
<td>
                            
<asp:FileUpload ID="fupload" runat="server" />
                            
<asp:Button ID="btnView" runat="server" Text="上传预览" onclick="btnView_Click" /><span style="FONT-SIZE: 13px; COLOR: #0000ff; FONT-FAMILY: ''cb'ce'cc'e5'">&nbsp; 说明:选择指定模板的数据文件</span>
                        
</td>
                    
</tr>
                 
</table>
             
</td>
           
</tr>
            
<tr>
               
<td height="12">
                   
<asp:GridView ID="gvlist" runat="server" 
                       onselectedindexchanged
="gvlist_SelectedIndexChanged">
                   
</asp:GridView>
                
</td>
            
</tr>
            
</table>
    
</div>
    
</form>

 

 GridViewDynamicBind.cs:

 

代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;

public partial class Template_GridViewDynamicBind : System.Web.UI.Page
{
    
protected void Page_Load(object sender, EventArgs e)
    {

    }
    
protected void btnView_Click(object sender, EventArgs e)
    {
        //Helper.GridViewBind(
this.gvlist, this.getDataTable(), "供应商编号");  // 可为Helper公共类
      GridViewBind(this.gvlist, this.getDataTable(), "供应商编号");
    }

    
public DataTable getDataTable()
    {
        
try
        {
            
string filePath = this.fupload.PostedFile.FileName;
            DataTable dt 
= Helper.BatchImportExcelToDataTable("", filePath);
            
return dt;
        }
        
catch (Exception e)
        {
            
throw e;
        }

    }
    
protected void gvlist_SelectedIndexChanged(object sender, EventArgs e)
    {
        Response.Write(
this.gvlist.DataKeys[this.gvlist.SelectedIndex].Value);
    }
}

 

三、效果图:

功能说明:

       有一个RadioButtonList,是类别的自由切换(既所谓的切换效果,根据选择的不同,显示不同类别的数据.).

       我此处是为了截取部分功能通过上传Excel文件为数据源: DataTable dt = Helper.BatchImportExcelToDataTable("", filePath); 数据源自己可自由设置.

       并且输出: gvlist_SelectedIndexChanged,输出所选择行的Response.Write(this.gvlist.DataKeys[this.gvlist.SelectedIndex].Value);

 

四、基本功能已经完成,其他事件同理可得.

posted @ 2010-06-28 17:57  飞跃  阅读(736)  评论(0编辑  收藏  举报