ชุมชนคนรักภาษาเบสิค - Visual Basic Community

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 3448|ตอบกลับ: 0

[VB.NET] การเคลื่อนย้ายตำแหน่งแถวที่เลือกในตารางกริด ให้ขึ้นบนหรือลงล่าง

[คัดลอกลิงก์]

310

กระทู้

501

โพสต์

6035

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
6035




หลักการคิดสำหรับการเคลื่อนย้ายแถวขึ้นบน : เลือกแถวที่ต้องการ ตรวจสอบว่าแถวนั้นต้องมีค่า Index มากกว่า 0 (แถวแรก Index = 0) จากนั้นคัดลอกรายการแถวนั้นๆเอาไว้ก่อน เพื่อเก็บค่าไว้ในตัวแปรแบบแถวของตารางกริด (Dim Row As DataGridViewRow) แล้วทำการลบแถวที่เลือกออกไป สุดท้ายให้แทรก (Insert) แถวที่คัดลอกเอาไว้ นำไปวางไว้หน้าแถวที่เลือกลบออกด้วย 1 ก็จะทำให้เสมือนเกิดการเคลื่อนย้ายตำแหน่งแถวได้นั่นเอง ... สำหรับการเคลื่อนย้ายแถวลง ก็คิดเหมือนกัน แต่คำนวณหาจำนวนแถวสูงสุด


มาดูโค้ดกันเถอะ ...
  1. Public Class frmDataGridMoveRow

  2.     Private Sub frmDataGridMoveRow_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  3.         Call InitDataGrid()
  4.     End Sub

  5.     ' / --------------------------------------------------------------------------------
  6.     ' / Initialized DataGridView and put the sample data.
  7.     Private Sub InitDataGrid()
  8.         '// Initialize DataGridView Control
  9.         With DataGridView1
  10.             .RowHeadersVisible = False
  11.             .AllowUserToAddRows = False
  12.             .AllowUserToDeleteRows = False
  13.             .AllowUserToResizeRows = False
  14.             .MultiSelect = False
  15.             .SelectionMode = DataGridViewSelectionMode.FullRowSelect
  16.             .ReadOnly = True
  17.             .Font = New Font("Tahoma", 9)
  18.             ' Autosize Column
  19.             .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
  20.             .AutoResizeColumns()
  21.             '// Even-Odd Color
  22.             .AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue
  23.             ' Adjust Header Styles
  24.             With .ColumnHeadersDefaultCellStyle
  25.                 .BackColor = Color.Navy
  26.                 .ForeColor = Color.Black ' Color.White
  27.                 .Font = New Font("Tahoma", 9, FontStyle.Bold)
  28.             End With
  29.         End With
  30.         '// Declare columns type.
  31.         Dim Column1 As New DataGridViewTextBoxColumn()
  32.         Dim Column2 As New DataGridViewTextBoxColumn()
  33.         Dim Column3 As New DataGridViewTextBoxColumn()
  34.         '// Add new Columns
  35.         DataGridView1.Columns.AddRange(New DataGridViewColumn() { _
  36.                 Column1, Column2, Column3 _
  37.                 })
  38.         With DataGridView1
  39.             .Columns(0).Name = "Product ID"
  40.             .Columns(1).Name = "Product Name"
  41.             .Columns(2).Name = "Unit Price"
  42.         End With

  43.         '// SAMPLE DATA
  44.         Dim RandomClass As New Random()
  45.         For iCount As Byte = 1 To 10
  46.             Dim row = New String() { _
  47.             iCount, "Product " & iCount, Format(RandomClass.Next(999) + RandomClass.NextDouble(), "0.00")}
  48.             DataGridView1.Rows.Add(row)
  49.         Next
  50.     End Sub

  51.     ' / --------------------------------------------------------------------------------
  52.     ' / Move Up.
  53.     Private Sub btnUp_Click(sender As System.Object, e As System.EventArgs) Handles btnUp.Click
  54.         With Me.DataGridView1
  55.             '// หาค่า Index แถวที่เลือก
  56.             Dim RowIndex As Integer = .SelectedCells(0).OwningRow.Index
  57.             '// หาก Index = 0 แสดงว่าเป็นแถวบนสุด ให้จบออกจากโปรแกรมย่อย
  58.             If RowIndex = 0 Then Return
  59.             '//
  60.             Dim Col As Integer = .SelectedCells(0).OwningColumn.Index
  61.             Dim Rows As DataGridViewRowCollection = .Rows
  62.             '// เก็บค่าแต่ละเซลล์ของแถวที่เลือก
  63.             Dim Row As DataGridViewRow = Rows(RowIndex)
  64.             '// ลบแถวที่เลือกออก
  65.             Rows.Remove(Row)
  66.             '// ไปเพิ่มแถวใหม่ ก่อนแถวที่เลือก 1 แถว (ก็เลยเสมือนมันเคลื่อนย้ายแถวได้)
  67.             Rows.Insert(RowIndex - 1, Row)
  68.             '// เคลียร์การเลือกแถว
  69.             .ClearSelection()
  70.             '// โฟกัสรายการแถวที่เลื่อนขึ้นไปแทรก
  71.             .Rows(RowIndex - 1).Cells(Col).Selected = True
  72.         End With
  73.     End Sub

  74.     ' / --------------------------------------------------------------------------------
  75.     ' / Move Down.
  76.     Private Sub btnDown_Click(sender As System.Object, e As System.EventArgs) Handles btnDown.Click
  77.         With Me.DataGridView1
  78.             Dim RowIndex As Integer = .SelectedCells(0).OwningRow.Index
  79.             If RowIndex = .Rows.Count - 1 Then Return
  80.             '//
  81.             Dim Col As Integer = .SelectedCells(0).OwningColumn.Index
  82.             Dim Rows As DataGridViewRowCollection = .Rows
  83.             Dim Row As DataGridViewRow = Rows(RowIndex)
  84.             Rows.Remove(Row)
  85.             Rows.Insert(RowIndex + 1, Row)
  86.             .ClearSelection()
  87.             '//
  88.             .Rows(RowIndex + 1).Cells(Col).Selected = True
  89.         End With
  90.     End Sub
  91. End Class
คัดลอกไปที่คลิปบอร์ด


ดาวน์โหลดโค้ดต้นฉบับ VB.NET (2010) ได้ที่นี่ ...

ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

x
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด
ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|G2GNet.com  

GMT+7, 2024-4-20 21:51 , Processed in 0.198790 second(s), 4 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้