none
GridView 顯示不出分頁數字 RRS feed

  • 問題

  • 小弟最近寫完網頁以後,因為某些原因要將原本的FrameWork 4.5降到4.0

    幾乎所有功能都還可以正常運行,最後唯獨GridView的分頁功能無法正常運行Orz

    之前是用GridView.VirtualItemCount製作,但FrameWork4.0不支援

    更改以後沒有辦法產生分頁

    Allowpaging等該為True的都為True,

    PageSize為15,抓到50筆資料,但沒有產生分頁(下面沒有分頁數字1.2.3...5..可以按)

    原本想法是因為:
    雖然我資料量有50,
    但在執行時下面這段程式碼時,只抓15筆,所以沒分頁

    private void GetPageData(int currentPage) {

    //這邊會取得全部50筆資料  string query = GetQueryStr(0);

    //將範圍縮小在15筆資料  query += " Order By c.cert_not_before DESC OFFSET " + (currentPage * GridView1.PageSize) + " ROWS FETCH NEXT " + (GridView1.PageSize) + " ROWS ONLY";

     //開始進行查詢 

    StartQuery(query); }

    但是我把中間query+那行註解掉以後,抓滿50筆資料,依然沒有分頁按鈕產生,

    而且我認為沒有分頁按鈕,並沒有跑到那行

    多次測試也的確有抓到50筆資料(但只會出現第1-15筆資料,按一下反排序會出現第50-35筆資料)

    GridView.PageCount也為唯獨,不能直接改
    完整程式碼:

    [BrowsableAttribute(false)] 
    	public virtual int VirtualItemCount { get; set; } 
    	#region 點選按鈕後開始查詢 
    	protected void btnUnblockPIN_Click(object sender, EventArgs e) 
    	{ 
    	    string[] roleid = (string[])Session["RoleID"]; 
    	    VirtualItemCount = GetPageCount(); 
    	    if (VirtualItemCount == 0) 
    	    { 
    	        GridView1.DataSource = null; 
    	        GridView1.DataBind(); 
    	        Utils.WriteLoginLog(Session["Name"].ToString(), "14", "-1",            roleid[0], "No data");  
    	        Label7.Text = "查無資料"; 
    	        Label7.Visible = true; 
    	        return; 
    	    }         
    	    //GridView1.PageSize = VirtualItemCount; 
    	    GetPageData(0); 
    	} 
    	#endregion 
    	
    	#region 取得資料數 
    	private int GetPageCount() 
    	{ 
    	    string[] roleid = (string[])Session["RoleID"]; 
    	    int myPageCount = 0; 
    	    #region 設置顯示條件 
    	    DataTable dt = null; 
    	    string query = GetQueryStr(1); 
    	    try 
    	    { 
    	        dt = Utils.MIMSQLQuery(Utils.Setting.DB.MIMConnectString, query, null); 
    	        if (dt != null && dt.Rows.Count > 0) 
    	        { 
    	            myPageCount = Convert.ToInt32(dt.Rows[0][0]); 
    	        } 
    	    } 
    	    catch(Exception ex) 
    	    { 
    	        log.Debug("catch,Please check DB can be connect and have data"); 
    	        log.Debug("exception:"+ex.ToString()); 
    	    } 
    	    return myPageCount; 
    	} 
    	#endregion          
    	
    	#region  取得查詢字串後,為提升效能,依據第幾分頁,查詢該筆分頁的資料而已 
    	private void GetPageData(int currentPage) 
    	{ 
    	    string query = GetQueryStr(0); 
    	    query += " Order By c.cert_not_before DESC OFFSET " + (currentPage * GridView1.PageSize) + " ROWS FETCH NEXT " + (GridView1.PageSize) + " ROWS ONLY"; 
    	    StartQuery(query); 
    	} 
    	#endregion                  
    	 
    	protected string GetQueryStr(int IsPageCount) 
    	{ 
    	     //滿滿條件 
    	}  
    	
    	#region 開始查詢 
    	private void StartQuery(string query) 
    	{ 
    	    DataTable dt = null; 
    	    try 
    	    { 
    	        string[] roleid = (string[])Session["RoleID"]; 
    	        dt = Utils.MIMSQLQuery(Utils.Setting.DB.MIMConnectString, query, null); 
    	        if (dt == null || dt.Rows.Count == 0) 
    	        { 
    	            GridView1.DataSource = null; 
    	            GridView1.DataBind(); 
    	            Utils.WriteLoginLog(Session["Name"].ToString(), "14", "-1", roleid[0], "No data"); 
    	            Label7.Text = "查無資料" + query; 
    	            Label7.Visible = true; 
    	        } 
    	        else 
    	        { 
    	            GridView1.DataSource = dt; 
    	            GridView1.DataBind(); 
    	            dtt = dt; 
    	            Utils.WriteLoginLog(Session["Name"].ToString(), "14", "0", roleid[0], ""); 
    	        } 
    	    } 
    	    catch (Exception ex) 
    	    { 
    	        log.Debug("StartQuery ,Exception:" + ex.ToString()); 
    	    } 
    	} 
    	#endregion 
    	
    	#region 點選換頁後 
    	protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) 
    	{ 
    	    GridView1.PageIndex = e.NewPageIndex; 
    	    GetPageData(e.NewPageIndex); 
    	} 
    	#endregion 


    記得以前也發生過分頁數字無法正常顯示的類似問題,但當初不同的是分頁數字離超遠超大,格式很醜

    最後發現是jquery還bootstrap版本衝突,砍掉一個就沒事了

    這次問題查國外網站類似的狀況解決方法也是因為js的關係,但一個一個註解或一次註解多個.js檔.css檔也沒辦法解決

    所以希望能請前輩協助,指點迷津,

    附上引用.js檔

      <link href="Styles/bootstrap.css" rel="stylesheet" />
      <link href="Styles/Site.css" rel="stylesheet" />
      <link href="Styles/style.css" rel="stylesheet" />
      <%--<link href="Styles/jquery-ui.css" rel="stylesheet" />--%>
       <script src="Scripts/jquery-1.9.1.min.js"></script>
       <script src="Scripts/bootstrap.min.js"></script>  
      <%--    <script src="Scripts/jquery.js"></script>
       <script src="Scripts/jquery-ui.js"></script>--%>

    GridView 

     <asp:GridView ID="GridView1" runat="server" AllowSorting="True" CssClass="grid table table-hover table-striped"  OnRowCreated="GridView1_RowCreated" OnSorted="GridView1_Sorted" OnSorting="GridView1_Sorting" AllowCustomPaging="True" AllowPaging="True" OnPageIndexChanging="GridView1_PageIndexChanging" >
               <Columns>
                <asp:TemplateField HeaderText="序號">
              <ItemTemplate>
                 <%#GridView1.PageIndex * GridView1.PageSize + GridView1.Rows.Count + 1%>
               </ItemTemplate>
               <HeaderStyle Wrap="False"  />
                <ItemStyle  HorizontalAlign="Center" VerticalAlign="Middle" />
      </asp:TemplateField>
            </Columns>
    
             </asp:GridView>


    解了非常非常久了,但真的沒辦法才上來發問

    還麻煩前輩指點迷津,謝謝前輩了


    2017年1月19日 上午 08:55

解答

所有回覆

  • 你把 GridView 的 AllowCustomPaging 改成 False 試試看。
    • 已標示為解答 HumorA 2017年1月23日 上午 02:21
    2017年1月19日 下午 09:23
  • 前輩,很抱歉那麼晚回應

    這幾天都在醫院..

    -

    但我這邊的GridView沒有AllowCustomPaging選項

    後來查MSDN發現AllowCustomPaging似乎在Framework 4.5後才開始提供

    而我因為降版降到Framework 4.0,因此沒有這選項

    我後來想想,Framework4.5可以正常顯示分頁

    而4.0不能,所以是不是可以排除JavaScript影響這可能性?

    很想學會,非常感謝前輩們的指教

    2017年1月23日 上午 01:28
    • 已標示為解答 HumorA 2017年1月23日 上午 02:24
    2017年1月23日 上午 02:06
  • 對不起各位

    是我蠢,當初從4.5複製過去到4.0環境

    有印象有設定allowcustompaging

    但剛剛找不到屬性就想說沒有。

    拿掉以後,就可以成功跑出分頁了

    非常感謝各位前輩


    • 已編輯 HumorA 2017年1月23日 上午 02:21 打錯字了
    2017年1月23日 上午 02:21