In this article I will explain with an example, how to populate (bind) ListView from Database in Windows Forms Application (WinForms) using C# and VB.Net.
	
		This article will illustrate how to populate data from SQL Server Database in DataTable and then use DataTable to populate ListView control in Windows Forms (WinForms) Application using C# and VB.Net.
	
		 
	
		 
	
		Database
	
		I have made use of the following table Customers with the schema as follows.
	![Populate (Bind) ListView from Database in Windows Forms Application using C# and VB.Net]() 
	
		 
	
		I have already inserted few records in the table.
	![Populate (Bind) ListView from Database in Windows Forms Application using C# and VB.Net]() 
	
		 
	
		
			Note: You can download the database table SQL by clicking the download link below.
		
	 
	
		 
	
		 
	
		Form Design
	
		The Form consists of a ListView control.
	![Populate (Bind) ListView from Database in Windows Forms Application using C# and VB.Net]() 
	
		 
	
		 
	
		Namespaces
	
		You will need to import the following namespaces.
	
		C#
	
		
			using System.Data;
		
			using System.Data.SqlClient;
	 
	
		 
	
		VB.Net
	
		
			Imports System.Data
		
			Imports System.Data.SqlClient
	 
	
		 
	
		 
	
		Populating ListView from Database using C# and VB.Net
	
		Inside the Form Load event, the records from the database are fetched into a DataTable.
	
		Then a loop is executed over the DataTable rows and one by one Item is added to the ListView.
	
		C#
	
		
			private void Form1_Load(object sender, EventArgs e)
		
			{
		
			    string constr = @"Data Source=.\SQL2017;Initial Catalog=AjaxSamples;Integrated Security=true";
		
			    using (SqlConnection con = new SqlConnection(constr))
		
			    {
		
			        using (SqlDataAdapter sda = new SqlDataAdapter("SELECT CustomerId, Name FROM Customers", con))
		
			        {
		
			            //Fill the DataTable with records from Table.
		
			            DataTable dt = new DataTable();
		
			            sda.Fill(dt);
		
			 
		
			            //Loop through the DataTable.
		
			            foreach (DataRow row in dt.Rows)
		
			            {
		
			                //Add Item to ListView.
		
			                ListViewItem item = new ListViewItem(row["Name"].ToString());
		
			                item.SubItems.Add(row["CustomerId"].ToString());
		
			                lvCustomers.Items.Add(item);
		
			            }
		
			 
		
			            lvCustomers.View = View.List;
		
			        }
		
			    }
		
			}
	 
	
		 
	
		VB.Net
	
		
			Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
		
			    Dim constr As String = "Data Source=.\SQL2017;Initial Catalog=AjaxSamples;Integrated Security=true"
		
			    Using con As SqlConnection = New SqlConnection(constr)
		
			        Using sda As SqlDataAdapter = New SqlDataAdapter("SELECT CustomerId, Name FROM Customers", con)
		
			            'Fill the DataTable with records from Table.
		
			            Dim dt As DataTable = New DataTable()
		
			            sda.Fill(dt)
		
			 
		
			            'Loop through the DataTable.
		
			            For Each row As DataRow In dt.Rows
		
			                'Add Item to ListView.
		
			                Dim item As ListViewItem = New ListViewItem(row("Name").ToString())
		
			                item.SubItems.Add(row("CustomerId").ToString())
		
			                lvCustomers.Items.Add(item)
		
			            Next
		
			 
		
			            lvCustomers.View = View.List
		
			        End Using
		
			    End Using
		
			End Sub
	 
	
		 
	
		 
	
		Implementing SelectedIndexChanged event handler of the ListView
	
		The ListView has been attached a SelectedIndexChanged event handler.
	
		Inside the SelectedIndexChanged event handler, the Text parts of the Selected Item and SubItem of the ListView is displayed using MessageBox.
	
		C#
	
		
			private void lvCustomers_SelectedIndexChanged(object sender, EventArgs e)
		
			{
		
			    if (lvCustomers.SelectedItems.Count > 0)
		
			    {
		
			        string message = "Name: " + lvCustomers.SelectedItems[0].Text + Environment.NewLine;
		
			        message += "ID: " + lvCustomers.SelectedItems[0].SubItems[1].Text;
		
			        MessageBox.Show(message);
		
			    }
		
			}
	 
	
		 
	
		VB.Net
	
		
			Private Sub ListView1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles lvCustomers.SelectedIndexChanged
		
			    If lvCustomers.SelectedItems.Count > 0 Then
		
			        Dim message As String = "Name: " & lvCustomers.SelectedItems(0).Text & Environment.NewLine
		
			        message &= "ID: " & lvCustomers.SelectedItems(0).SubItems(1).Text
		
			        MessageBox.Show(message)
		
			    End If
		
			End Sub
	 
	
		 
	
		 
	
		Screenshot
	![Populate (Bind) ListView from Database in Windows Forms Application using C# and VB.Net]() 
	
		 
	
		 
	
		Downloads