WPF OracleDataAdapter, ListView, 데이터 바인딩을 이용하여 오라클 EMP 테이블 데이터를 ListView에 뿌리기(ODP.NET, ItemTemplate)
n 이전 예제에 버튼을 하나 추가하고 버튼을 클릭했을 때 OracleDataAdapter를 이용하여 DataSet에 DataTable로 EMP 테이블을 생성하고 이를 LiveView에 바인딩 시키는 기능을 추가해 보자.
n MainWindow.xaml
<Window x:Class="WpfOracleTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfOracleTest"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="461.659">
<Grid Margin="0,0,3.2,-0.2">
<Button x:Name="button" Content="DB Connect" HorizontalAlignment="Left" Margin="43,28,0,0" VerticalAlignment="Top" Width="75" RenderTransformOrigin="0.391,-0.29" Click="DB_Connect"/>
<ListView Margin="10,66,10,10" Name="lstView">
<ListView.ItemTemplate>
<DataTemplate>
<WrapPanel>
<TextBlock Text="Empno: " />
<TextBlock Text="{Binding Empno}" FontWeight="Bold" />
<TextBlock Text=", " />
<TextBlock Text=" (" />
<TextBlock Text="Ename: " />
<TextBlock Text="{Binding Ename}" TextDecorations="Underline" FontWeight="Bold" />
<TextBlock Text=")" />
<TextBlock Text="{Binding Job}" Foreground="Blue" Cursor="Hand" />
</WrapPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<Button x:Name="button1" Content="Get Data" HorizontalAlignment="Left" Margin="137,28,0,0" VerticalAlignment="Top" Width="75" Click="Select_Emp"/>
<Button x:Name="button2" Content="Get Data from Adapter" HorizontalAlignment="Left" Margin="228,28,0,0" VerticalAlignment="Top" Width="133" Click="Select_Emp2"/>
</Grid>
</Window>
|
n MainWindow.xaml.cs
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Data;
using Oracle.ManagedDataAccess.Client;
namespace WpfOracleTest
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
OracleConnection conn;
private void DB_Connect(object sender, RoutedEventArgs e)
{
try
{
string strCon = @"Data Source=(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.27)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = topcredu)
)
) ;User Id=scott;Password=tiger";
//string strCon = "data source=topcredu;User ID=scott;Password=tiger";
conn = new OracleConnection(strCon);
conn.Open();
MessageBox.Show("DB Connection OK!");
}
catch(Exception error)
{
MessageBox.Show(error.ToString());
}
}
private void Select_Emp(object sender, RoutedEventArgs e)
{
string sql = "select empno, ename, job from emp ";
OracleCommand comm = new OracleCommand();
if(conn == null) DB_Connect(this, null);
comm.Connection = conn;
comm.CommandText = sql;
OracleDataReader reader = comm.ExecuteReader(CommandBehavior.CloseConnection);
List<EmpViewModel> emps = new List<EmpViewModel>();
while (reader.Read())
{
emps.Add(new EmpViewModel() { Empno = reader.GetInt32(reader.GetOrdinal("empno")),
Ename = reader.GetString(reader.GetOrdinal("ename")),
Job = reader.GetString(reader.GetOrdinal("job"))
});
}
lstView.ItemsSource = emps;
reader.Close();
}
private void Select_Emp2(object sender, RoutedEventArgs e)
{
OracleDataAdapter adapter = new OracleDataAdapter();
string sql = "select empno, ename, job from emp ";
OracleCommand comm = new OracleCommand();
if (conn == null) DB_Connect(this, null);
comm.Connection = conn;
comm.CommandText = sql;
adapter.SelectCommand = comm;
DataSet ds = new DataSet("emps");
adapter.Fill(ds, "emp");
// Clear the ListView control
lstView.Items.Clear();
List<EmpViewModel> emps = new List<EmpViewModel>();
for (int i = 0; i < ds.Tables["emp"].Rows.Count; i++)
{
DataRow dr = ds.Tables["emp"].Rows[i];
emps.Add(new EmpViewModel()
{
Empno = System.Convert.ToInt32(dr["empno"]),
Ename = dr["ename"].ToString(),
Job = dr["job"].ToString()
});
}
lstView.ItemsSource = emps;
conn.Close();
}
}
}
|
n 실행화면
#WPF오라클, #WPFORACLE, #데이터바인딩, #WPF데이터바인딩, #DataBinding, #WPF, #WPF강좌, #WPF교육, #WPF강의, #시샵, #닷넷, #Csharp, #XAML,