Asp.net的GridView在实际的业务逻辑当中,客户都会提前很多不同的要求。就例如Column的动态显示或隐藏。最近在项目的开发当中遇到以下的要求:
1.GridView有一到两个Column是固定不变的。
2.通过设置软件动态地将在DB中已有的field显示出来。
小弟想了一个方法在这里和大家分享一下。
首先通过配置文件将要动态显示的列记录下来(例如使用一个list记录下来)。
然后在前台将所有要显示的列通过人手打出来。在默认的状态下这些字段是全部显示出来的。具体实现如下:
<asp:GridView ID="gridTransitionLog" runat="server" SkinID="GeneralGrid" Width="100%"
RowStyle-CssClass="gridViewHeaderB" PageSize="15" AutoGenerateColumns="false"
meta:resourcekey="gridSearchResultResource1" OnRowDataBound="gridTransitionLog_RowDataBound">
<Columns>
<asp:BoundField DataField="列对应DataTable的字段" HeaderText="列名" />
...
<asp:BoundField DataField="列对应DataTable的字段" HeaderText="列名"/>
</Columns>
</asp:GridView>
然后在后台代码中将从DB中搜索得到的数据绑定到GridView控件当中去。具体实现如下:
GridView1.DataSource = dvDetail;
GridView1.DataKeyNames = new string[] { “某个标示行的项”};
GridView1.DataBind();
然后的就是根据要显示的“列”列表设置GridView中显示那些列。具体实现如下:
for (int i = 0; i < GridView.Columns.Count; i++)
{
if (CheckAvaileColumn(GridView.Columns[i].HeaderText, CMTransactionLogFieldList)) 自己写一个检查函数检查是否显示列
GridView.Columns[i].Visible = false; 不显示列
}
这种方法可以通过设置软件在程序运行的时候动态决定到底要显示那一列。而且每列的资料只是看不见而且,看不见的列的数据依然可以被程序访问得到。
这方法其实挺笨的。但也算是满足了要求。如果有大侠有更好的办法。请多多指教。