Table1: 'id'-int, 'pid'-int (parent), 'sName'-string
1,0,"itm1"
2,1,"itm2"
3,2,"itm3"
using System;
using System.Collections.Generic;
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;
using MySql.Data.MySqlClient; //MySql.Data.dll
using System.Data;
namespace _WpfApp
{
/// <summary>
/// Логика взаимодействия для MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private MySqlConnection conn;
private MySqlCommand selectCommand;
private MySqlDataReader reader;
private DataTable dt;
private void mn(string s)
{
if (s == "Определить параметры подключения к БД") cnBD();
if (s == "Прочитать из БД в поток") setMySQL2reader();
if (s == "Локальная БД для TreeView") LocBD2TreeView();
if (s == "Очистить TreeView") TreeView1.Items.Clear();
if (s == "Заполнить TreeView из локальной БД") setTreeView(null, "0");
}
public MainWindow() //Куда уж без тебя
{
InitializeComponent();
}
private void cnBD() //Определить параметры подключения к БД
{
string cn = "server=localhost; user id=%user%; password='%password%'; database=test";
conn = new MySqlConnection(cn);
conn.Open();
}
private void setMySQL2reader() //Прочитать из БД в поток
{
string mySelectQuery = "SELECT id, pid, SName FROM table1";
selectCommand = new MySqlCommand(mySelectQuery, conn);
reader = selectCommand.ExecuteReader();
}
private void LocBD2TreeView() //Локальная БД для TreeView
{
dt = new DataTable("dtTree");
dt.Columns.Add("id", typeof(int));
dt.Columns.Add("pid", typeof(int));
dt.Columns.Add("sName", typeof(string));
while (reader.Read())
{
dt.Rows.Add(reader.GetInt32("id"), reader.GetInt32("pid"), reader.GetString("sName"));
}
selectCommand.Connection.Close();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
mn("Определить параметры подключения к БД");
mn("Прочитать из БД в поток");
mn("Локальная БД для TreeView");
mn("Очистить TreeView");
mn("Заполнить TreeView из локальной БД");
}
// Собственно ради чего заметка писалась:
private void setTreeView(TreeViewItem parItem, string parent) //Заполнить TreeView из локальной БД
{
foreach (DataRow dr in dt.Rows)
{
if (dr["pid"].ToString() == parent)
{
TreeViewItem chItem = new TreeViewItem();
chItem.Header = dr["sName"].ToString();
setTreeView(chItem, dr["id"].ToString()); //Рекурсия
if (parItem == null & parent == "0") TreeView1.Items.Add(chItem); //TreeView root-Header
else parItem.Items.Add(chItem);
}
}
}
}
}
1,0,"itm1"
2,1,"itm2"
3,2,"itm3"
using System;
using System.Collections.Generic;
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;
using MySql.Data.MySqlClient; //MySql.Data.dll
using System.Data;
namespace _WpfApp
{
/// <summary>
/// Логика взаимодействия для MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private MySqlConnection conn;
private MySqlCommand selectCommand;
private MySqlDataReader reader;
private DataTable dt;
private void mn(string s)
{
if (s == "Определить параметры подключения к БД") cnBD();
if (s == "Прочитать из БД в поток") setMySQL2reader();
if (s == "Локальная БД для TreeView") LocBD2TreeView();
if (s == "Очистить TreeView") TreeView1.Items.Clear();
if (s == "Заполнить TreeView из локальной БД") setTreeView(null, "0");
}
public MainWindow() //Куда уж без тебя
{
InitializeComponent();
}
private void cnBD() //Определить параметры подключения к БД
{
string cn = "server=localhost; user id=%user%; password='%password%'; database=test";
conn = new MySqlConnection(cn);
conn.Open();
}
private void setMySQL2reader() //Прочитать из БД в поток
{
string mySelectQuery = "SELECT id, pid, SName FROM table1";
selectCommand = new MySqlCommand(mySelectQuery, conn);
reader = selectCommand.ExecuteReader();
}
private void LocBD2TreeView() //Локальная БД для TreeView
{
dt = new DataTable("dtTree");
dt.Columns.Add("id", typeof(int));
dt.Columns.Add("pid", typeof(int));
dt.Columns.Add("sName", typeof(string));
while (reader.Read())
{
dt.Rows.Add(reader.GetInt32("id"), reader.GetInt32("pid"), reader.GetString("sName"));
}
selectCommand.Connection.Close();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
mn("Определить параметры подключения к БД");
mn("Прочитать из БД в поток");
mn("Локальная БД для TreeView");
mn("Очистить TreeView");
mn("Заполнить TreeView из локальной БД");
}
// Собственно ради чего заметка писалась:
private void setTreeView(TreeViewItem parItem, string parent) //Заполнить TreeView из локальной БД
{
foreach (DataRow dr in dt.Rows)
{
if (dr["pid"].ToString() == parent)
{
TreeViewItem chItem = new TreeViewItem();
chItem.Header = dr["sName"].ToString();
setTreeView(chItem, dr["id"].ToString()); //Рекурсия
if (parItem == null & parent == "0") TreeView1.Items.Add(chItem); //TreeView root-Header
else parItem.Items.Add(chItem);
}
}
}
}
}