Copyright © 2003-2009
By Suthep Sangvirotjanaphat
  Mobile: 089-967-2200, 081-915-7816
Phone: 0-2992-4877   Fax: 0-2992-4878
Fast Contact Us

GreatFriends.Biz Community

Custom Search
 MESSAGE #62252 (อ่าน 780 ครั้ง)

ต้องการแทรก text เข้าไปในแถว Page ของ Gridview ครับ

Tags: Web, VB, VS 2005
คือว่าผมต้องการจะแทรก text เข้าไปในแถวของ Page อ่ะครับ ผมลองแทรกเข้าไปแล้วแต่กับอยู่กันคนละบรรทัดของตัวเลข ทำยังงัยถึงจะกำหนดให้ show อยู่แถวเดียวกับตัวเลขได้ครับ ถ้าเป็น datagrid จะอยู่บรรทัดเดียวกันครับ แต่พอทำใน Gridview กลายเป็นแบบนี้ครับ
 
 
อันนี้ Datagrid ครับ
 
 
 
รบกวนผู้รู้ด้วยครับ ลองค้นหาในบอร์ดดู มีให้ลอง Edit Template แต่ไม่สามารถขึ้นเลขหน้าได้ครับ จาก http://www.greatfriends.biz/?47531&sw=gridview pager
 
ขอบคุณครับ


tonkung วันที่ส่ง: 27 ก.ย. 50 11:40 GMT+7
วันที่ปรับล่าสุด: 28 ก.ย. 50 16:43 GMT+7
REPLY #1 (62326)

งานนี้เล่นเอา เหนื่อย เหมือนกันครับ

ไม่รู้จะทำยังไง สุด ท้ายเลยใช้วิธี มั่ว ตามแบบฉบับ ของผม ครับ
มาดูวิธีกัน...
 
ผมใช้วิธีนี้ครับ Run แล้ว View Source  ดูว่า มัน Gen เป็น Html ยังไง
ซึ่ง ตัว Pager มัน จะไปสร้าง เป็น table ใหม่ ที่ซ้อนอยู่ใน table ตัว GridView ของ เราครับ ประมาณนี้ครับ
<td> <table>....</table></td>
 

protected void GridView1_RowCreated( object sender , GridViewRowEventArgs e ) {

        // ตรวจสอบ ว่าเป็น Pager  หรือป่าว

        if( e.Row.RowType == DataControlRowType.Pager ) {

             //เอา table ออกมาจาก row แบบนี้

            Table tb = ( e.Row.Cells[ 0 ].Controls[ 0 ] as Table );

            TableCell cell = new TableCell();

            cell.Text = "หน้าที่ " ;

             //ใส่ column ที่ 0 ให้มันใหม่

            tb.Rows[ 0 ].Cells.AddAt( 0 , cell );
             //ใส่ column สุดท้ายให้มันใหม่

            TableCell cell2 = new TableCell();

            cell2.Text = "จากทั้งหมด : " + GridView1.PageCount.ToString() +" หน้า";

            tb.Rows[ 0 ].Cells.Add( cell2 );

        }

}

 ลองไปใช้ดูครับ



tapeza555 วันที่ส่ง: 27 ก.ย. 50 17:50 GMT+7
วันที่ปรับล่าสุด: 27 ก.ย. 50 17:50 GMT+7
REPLY #2 (62335)

 สุดยอดเลยครับ คุณ tapeza555 ได้แล้วครับผม คุณ tapeza555 มี mail มั้ยครับผม

 
ขอบคุณมากครับ


tonkung วันที่ส่ง: 27 ก.ย. 50 18:05 GMT+7
วันที่ปรับล่าสุด: 27 ก.ย. 50 18:05 GMT+7
REPLY #3 (62340)

นี่ครับ..

tape_za@hotmail.com



tapeza555 วันที่ส่ง: 27 ก.ย. 50 18:14 GMT+7
วันที่ปรับล่าสุด: 27 ก.ย. 50 18:14 GMT+7
REPLY #4 (62405)

เพิ่มเติมต่อจากคุณ tapeza555 นะครับ

หากต้องการเพิ่มคำว่า "หน้าที่" ลงไปใน custom gridview เลยก็เขียนโค้ดตามนี้ครับ จะเหมาะกับตอนที่เรามีการใช้คอนโทรล GridView กับหลายๆ เว็บฟอร์มครับ จะได้ไม่ต้องเพิ่มโค้ดลงในไฟล์ code behine ของเว็บฟอร์ม
 

