|  
  
     
      |  
         
           
            |  | 
 
  Windows Form กับ ListView แสดงข้อมูลบน ListView ในรูปแบบ Table/Grid (VB.Net,C#) สำหรับ ListView เป็น Control ตัวหนึ่งที่น่าสนใจมาก ใช้สำหรับการแสดงข้อมูลในรูปแบบของ List และ Item แสดงผลเป็นแบบ Table หรือ Grid สามารถสร้างรูปแบบของการแสดงได้เป็น Column และ Rows และความสามารถอื่นๆ เช่น กำหนดความกวางของ Column, จัดตำแหน่ง ซ้าย,ตรงกลาง,ขวา กำหนดประเภทของ Column เป็น Checkbox, Button , Image รวมถึงการ Select รายการที่รองรับการ Click เลือกแบบ รายการเดียว หรือ มากกว่าหนึ่งรายการ เป็นต้น 
    |  
        Windows Form กับ ListView แสดงข้อมูลบน ListView ในรูปแบบ Table/Grid (VB.Net,C#)       |  
 
  Windows Form and ListView
 ข้อสังเกตุในการใช้ ListView จะแตกต่างกับ Control ที่เป็นพวก Data Control อื่นๆ คือ จะไม่มีการกำหนด DataSource ให้กับ ListView แต่จะใช้การ Loop รายการข้อมูลแล้ว Add รายการ Item ให้กับ ListView
 
 ตัวอย่างการใช้ ListView แบบง่ายๆ ในรูปแบบต่างๆ
 
 
  
 ให้สร้าง Control ชื่อว่า ListView โดยการลากมาวางไว้ที่ Form
 
 
  
 เปลี่ยนชื่อใหม่ เพื่อให้ง่ายต่อการเรียกใช้งาน
 
 ในการแสดงข้อมูลบน ListView สามารถเพิ่มรายการ Item ได้จาก Collection ได้เลย
 
 
  
 คลิกที่ Collection เพื่อเพิ่ม Control ผ่าน Wizard
 
 
  
 รายการ ListViewItem
 
 ทดสอบการทำงาน
 
 
  
 ผลลัพธ์ที่ได้ในกรณีที่เพิ่มผ่าน Wizard
 
 แต่ในการใช้งานจริงแล้วรายการข้อมูลต่าง ๆ จะมาจาก  Object ต่างๆ ไม่ว่าจะเป็น Array,List หรือข้อมูลที่มาจาก Database ที่อยู่ในรูปแบบ DataSet, DataTable, DataReader ซึ่งในการนำมาใช้งานกับ ListView เราจะต้องทำการ Loop ข้อมูลนั้น ๆ และเพิ่มรายการ ListViewItem ให้กับ ListView
 
 
 
 Ex1 : ตัวอย่างการแสดงข้อมูลจาก List<T>
 
 VB.Net
 
    Public Class EmpProfiles
        Public Property EMP_ID() As String
            Get
                Return m_EMP_ID
            End Get
            Set
                m_EMP_ID = Value
            End Set
        End Property
        Private m_EMP_ID As String
        Public Property EMP_NAME() As String
            Get
                Return m_EMP_NAME
            End Get
            Set
                m_EMP_NAME = Value
            End Set
        End Property
        Private m_EMP_NAME As String
        Public Property EMP_SALARY() As Decimal
            Get
                Return m_EMP_SALARY
            End Get
            Set
                m_EMP_SALARY = Value
            End Set
        End Property
        Private m_EMP_SALARY As Decimal
    End Class
    Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        '*** List<T>
        Dim ls = New List(Of EmpProfiles)()
        ls.Add(New EmpProfiles() With {
            .EMP_ID = "E001",
            .EMP_NAME = "Wipa Nukitram",
            .EMP_SALARY = 10000
        })
        ls.Add(New EmpProfiles() With {
            .EMP_ID = "E002",
            .EMP_NAME = "Thitapat Nukitram",
            .EMP_SALARY = 20000
        })
        ls.Add(New EmpProfiles() With {
            .EMP_ID = "E003",
            .EMP_NAME = "Wisarut Nukitram",
            .EMP_SALARY = 30000
        })
        '*** ListView Header
        Me.myListView.Clear()
        myListView.Columns.Clear()
        myListView.HideSelection = False
        myListView.Columns.Add("Emp ID", 50, HorizontalAlignment.Center)
        myListView.Columns.Add("Emp Name", 225, HorizontalAlignment.Left)
        myListView.Columns.Add("Emp Salary", 150, HorizontalAlignment.Right)
        myListView.FullRowSelect = True
        myListView.View = View.Details
        '*** ListView Row
        For Each item In ls
            Dim lvi = New ListViewItem(item.EMP_ID)
            lvi.SubItems.Add(item.EMP_NAME)
            lvi.SubItems.Add(item.EMP_SALARY.ToString())
            Me.myListView.Items.Add(lvi)
        Next
    End Sub
C#
         public class EmpProfiles
        {
            public string EMP_ID { get; set; }
            public string EMP_NAME { get; set; }
            public decimal EMP_SALARY { get; set; }
        }
        private void frmMain_Load(object sender, EventArgs e)
        {
            //*** List<T>
            var ls = new List<EmpProfiles>();
            ls.Add(new EmpProfiles { EMP_ID = "E001", EMP_NAME = "Wipa Nukitram", EMP_SALARY = 10000 });
            ls.Add(new EmpProfiles { EMP_ID = "E002", EMP_NAME = "Thitapat Nukitram", EMP_SALARY = 20000 });
            ls.Add(new EmpProfiles { EMP_ID = "E003", EMP_NAME = "Wisarut Nukitram", EMP_SALARY = 30000 });
            //*** ListView Header
            this.myListView.Clear();
            myListView.Columns.Clear();
            myListView.HideSelection = false;
            myListView.Columns.Add("Emp ID", 50, HorizontalAlignment.Center);
            myListView.Columns.Add("Emp Name", 225, HorizontalAlignment.Left);
            myListView.Columns.Add("Emp Salary", 150, HorizontalAlignment.Right);
            myListView.FullRowSelect = true;
            myListView.View = View.Details;
            //*** ListView Row
            foreach(var item  in ls)
            {
                var lvi = new ListViewItem(item.EMP_ID);
                lvi.SubItems.Add(item.EMP_NAME);
                lvi.SubItems.Add(item.EMP_SALARY.ToString());
                this.myListView.Items.Add(lvi);
            }
           
        }
ทดสอบการทำงาน
 
 
  
 ผลลัพธ์ที่ได้
 
 
 1.1 การเพิ่ม Event สำหรับการการเลือกรายการ
 
 
  
 ในกรณีที่ต้องการเพิ่มการ Select ข้อมูลให้เพิ่ม Event ที่มีชื่อว่า SelectedIndexChanged
 
 VB.Net
 
     Private Sub myListView_SelectedIndexChanged(sender As Object, e As EventArgs) Handles myListView.SelectedIndexChanged
        If Me.myListView.SelectedItems.Count > 0 Then
            Dim selData As String = Me.myListView.SelectedItems(0).Text
            MessageBox.Show(selData)
        End If
    End Sub
C#
         private void myListView_SelectedIndexChanged(object sender, EventArgs e)
        {
            if(this.myListView.SelectedItems.Count > 0)
            {
                String selData = this.myListView.SelectedItems[0].Text;
                MessageBox.Show(selData);
            }
        }
ทดสอบการทำงาน
 
 
  
 แสดงรายการบน ListView
 
 
  
 และเมื่อมีการคลิกที่ Item จะแสดงข้อมูลใน Column ที่ 1 ออกมาทาง MessageBox
 
 
 
 1.2 การเลือกแบบหลายรายการหรือ Multiselect
 
 
  
 กำหนด Property ชื่อว่า Multiselect เป็น True
 
 
  
 ให้ลบ Event ชื่อว่า SelectedIndexChanged และสร้าง Button สำหรับการคลิกแดงรายการที่ได้เลือกจากหลายๆ รายการ
 
 VB.Net
 
     Private Sub btnSelect_Click(sender As Object, e As EventArgs) Handles btnSelect.Click
        If Me.myListView.SelectedItems.Count > 0 Then
            For Each item As ListViewItem In Me.myListView.SelectedItems
                Dim selData As String = item.SubItems(0).Text
                MessageBox.Show(selData)
            Next
        End If
    End Sub
C#
         private void btnSelect_Click(object sender, EventArgs e)
        {
            if (this.myListView.SelectedItems.Count > 0)
            {
                foreach (ListViewItem item in this.myListView.SelectedItems)
                {
                    String selData = item.SubItems[0].Text;
                    MessageBox.Show(selData);
                }
            }
        }
ทดสอบการทำงาน
 
 
  
 ทดสอบการเลือกหลายๆ รายการ
 
 
  
 คลิกที่ Button เพื่ออ่านค่ารายการที่เลือก แสดงรายการที่เลือกบน MessageBox
 
 
  
 แสดงรายการที่เลือกบน MessageBox
 
 
 
 Ex2 : การอ่านข้อมูลจาก Database เพื่อแสดงผลบน ListView
 
 
  
 ในตัวอย่างนี้จะใช้ Database ของ SQL Server ให้สร้าง Table ง่ายๆ ดังรูป
 
 
  
 ตัวอย่างข้อมูล โดยในการดึงข้อมูลสามารถใช้ DataReader , DataSet, DataTable หรืออื่นๆ ขึ้นอยู่กับความถนัด
 
 VB.Net
 
  Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        '*** Connect Database
        Dim strConnString As String = "Server=localhost;UID=sa;PASSWORD=;database=mydatabase;"
        Dim objConn = New SqlConnection(strConnString)
        objConn.Open()
        Dim strSQL As String = "SELECT * FROM mytable"
        Dim objCmd = New SqlCommand(strSQL, objConn)
        Dim dtReader = objCmd.ExecuteReader()
        '*** ListView Header
        Me.myListView.Clear()
        myListView.Columns.Clear()
        myListView.HideSelection = False
        myListView.Columns.Add("Emp ID", 50, HorizontalAlignment.Center)
        myListView.Columns.Add("Emp Name", 225, HorizontalAlignment.Left)
        myListView.Columns.Add("Emp Salary", 150, HorizontalAlignment.Right)
        myListView.FullRowSelect = True
        myListView.View = View.Details
        '*** ListView Row
        While dtReader.Read()
            Dim lvi = New ListViewItem(dtReader("EmpID").ToString())
            lvi.SubItems.Add(dtReader("EmpName").ToString())
            lvi.SubItems.Add(dtReader("EmpSalary").ToString())
            Me.myListView.Items.Add(lvi)
        End While
        '*** Close Database
        dtReader.Close()
        dtReader = Nothing
        objConn.Close()
    End Sub
C#
         private void frmMain_Load(object sender, EventArgs e)
        {
            //*** Connect Database
            string strConnString = "Server=localhostSQL2014;UID=sa;PASSWORD=;database=mydatabase;";
            var objConn = new SqlConnection(strConnString);
            objConn.Open();
            string strSQL = "SELECT * FROM mytable";
            var objCmd = new SqlCommand(strSQL, objConn);
            var dtReader = objCmd.ExecuteReader();
            //*** ListView Header
            this.myListView.Clear();
            myListView.Columns.Clear();
            myListView.HideSelection = false;
            myListView.Columns.Add("Emp ID", 50, HorizontalAlignment.Center);
            myListView.Columns.Add("Emp Name", 225, HorizontalAlignment.Left);
            myListView.Columns.Add("Emp Salary", 150, HorizontalAlignment.Right);
            myListView.FullRowSelect = true;
            myListView.View = View.Details;
            //*** ListView Row
            while(dtReader.Read())
            { 
                var lvi = new ListViewItem(dtReader["EmpID"].ToString());
                lvi.SubItems.Add(dtReader["EmpName"].ToString());
                lvi.SubItems.Add(dtReader["EmpSalary"].ToString());
                this.myListView.Items.Add(lvi);
            }
            //*** Close Database
            dtReader.Close();
            dtReader = null;
            objConn.Close();
        }
ทดสอบการทำงาน
 
 
  
 แสดงข้อมูลรายการจาก Table บน ListView
 
 
 
 
 
                           
                             |  |  |  |  
                             |  |  |  |  
 
            
              | 
                  
                    |  |  
                    |  | By : | TC Admin |  
                    |  | Article : | บทความเป็นการเขียนโดยสมาชิก หากมีปัญหาเรื่องลิขสิทธิ์ กรุณาแจ้งให้ทาง webmaster ทราบด้วยครับ |  
                    |  | Score Rating : |      |  
                    |  | Create Date : | 2017-02-17 |  
                    |  | Download : | No files |  |  |  |   |