有时候用GridView,DataPager配合使用绑定数据库,总算把数据库的数据读取出来,并且有‘首页-上一页-下一页-末页’显示,但是发现点击‘首页-上一页-下一页-末页’这些按钮的时候,总要点击两次。其实解决的方法很简单,只需在GridView的PreRender事件再绑定数据库一次即可。
因为页面先执行Page_Load,然后再GridView_PreRender。
下面请看详细例子:
一,前台页面的
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>GridView的应用</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView2" runat="server" onprerender="GridView2_PreRender">
<Columns>
<asp:TemplateField HeaderText="Id">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Id") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("Id") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Name">
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Name") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("Name") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:DataPager ID="DataPager1" PagedControlID="GridView2" PageSize="15" runat="server">
<Fields>
<asp:NextPreviousPagerField FirstPageText="首页" ShowPreviousPageButton="true" ShowLastPageButton="false"
ShowNextPageButton="false" ShowFirstPageButton="true" />
<asp:NumericPagerField />
<asp:TemplatePagerField>
</asp:TemplatePagerField>
<asp:NextPreviousPagerField LastPageText="末页" ShowFirstPageButton="false" ShowNextPageButton="true"
ShowPreviousPageButton="false" ShowLastPageButton="true" />
</Fields>
</asp:DataPager>
</div>
</form>
</body>
</html>
二,后台页面
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
bind();
}
}
public void bind() {
GridView2.DataSource = UserInfoService.GetUserInfo();//这个是你在服务层写好获取用户的集合list
GridView2.DataBind();
}
protected void GridView2_PreRender(object sender, EventArgs e)
{
bind();
}
}
可是问题来了,如果你想要在此页面再进行另外操作,如如果你要查询的操作,发现点击‘首页-上一页-下一页-末页’这些按钮的时候,依然要点击两次。解决此种情况,你可以在后台定义一个全局变量bFlag来标识你进行的是哪一种操作,页面触发的是哪一种事件。例子如下:
一,前台页面添加一个文本框TextBox和按钮Button,代码如下:
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Select" onclick="Button1_Click" /></div>
<div>
<asp:GridView ID="GridView2" runat="server" onprerender="GridView2_PreRender">
<Columns>
<asp:TemplateField HeaderText="Id">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Id") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("Id") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Name">
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Name") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("Name") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:DataPager ID="DataPager1" PagedControlID="GridView2" PageSize="15" runat="server">
<Fields>
<asp:NextPreviousPagerField FirstPageText="首页" ShowPreviousPageButton="true" ShowLastPageButton="false"
ShowNextPageButton="false" ShowFirstPageButton="true" />
<asp:NumericPagerField />
<asp:TemplatePagerField>
</asp:TemplatePagerField>
<asp:NextPreviousPagerField LastPageText="末页" ShowFirstPageButton="false" ShowNextPageButton="true"
ShowPreviousPageButton="false" ShowLastPageButton="true" />
</Fields>
</asp:DataPager>
</div>
</form>
</body>
二,后台的,定义一个全局变量bFlag,添加一个按钮触发事件Button1_Click和另外写一个bindSelect() 方法。代码如下:
public partial class _Default : System.Web.UI.Page
{
int bFlag = 0;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
bind();
}
}
public void bind() {
GridView2.DataSource = UserInfoService.GetUserInfo();
GridView2.DataBind();
}
protected void GridView2_PreRender(object sender, EventArgs e)
{
if (bFlag == 1)
bindSelect();
else
bind();
}
public void bindSelect() {
GridView2.DataSource = UserInfoService.GetUserInfoBySelect(txtName.Text);
GridView2.DataBind();
}
protected void Button1_Click(object sender, EventArgs e)
{
bFlag = 1;
bindSelect();//点击事件里面调用查询数据库的
}
}
分享到:
相关推荐
GridView的点击事件 GridView的点击事件 GridView的点击事件
ASP.net GridView双击事件,弹出一个窗口显示详细信息,模式窗口显示详细信息。
gridview+事件监听,因为csdn里问怎么监听更改图片,所以加了监听
asp.net中GridView常用事件集锦 C#版 开发环境:Visual Studio 2005 数据 :Access 2000 语言:c# 运行环境 :Microsoft.NET Framework v2.0
GridView 行单击与双击事件,功能:单击选中行 双击打开详细页面 说明:
gridview部分事件代码
ASPnet+GridView+双击事件 京华志&精华志出品 分享资源 C# ASP.NET SQL DBA 源码
[GridView控件]事件详解.doc
GridView模版列中动态添加事件
ASPX.NET中 GridView_按钮事件绑定 免费下载
android 网格组件9宫格,GridView展示数据 3*3排列显示。鼠标点击GridView中的某一个网格 触发相应的事件 在事件中传递参数 包括图片参数
gridview嵌套gridview实现内部gridview不显示完,可滑动,外部也可滑动,解决滑动冲突问题。适用于多种嵌套,listview,scrollview等。
GridView和GridData 行单击弹出详细页面 双击编辑状态更新
android 网格组件9宫格,GridView展示数据 3*3排列显示。鼠标点击其中一个网格 会触发事件,并传递参数
在单击 GridView 控件中的按钮时,将引发 RowCommand 事件。 GridView 控件具有内置功能,用于进行编辑、删除和分页等操作。 还可以添加按钮并使用 RowCommand 事件向控件添加自定义功能。 可以通过下面的方式向 ...
ListView嵌套GridView解决方案
Viewpager+Gridview响应点击事件,之前找的Demo不能实现点击事件。近来用到兴趣写的,有问题请指正!
Android_ScrollView与ListView_GridView共存冲突解决方案
解决DevExpress GridControl GridView 在新增数据行时数据为空的问题,新窗口数据返回时自动新增行并刷新。