WPF Listbox Binding from MS SQL Database

  • by
WPF Listbox Binding from MS SQL Database 02

Let’s see how we can Bind WPF Listbox from MS SQL Database.

WPF Listbox can be filled from database using IList which contains items fetch from Database. In the below WPF example I will be binding it using IList and MS SQL Database.

My Database table : tblCountries

WPF Listbox Binding from MS SQL Database 01

Code :

 

WPF Listbox Binding from MS SQL Database. Make a WPF Listbox in your WPF Form as below :

<ListBox Name="lstBox" HorizontalAlignment="Left" VerticalAlignment="Center"
Background="#fff" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left" >
<TextBlock Text="{Binding id}" Margin="2" FontWeight="Bold"/>
<TextBlock Text="{Binding country}" Margin="2" />
<TextBlock Text="{Binding ondate}" Margin="2"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

Open your code page (.cs page) and write the below code to fill WPF Listbox from MS SQL Database.

public void FillList()
{
try
{
con = new SqlConnection(connectionString);
con.Open();
cmd = new SqlCommand("select * from tblCountries", con);
adapter = new SqlDataAdapter(cmd);
ds = new DataSet();
adapter.Fill(ds, "tblCountries");
Countries co = new Countries();
IList<Countries> co1 = new List<Countries>();

foreach (DataRow dr in ds.Tables[0].Rows)
{
co1.Add(new Countries
{
id = Convert.ToInt32(dr[0].ToString()),
country = dr[1].ToString(),
ondate = Convert.ToDateTime(dr[2].ToString())
});
}
lstBox.ItemsSource = co1;
}
catch (Exception ex)
{

}
finally
{
ds = null;
adapter.Dispose();
con.Close();
con.Dispose();
}
}

This will Bind our WPF Listbox from MS SQL Database server table :

WPF Listbox Binding from MS SQL Database 02

Complete Design and Code :

MainWindow.xaml:

<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Background="#fff"
Title="WPF ListBox from MS SQL Database" Height="350" Width="525" WindowState="Maximized" WindowStyle="ThreeDBorderWindow">
<StackPanel Orientation="Vertical">
<TextBlock Text="WPF ListBox from MS SQL Database" FontSize="25" FontWeight="Bold" Margin="5" HorizontalAlignment="Left"/>
<ListBox Name="lstBox" HorizontalAlignment="Left" VerticalAlignment="Center"
Background="#fff" SelectionChanged="lstBox_SelectionChanged_1" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left" >
<TextBlock Text="{Binding id}" Margin="2" FontWeight="Bold"/>
<TextBlock Text="{Binding country}" Margin="2" />
<TextBlock Text="{Binding ondate}" Margin="2"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</Window>

MainWindow.xaml.cs :

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApplication2
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
static String connectionString = @"Data Source=vibes\sqlexpress;Initial Catalog=ParallelCodes;User ID=sa;Password=789;";
SqlConnection con;
SqlCommand cmd;
SqlDataAdapter adapter;
DataSet ds;
SqlDataReader reader;

public MainWindow()
{
InitializeComponent();
FillList();
}

public void FillList()
{
try
{
con = new SqlConnection(connectionString);
con.Open();
cmd = new SqlCommand("select * from tblCountries", con);
adapter = new SqlDataAdapter(cmd);
ds = new DataSet();
adapter.Fill(ds, "tblCountries");
Countries co = new Countries();
IList<Countries> co1 = new List<Countries>();

foreach (DataRow dr in ds.Tables[0].Rows)
{
co1.Add(new Countries
{
id = Convert.ToInt32(dr[0].ToString()),
country = dr[1].ToString(),
ondate = Convert.ToDateTime(dr[2].ToString())
});
}
lstBox.ItemsSource = co1;
}
catch (Exception ex)
{

}
finally
{
ds = null;
adapter.Dispose();
con.Close();
con.Dispose();
}
}

private void lstBox_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
{
var item = (ListBox)sender;
var country = (Countries)item.SelectedItem;
MessageBox.Show("You Selected " + country.country + "(ID: " + country.id + ", added on Date : " + country.ondate + ")");
}
}

public class Countries
{
public int id { get; set; }
public string country { get; set; }
public DateTime ondate { get; set; }

}
}

For getting selectedItem or selection from the users, please see this post on WPF Listbox – Getting SelectedItem.

Thank You.

Also see :

WPF Datagrid with Button and Click Method

WPF Designing Material Design Tabs with Dragablz

WPF Button Style with Rounded Corners and Hover Effects

WPF Textbox With Rounded Corners

WPF Textbox Style – Changing Colors on Focus

WPF ComboBox SelectionChanged – SelectedItem Method