需求:查询的多张类似的数据表,具体字段有差异,需要在后台动态生成列。
现有技术:大佬封装好的分页方法
学习各位网友的技术后,编码思路如下:
1.DataTable存储数据库查询到的数据
2.将DataTable的列字段插入GridView
后台代码:
#region 向GridView中插入动态数据列
/// <summary>
/// 向GridView中插入动态数据列
/// </summary>
/// <param name="lst">数据列</param>
private void InsertBoundFiled(List<string> lst)
{
BoundField boundField = new BoundField();
for (int i = 0; i < lst.Count; i++)
{
boundField = new BoundField();
boundField.HeaderText = lst[i];
boundField.FooterText = lst[i];
boundField.DataField = lst[i];
gvTest.Columns.Insert(i, boundField);
}
}
#endregion
前台代码:
<asp:GridView ID="gvTest" runat="server" Width="100%" AutoGenerateColumns="false" CssClass="gridview" EnableViewState="false" >
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
<RowStyle HorizontalAlign="Center"></RowStyle>
<Columns>
<asp:TemplateField HeaderText="操作" ItemStyle-Width="60px">
<ItemTemplate>
<asp:LinkButton ID="btnDetail" runat="server" data-options="iconCls:'icon-edit'"
PostBackUrl='<%#"Test.aspx?Params="+Eval("参数1")+","+Eval("参数2")+"" %>'>详情</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<AlternatingRowStyle CssClass="AlternatingRow" />
</asp:GridView>
tips:页面跳转使用了属性PostBackUrl
遇到的问题以及解决方案
1.点击一次查询按钮,列就会多生成一批,尽管已经添加了AutoGenerateColumns=“false”
解决方案:在前台GridView属性中添加EnableViewState=“false”
2.分页bug,点击下一页,内容会全部清空,返回到上一页,数据也都丢失了
解决方案:Debug调试后发现,点击下一页绑定数据时,GridView中只有操作列,所以在page_Load中补充再次插入数据列的操作
代码如下:
protected void Page_Load(object sender, EventArgs e)
{
try
{
if (!IsPostBack)
{
//根据自身情况编写
}
else
{
//如果GridView只有操作列,需要重新添加数据列
if (gvPLCData.Columns.Count == 1 && ColumnList.Count!=0)
{
//添加数据列
InsertBoundFiled(ColumnList);
}
}
}
catch (Exception ex)
{
//Log
}
}