Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,027

HOME > .NET Framework > Forum > สอบถามเรื่องการ ดึงข้อมูลมาแสดงแบบ random ตำแหน่งครับ แล้วเปลี่ยนหน้าครับ



 

สอบถามเรื่องการ ดึงข้อมูลมาแสดงแบบ random ตำแหน่งครับ แล้วเปลี่ยนหน้าครับ

 



Topic : 123215



โพสกระทู้ ( 207 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook Blogger



สอบถามหน่อยครับ ผมทำ listview ดึงข้อมูลแบบ random สมมติว่าข้อมูลมี 50 record แล้ว random มาแสดง โดยแบ่งหน้าเป็น 5 หน้าหน้าละ 10 แถว โดยข้อมูลนาย A จะต้องอยู่ ภายใน 5 หน้านี้ถึงจะถูก แต่ปรากฏว่าทุกครั้งที่มีการกดเปลี่ยนหน้า มันจะทำการ random ใหม่ทำให้ นาย A มีโอกาสที่จะไม่โผล่มาแสดงเลยครับ จะแก้ไขอย่างไรได้บ้างครับ



Code (C#)
        #region Private Properties
        private int CurrentPage
        {
            get
            {
                object objPage = ViewState["_CurrentPage"];
                int _CurrentPage = 0;
                if (objPage == null)
                {
                    _CurrentPage = 0;
                }
                else
                {
                    _CurrentPage = (int)objPage;
                }
                return _CurrentPage;
            }
            set { ViewState["_CurrentPage"] = value; }
        }
        private int fistIndex
        {
            get
            {

                int _FirstIndex = 0;
                if (ViewState["_FirstIndex"] == null)
                {
                    _FirstIndex = 0;
                }
                else
                {
                    _FirstIndex = Convert.ToInt32(ViewState["_FirstIndex"]);
                }
                return _FirstIndex;
            }
            set { ViewState["_FirstIndex"] = value; }
        }
        private int lastIndex
        {
            get
            {

                int _LastIndex = 0;
                if (ViewState["_LastIndex"] == null)
                {
                    _LastIndex = 0;
                }
                else
                {
                    _LastIndex = Convert.ToInt32(ViewState["_LastIndex"]);
                }
                return _LastIndex;
            }
            set { ViewState["_LastIndex"] = value; }
        }
        #endregion
        #region PagedDataSource
        PagedDataSource _PageDataSource = new PagedDataSource();
        #endregion
        #region Private Methods
        /// <summary>
        /// Build DataTable to bind Main Items List
        /// </summary>
        /// <returns>DataTable</returns>

        DataTable GetDataTable()
        {
            DataTable dtable = new DataTable();
            String strSQL;
            strSQL = "SELECT xx ORDER BY NEWID()";

            dtable = clsDB.QueryDataTable(strSQL);
            lblTotal.Text = dtable.Rows.Count.ToString() + " results";
            max = dtable.Rows.Count;
            clsDB.Close();
            return dtable;
        }

        private void BindDataList()
        {
            DataTable dataTable = this.GetDataTable();
            _PageDataSource.DataSource = dataTable.DefaultView;
            _PageDataSource.AllowPaging = true;
            _PageDataSource.PageSize = 10;
            _PageDataSource.CurrentPageIndex = CurrentPage;
            ViewState["TotalPages"] = _PageDataSource.PageCount;

            this.lblpage.Text = "Page " + (CurrentPage + 1) + " of " + _PageDataSource.PageCount;
            this.lbtnPrevious.Enabled = !_PageDataSource.IsFirstPage;
            this.lbtnNext.Enabled = !_PageDataSource.IsLastPage;
            this.lbtnFirst.Enabled = !_PageDataSource.IsFirstPage;
            this.lbtnLast.Enabled = !_PageDataSource.IsLastPage;

            this.myDataList.DataSource = _PageDataSource;
            this.myDataList.DataBind();
            this.doPaging();
        }

        /// <summary>
        /// Binding Paging List
        /// </summary>
        private void doPaging()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("PageIndex");
            dt.Columns.Add("PageText");

            fistIndex = CurrentPage - 5;


            if (CurrentPage > 5)
            {
                lastIndex = CurrentPage + 5;
            }
            else
            {
                lastIndex = 10;
            }
            if (lastIndex > Convert.ToInt32(ViewState["TotalPages"]))
            {
                lastIndex = Convert.ToInt32(ViewState["TotalPages"]);
                fistIndex = lastIndex - 10;
            }

            if (fistIndex < 0)
            {
                fistIndex = 0;
            }

            for (int i = fistIndex; i < lastIndex; i++)
            {
                DataRow dr = dt.NewRow();
                dr[0] = i;
                dr[1] = i + 1;
                dt.Rows.Add(dr);
            }

            this.dlPaging.DataSource = dt;
            this.dlPaging.DataBind();
        }
        #endregion
        protected void lbtnNext_Click(object sender, EventArgs e)
        {
            CurrentPage += 1;
            this.BindDataList();
        }
        protected void lbtnPrevious_Click(object sender, EventArgs e)
        {
            CurrentPage -= 1;
            this.BindDataList();
        }
        protected void dlPaging_ItemCommand(object source, DataListCommandEventArgs e)
        {
            if (e.CommandName.Equals("Paging"))
            {
                CurrentPage = Convert.ToInt16(e.CommandArgument.ToString());
                this.BindDataList();
            }
        }
        protected void dlPaging_ItemDataBound(object sender, DataListItemEventArgs e)
        {
            LinkButton lnkbtnPaging = (LinkButton)e.Item.FindControl("lnkbtnPaging");
            if (lnkbtnPaging.CommandArgument.ToString() == CurrentPage.ToString())
            {
                lnkbtnPaging.Enabled = false;
                lnkbtnPaging.Font.Bold = true;
                lnkbtnPaging.Font.Size = 15;
            }
        }
        protected void lbtnLast_Click(object sender, EventArgs e)
        {
            CurrentPage = (Convert.ToInt32(ViewState["TotalPages"]) - 1);
            this.BindDataList();
        }
        protected void lbtnFirst_Click(object sender, EventArgs e)
        {
            CurrentPage = 0;
            this.BindDataList();
        }




Tag : .NET, Ms SQL Server 2008, C#









ประวัติการแก้ไข
2016-06-06 14:21:54
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2016-06-06 14:20:52 By : yatard View : 734 Reply : 4
 

 

No. 1



โพสกระทู้ ( 9,556 )
บทความ ( 2 )



สถานะออฟไลน์


เลิก random






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-06-06 15:34:17 By : Chaidhanan
 


 

No. 2



โพสกระทู้ ( 207 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook Blogger

ถ้าให้ random ครั้งแรกที่โหลดหน้านี้ หรือ refesh หน้านี้เท่านั้นได้ไหมครับ random ทั้งหมด แล้วเอามาแบ่งหน้า เวลาเปลี่ยนหน้า นาย A จะต้องไปโผล่หน้าไหนหน้าสักหน้านึงครับอยากได้รูปแบบนี้่พอมีวิธีไหมครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-06-06 16:00:13 By : yatard
 

 

No. 3



โพสกระทู้ ( 9,556 )
บทความ ( 2 )



สถานะออฟไลน์


สร้าง array แบ่งหน้า แต่ละหน้าไว้ เก็บเป็น session เอาไว้
แล้วนำมาคิวรี่
if( !isset($_SESSION['page_random'])){
$sql = 'select ...... order by rand()';

วนลูปสร้าง array ให้ได้ตามข้างล่าง
$page[0]='1,4,5,9,100,....'; // 50 records
$page[1]='2,3,6,7,90,....'; // 50 records
2 ...
3 ...
4 ...
$_SESSION['page_random']=$page;
}
วิธีการคิวรี่ แต่ละหน้า
Code (PHP)
$page_no=isset($_GET['page_no']) ? $_GET['page_no'] : 0;
$sql = "select * from table where id in ( $page[$page_no] )";



แต่สำหรับจำนวนที่ไม่เยอะ หน้าละ 50 รายการ 20-30 หน้า พอไหว
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-06-06 16:41:37 By : Chaidhanan
 


 

No. 4



โพสกระทู้ ( 207 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook Blogger

ขอบคุณพี่ Chaidhanan สำหรับข้อมูลครับเดี๋ยวผมลองดูครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-06-06 16:43:17 By : yatard
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : สอบถามเรื่องการ ดึงข้อมูลมาแสดงแบบ random ตำแหน่งครับ แล้วเปลี่ยนหน้าครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 01
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่