GridViw 绑定DataTable数据源 分页

[b]使用DataTable后分页有两种形式:[/b]
一、使用自定义的分页控件。显示多少数据就从数据库取多少数据(使用分页sql语句)。并且样式好控制。
例句如下:

select top 页容量 * from 表名 where 条件 and id not in (select top (当前页-1)*页容量 from 表名 where 条件 order by 排序字段 排序方向) order by 排序字段 排序方向


二、使用GridVeiw自己的分页,这时如果有关键字过滤搜索的话,在写sql语句的时候不要使用上面一中提到的sql语句。必须要将符合条件的数据全部给GridView。否则分页链接不显示,因为数据绑定的只是当前页的内容。
例句:

select * from 表名 where 条件 order by 排序字段 排序方向


三、简例
[b]aspx页面[/b]

<asp:GridView ID="gvFieldData" runat="server" AutoGenerateColumns="False" DataKeyNames="obj_id" AllowSorting="True" OnSorting="gvTableData_Sorting" PageSize="30" OnPageIndexChanging="gvTableData_PageIndexChanging"AllowPaging="true">
<Columns>
<asp:TemplateField HeaderText="详细说明" SortExpression="fld_mem" HeaderStyle-CssClass="headerCss">
<ItemTemplate>
<%#StringOP.GetRationLenContent(Eval("fld_mem"), 10)%>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="查看" HeaderStyle-CssClass="headerCss">
<ItemTemplate>
<div runat="server" id="editDiv">
<a href='javascript:edit(<%#Eval("fld_id")%>,<%#Eval("obj_id")%>)'>查看</a>
</div>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>

[b]cs内容[/b]

public DataTable dt
{
get { return ViewState["dt"] == null ? null : (DataTable)ViewState["dt"]; }
set { ViewState["dt"] = value; }
}
if (!IsPostBack)
{
ViewState["sortColumn"] = "fld_name";
ViewState["sortDirection"] = "asc";
}


//列排序
protected void gvTableData_Sorting(object sender, GridViewSortEventArgs e)
{
gvFieldData.EditIndex = -1;
if (ViewState["sortColumn"].ToString() == e.SortExpression.ToString())
{
if ("ASC" == ViewState["sortDirection"].ToString())
{
ViewState["sortDirection"] = "DESC";
}
else
{
ViewState["sortDirection"] = "ASC";
}
}
else
{
ViewState["sortColumn"] = e.SortExpression.ToString();
ViewState["sortDirection"] = "ASC";
}

string orderString = "";
orderString = ViewState["sortColumn"].ToString() + " " + ViewState["sortDirection"].ToString();
GetFieldInfo(false, orderString); //此为自定义数据绑定方法
}


//翻页
protected void gvTableData_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
gvFieldData.PageIndex = e.NewPageIndex;
string orderString = "";
orderString = ViewState["sortColumn"].ToString() + " " + ViewState["sortDirection"].ToString();
PaginationFunciton(e.NewPageIndex + 1, 30, orderString, txtSearchKey.Text); //自定义按关键字取数据方法
}


private void PaginationFunciton(int pageIndex,int pageNum,string orderStr,string keyStr)
{
string sql = "select a.*,b.obj_id,b.obj_name,c.mc from zd_yw_field as a inner join zd_yw_object as b on a.obj_id=b.obj_id inner join zd_sys_bmk as c on a.fld_ywlb = c.bm where c.lb ='4' and (fld_name like '%" + keyStr + "%' or fld_mc like '%" + keyStr + "%' or fld_mem like '%" + keyStr + "%')";
DataTable d = SqlHelper.ExecuteQuery(sql);
gvFieldData.DataSource = d;
gvFieldData.DataBind();
GridViewOP.GetNullTip(d, gvFieldData);
}


protected void GetFieldInfo(bool isSearch, string orderString)
{
if (string.IsNullOrEmpty(orderString))
orderString = "fld_name";
string sql = "select a.*,b.obj_id,b.obj_name,c.mc from zd_yw_field as a inner join zd_yw_object as b on a.obj_id=b.obj_id inner join zd_sys_bmk as c on a.fld_ywlb = c.bm where c.lb ='4' order by " + orderString;
dt = SqlHelper.ExecuteQuery(sql);

if (isSearch)
{
DataView dv = dt.DefaultView;
dv.RowFilter = "fld_name like '%" + KeyConent + "%' or fld_mc like '%" + KeyConent + "%' or fld_mem like '%" + KeyConent + "%'";
dt = dv.ToTable();
}
gvFieldData.DataSource = dt;
gvFieldData.DataBind();

GridViewOP.GetNullTip(dt, gvFieldData); //当无数据时的提示
}


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

namespace Common
{
/// <summary>
/// 文件名: GridViewOP.cs
/// 描述: 列表控件操作类
/// 版权: 北京****技术有限公司
/// 作者: ****
/// 创建时间: 2010-2-25
/// 修改者: ******
/// 修改时间:******
/// 修改描述:******
/// </summary>
public class GridViewOP
{
/// <summary>
/// GridView无数据时友好提示
/// </summary>
/// <param name="dt">DatTable实例</param>
/// <param name="gv">操作GridView对象</param>
public static void GetNullTip(DataTable dt, GridView gv)
{
if (dt.Rows.Count == 0)
{
dt.Rows.Add(dt.NewRow());
gv.DataSource = dt;
gv.DataBind();
int columnCount = gv.Rows[0].Cells.Count;
gv.Rows[0].Cells.Clear();
gv.Rows[0].Cells.Add(new TableCell());
gv.Rows[0].Cells[0].ColumnSpan = columnCount;
gv.Rows[0].Cells[0].Text = "无内容";
gv.RowStyle.HorizontalAlign = System.Web.UI.WebControls.HorizontalAlign.Center;
}
}

/// <summary>
/// DataList无数据时友好提示
/// </summary>
/// <param name="dt">DatTable实例</param>
/// <param name="dl">操作DataList对象</param>
public static void GetNullTip(DataTable dt ,DataList dl)
{
if (dt.Rows.Count == 0)
{
dt.Rows.Add(dt.NewRow());
dl.DataSource = dt;
dl.DataBind();
Label l = new Label();
l.Text = "对不起,没有您所查询的产品!";
dl.Items[0].Controls.Clear();
dl.Items[0].Controls.Add(l);
}

}
}
}


以上只是一个小问题,但工作遇到了记录一下。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值