2012-06-11 149 views
1

我已经阅读了几篇文章和教程,但我无法弄清楚这一点。一切都基本上说,“哦,只要打开AllowPaging,你就完成了!”当我这样做时,是的,我可以在设计视图中的GridView下看到分页控件,但是当我编译时,我看不到正在运行的站点中的页码。ASP.Net GridView不显示页码

我发现有一点与所有例子不同,我从代码隐藏的角度来做数据工作。因此,我的GridView很简单:

<asp:GridView ID="gvlatest" runat="server" Width="99%" AllowSorting="True" 
       onrowdatabound="gvlatest_RowDataBound" onsorting="gvlatest_Sorting" 
       AllowPaging="True" PageSize="2" /> 

我这样做,从后面的数据工作的意思,是所有列的一切,从代码构建成一个DataTable,然后我设置了GridView的数据源到数据表。例如,一个非常简化版本我有:

DataTable temptable = new DataTable(); 
DataColumn titlecol = new DataColumn(); 
titlecol.ColumnName = "Title"; 
temptable.Columns.Add(titlecol); 
gvlatest.DataSource = temptable; 
gvlatest.DataBind(); 

这只是一个个人喜好我猜,并说实话我其实从来没有学会如何使用DataSource控件并使得所有的例子正在使用,你在使用的列.aspx文件,数据源等,所以我猜我的问题在于大方向建立在GridView ...

的问题是,什么我做错了吗?为什么页码不显示?我真的需要将“AllowPaging”设置为true吗?

+0

有多少行没有在表中? – adatapost

+0

大约有30个。查询数据库和构建DataTable,然后将该DataTable作为GridView的DataSource应用于Page_Load。 – CptSupermrkt

回答

3

页面调度工作,你的数据源必须支持它。如果它不像DataTable一样,那么你必须自己做这个。

此代码应该有所帮助。

OnPageIndexChanging="myGridview_PageIndexChanging" 

protected void myGridview_PageIndexChanging(object sender, GridViewPageEventArgs e) 
{ 
    GridView gv = (GridView)sender; 
    DataView dv = gv.DataSource as DataView; 
    DataTable dataTable = dv.Table; 

    gv.DataSource = myDataTable; 
    gv.PageIndex = e.NewPageIndex; 
    gv.DataBind(); 
} 
+0

这样做的伎俩,但现在我遇到了一个完全奇怪的问题。在我的RowDataBound事件中,我有一行:e.Row.Cells [0] .Visible = false; (该列是ID列,我希望它出现在gridview中,但不可见)。如果此行存在,则不会显示分页控件。注释掉这一行,它们显得很好...... – CptSupermrkt

+1

asp.net网格需要你的主键来知道哪一行发生了变化。你不能让它们看起来为false,导致它们不能在html中呈现。使用css来隐藏它。样式'display:none'将会做到这一点。 – nunespascal

0

您可以禁用特定的列,并添加分页

protected void Gridview1_RowDataBound(object sender, GridViewRowEventArgs e) 
     { 

      if (e.Row.RowType == System.Web.UI.WebControls.DataControlRowType.DataRow) 
//----------------------------------Grid view column invisible------------------------------------------------------------ 
       if (Request.QueryString.Get("show") == "all") 
        GridView1.Columns[0].Visible = true; 
       else 
        GridView1.Columns[0].Visible = false; 

       //------------------------------------------------------------------------------------------------------------------------- 

} 

protected void Gridview1_PageIndexChanging(object sender, GridViewPageEventArgs e) 
     { 

      GridView1.PageIndex = e.NewPageIndex; 
      gvbind();// Grid View Binded 

     } 

// Source Code 
allowpaging="true" OnPageIndexChanging="Gridview1_PageIndexChanging" pagesize="2"