using System.Web.UI.WebControls;

namespace CustomControl

{

    public class CustomGridView : GridView

    {

        protected override void PrepareControlHierarchy()

        {

            // GridView ทำการสร้าง Hierarchy ในรูปของตาราง

            base.PrepareControlHierarchy();

            // ถ้ามี Hierarchy เกิดขึ้น ให้ทำการเพิ่มรูปภาพด้านล่าง GridView

 

            if (this.Controls.Count>0) {

                // คอนโทรลตัวแรกใน GridView คือ Table

                Table mainTable = (Table)this.Controls[0];

                // สร้างคอนโทรล Literal เอาไว้เก็นข้อความ "หน้าที่"

                Literal lit = new Literal();

                lit.Text = "หน้าที่ ";

 

                // เพิ่มคอนโทรล Literal ลงใน cell ที่ pager

                // มีลำดับดังนี้ Row สุดท้าย --> cell ของ row สุดท้าย --> Pager Table --> Row --> Cell

                mainTable.Rows[mainTable.Rows.Count - 1].Cells[0].Controls[0].Controls[0].Controls[0].Controls.AddAt(0, lit);

            }

        }

    }

}



nas วันที่ส่ง: 28 ก.ย. 50 13:39 GMT+7
วันที่ปรับล่าสุด: 28 ก.ย. 50 13:39 GMT+7
REPLY #5 (62411)

ที่ผมเคยทำก็สร้าง PagerTemplate ก่อนครับ เพื่อใส่ WebControl พวก Label (สำหรับแสดง หน้าที่ 1/10 ) แล้วก็ปุ่มสำหรับเลื่อนหน้า เลื่อนเรคอร์ด เป็นต้น

 
 
จากนั้นก็ทำคล้ายๆกันครับ คือที่ Row_Created ก็เช็ค Row Type ก่อนถ้าเป็น pager ก็เริ่มทำงาน แต่แทนที่จะทำกับ Table ก็ทำกับ Control แทน
 

If e.Row.RowType = DataControlRowType.Pager Then

Dim dv As Data.DataView = DirectCast(SqlDataSource1.Select(DataSourceSelectArguments.Empty), Data.DataView)

Dim intCurrentRecord As Integer = GridView1.SelectedIndex + 1 + GridView1.PageIndex * GridView1.PageCount

Dim intMaxRecord As Integer = dv.Count

DirectCast(e.Row.FindControl("lblRecord"), Label).Text = "Record " & intCurrentRecord & " / " & intMaxRecord

DirectCast(e.Row.FindControl("lblPage"), Label).Text = "Page " & GridView1.PageIndex + 1 & " / " & GridView1.PageCount

End If

 

แต่บางทีผมใช้ default pager style ก็ต้องเข้ามาทำงานกับ TableCell ครับ เช่นมีเคสหนึ่ง user ต้องการให้ใส่กรอบกับเปลี่ยนพื้นหลังของเลขหน้าปัจจุบัน ให้มันเด่นๆ

 

 



jnithi วันที่ส่ง: 28 ก.ย. 50 14:46 GMT+7
วันที่ปรับล่าสุด: 28 ก.ย. 50 14:46 GMT+7
REPLY #6 (62430)
 ขอบคุณทุกความคิดเห็นมากๆเลยครับ ได้หลาย idea เลยครับงานนี้ 


tonkung วันที่ส่ง: 28 ก.ย. 50 16:43 GMT+7
วันที่ปรับล่าสุด: 28 ก.ย. 50 16:43 GMT+7
กระทู้นี้มีอายุเกิน 365 วันแล้ว ท่านจะไม่สามารถตอบกระทู้นี้ได้อีก
ถ้าต้องการสนทนาต่อ กรุณาตั้งเป็นกระทู้ใหม่ได้ในหน้าโฮม
และอาจจะอ้างถึงกระทู้นี้ โดยก๊อปปี้ข้อความในกล่องสีขาวด้านล่างไปแปะในกระทู้ใหม่

copy เพื่ออ้างอิงถึงข้อความนี้:
ต้องการแทรก text เข้าไปในแถว Page ของ Gridview ครับ
http://greatfriends.biz?62252


8 ก.ย. 19:27
Online: 196