none
gridview 分頁問題 RRS feed

  • 問題

  • 程式是用ASP.NET C#

    假設我目前有11筆資料 

    我要抓第11筆資料的話

    int index =11;

    gridview.row[index].cells[5].control[1]  正常來說應該是這樣

    可是因為我的gridview每10筆換一頁

    所以我的第11筆資料會在第2頁

    可是這樣問題來了 如果index還是11 會超出索引直

    可是如果變成0(第二頁第一筆 列數是0)

    那他會變成第一頁的第一筆 而不是第二頁第一筆

    請問各位大大有好的解決方法嗎?

    2012年3月8日 下午 04:06

解答

所有回覆

  • 你的需求是什麼?一頁只顯示十筆,為什麼會需要抓第11筆的資料?

    如果畫面上只有十筆的話,使用者不可能會對第11筆有任何操作吧。

    2012年3月8日 下午 04:26
    版主
  • 阿尼大大  這樣說好了

    因為我每一筆gridview資料都要有斷行的效果也就是\r\n <br>

    所以 我在讀取頁面時 必須每一筆資料都跑過一次(做斷行處理)

    或者是每換一頁 那一頁就要做斷行處理這樣

    我現在的問題是

    因為我gridview一開始就在第一頁  所以第一頁很簡單可以做斷行處理

    可是當我換頁時  他卻不會做斷行的處理 因為我的程式碼抓的row

    是第一頁的 而不是我所點取的

    2012年3月8日 下午 04:48
  • 換頁的時候有PageIndexChanged事件可以用,你可以在這個事件處理常式裡去做斷行處理。

    或是直接用javascript去做斷行,這樣比較直接了當。

    2012年3月8日 下午 05:18
    版主
  • 你的分頁是 T-SQL 做,還是 GridView 做?

    blog.kkbruce.net
    Plurk
    Google+專頁

    春有百花秋有月,
    夏有涼風冬有雪,
    若無閒事在心頭,
    便是人間好時節。

    2012年3月8日 下午 05:22
  • griview
    2012年3月8日 下午 05:43
  • 請教我如何用javascipt做...
    2012年3月8日 下午 05:44
  • 一、先改用 DataBase 來進行分頁,找一下 Row_Number

    http://technet.microsoft.com/zh-tw/library/ms186734.aspx 

    http://www.dotblogs.com.tw/jeff-yeh/archive/2008/04/08/2614.aspx 

    二、DataBase 處理好了之後,每次都只會回傳"固定數量(筆數)",再執行你的程式看看。 

    三、你說的斷行是說,把資料庫裡的 \r\n 換成 <br />,是嗎? 

    四、「因為我的程式碼抓的row」 <-- 可以的話,請提供程式碼?我們抓了半天,萬一是這裡出問題,那就要進行通靈模式才有辦法。 

    五、了解GridView事件(Event) 阿尼提出的辦法為什麼不可行,你也交帶一下,不要連試都沒試就要求解。


    blog.kkbruce.net
    Plurk
    Google+專頁

    春有百花秋有月,
    夏有涼風冬有雪,
    若無閒事在心頭,
    便是人間好時節。

    2012年3月8日 下午 11:55
  • 你處理斷行的程式在哪裡?有用過 RowDataBound 事件嗎?

    小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
    雲端學堂Facebook: http://www.facebook.com/studyazure

    2012年3月9日 上午 01:11
    版主
  • 阿尼大大  這樣說好了

    因為我每一筆gridview資料都要有斷行的效果也就是\r\n <br>

    所以 我在讀取頁面時 必須每一筆資料都跑過一次(做斷行處理)

    或者是每換一頁 那一頁就要做斷行處理這樣

    我現在的問題是

    因為我gridview一開始就在第一頁  所以第一頁很簡單可以做斷行處理

    可是當我換頁時  他卻不會做斷行的處理 因為我的程式碼抓的row

    是第一頁的 而不是我所點取的

    請問你的斷行效果是在哪裡做?就我所知PageSize設定多大,你的RowIndex就不能超過它。

    或許可以把它寫在RowDataBound事件中,看看能否解決你的問題。

    http://msdn.microsoft.com/zh-tw/library/system.web.ui.webcontrols.gridview.rowdatabound(v=vs.90).aspx


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年3月9日 上午 01:17
  • 建議您不要一次把全部資料都Load給GridView再做分頁,這樣當您資料一多效能會很差

    建議改用T-SQL方式在DB端就分好頁,當使用者點選哪一頁,才Load回該需所需的筆數資料

    這樣一來您就可以在RowDataBound事件去處理換行的動作了

    T-SQL範例可以參考這篇文章http://www.dotblogs.com.tw/jimmyyu/archive/2009/11/09/11499.aspx

    另外有關GridView的討論可參考 : http://www.blueshop.com.tw/board/show.asp?subcde=BRD20101011131938N0E


    軟體開發領域裡區區一個迷途工程師
    MyBlog: http://www.dotblogs.com.tw/ian/
    開發ASP.NET您要瞭解的基楚

    2012年3月9日 上午 01:26
    版主
  • gridview.row[index].cells[5].control[1]

    這樣的指令是只抓你當前Gridview顯示資料裡的Row, Cell, Control
    即便你是第51筆資料,在第五頁的時候
    也是gridview.row[0].cells[XX].control[XX]

    你的分頁是怎麼做? 直接利用sqldatasource Bind Gridview?
    還是自己寫好的Source 丟給 GridView,
    如果是後者,就要將分頁的方法寫在PageIndexChanged之類,

    而你說的每筆資料要做斷航處理,目前你是寫在哪?
    你可以依照tarry說的寫在RowDataBound~

    在這裡面你要抓資料的話,就可以直接使用 

     if(e.Row.RowType == DataControlRowType.DataRow)
     { 
          e.Row.Cells[1].........
     }

    去做每一行資料的處理~

    請參考一下過去的關於每筆資料內容處理的討論

    http://social.msdn.microsoft.com/Forums/zh-TW/236/thread/e4108862-56c1-408b-a090-074695a4c8ba/

    2012年3月9日 上午 02:05
  • (1). 您想抓第十一筆紀錄

    別忘了,電腦都是從 "零" 算起
    所以應該是 index = 10

    .......................................................................

    (2). 換頁的問題

    自己可以計算啊

    每頁有幾筆紀錄要展示?如:PageSize
    一共會分成幾頁?如:PageCount

    這些GridView都有屬性提供得好好的
    您簡單地作一下除法就好啦。

    每頁有十筆紀錄,你要抓第十一筆。
    就是 11除以 10,有餘數的話,代表要到下一頁。
    也就是「商」加一即可!

    不難,對吧。

    .......................................................................

    (3). 您要前往哪一頁,說真的,都可以寫程式控制的。


    但是您目前基礎不穩,連 Gridview基本的屬性都不了解
    卻已經一頭栽進這些變化裡面了

    沒基礎的人,你拿什麼去寫出這些變化?
    你手上沒武器,你體內沒功夫啊

    結論:把基礎打好!!!!
    結論:把基礎打好!!!!
    結論:把基礎打好!!!!


    我的書 與 ASP.NET教學網站 http://www.dotblogs.com.tw/mis2000lab/

    2012年3月9日 上午 02:14
  • 我今天在不同的論壇,都發現相同的狀況
    下面的文章,即使重複張貼,都能解決不同人(初學者)的問題

    那就是求速成、不願花時間打基礎

    ==========================================================

    我建議您先把基礎打穩,再來寫程式。

    看過您兩則發問,發現您一拿到武器就開始打怪了(直接Coding)

    然後邊做邊錯
    都是觀念不懂、基礎不穩

    您知道嗎?
    我遇見過一個很厲害的人,他可以自己寫程式處理ADO.NET + GridView各種變化
    但後來他卡住了

    跟他討論很久,他才發現「他不懂 PostBack觀念」

    怎麼辦?
    台語:整組害了了

    全部砍掉重練嗎?

    不管您以前在傳統網頁程式有多強(JSP / PHP / ASP)
    或是您寫 Windows程式有多資深

    面對全新的變種 -- ASP.NET
    真的要小心
    [感想]在新技術面前,懂得謙卑......
    http://www.dotblogs.com.tw/mis2000lab/archive/2009/06/22/8945.aspx



    看看這篇文章,有多少東西您不懂的?
    停下來,先釐清再說


    [自我評量表] ASP.NET
    http://www.dotblogs.com.tw/mis2000lab/archive/2009/06/22/8945.aspx


    我真的不希望,你步上這位仁兄的後塵

    您犯了這篇文章中,所有的錯誤而不自知



    茂伯的經典好文 -- 讀書與上課
    http://www.dotblogs.com.tw/billchung/archive/2010/11/28/19767.aspx

    或許是網際網路太發達且資訊已經多到爆炸,
    也許有人覺得要對一門電腦技術精通 只要上網查查資料、看看別人的部落格就有機會達成這樣的目標。

    我不否認應該有少數這樣具有特別天份的人,這類的人多半對於知識的組織與吸收是有獨到之處,
    不過這也意味著 大部份的人 走這條路通常都會進到死胡同,
    很快地將會遭遇許多技術瓶頸的挑戰。....詳見全文
    http://www.dotblogs.com.tw/billchung/archive/2010/11/28/19767.aspx


    我的書 與 ASP.NET教學網站 http://www.dotblogs.com.tw/mis2000lab/

    2012年3月9日 上午 02:16
  • 謝謝大家回復

    我已經找到解決方法了

    方法就是我在sql撈資料時

    就先用語法把我要的資料撈出來

    語法是

    with myorder as ( 
    select row_number() over (order by BOARD_ID ) as sn, BOARD_ID, ACTIVITY_SN, USERID, MESSAGER_NAME, MESSAGER_MAIL, MESSAGE_CONTENT, REPLY_CONTENT, CREATE_DATE from TB_MESSAGE_BOARD_FORM )  
    select BOARD_ID, ACTIVITY_SN, USERID, MESSAGER_NAME, MESSAGER_MAIL, MESSAGE_CONTENT, REPLY_CONTENT, CREATE_DATE from myorder where sn between '"+ a +"' and '" + b +"'



    order是排序一般是從小到大  如果有加desc(應該是這個) 則是相反
    你哪一個欄位放前面他就會先顯是哪個欄位    
    後面a b   意思是你要抓第幾筆到第幾筆  

    這樣就可以只抓我要的第幾頁的grv資料

    2012年3月9日 上午 06:36
  • 欄位顯示,要端看你的GridView的AutoGenerateColumn屬性是true或false。預設是true,就會把資料來源有的欄位都binding上去,並按照你資料來源的順序。

    若設為false,則要自己去定義Gridview的columns有哪些東西,那就會按照你定義的順序呈現,而與資料來源無關。

    這樣才能做到關注點分離。Presentation layer不被DA layer所影響。


    若您的程式碼有SQL injection的問題,在修改完畢之前,我不願意給您任何解答。因為解決了您的程式問題,造成更大的系統漏洞問題,還不如讓程式壞掉。

    請參考:SQL injection簡介與解決方式

    常用資源參考:


    小弟的blog: In 91,wiki: my wiki

    2012年3月9日 上午 06:42
    版主