R1((ky
22-10-2008, 14:11
Salve a tutti, mi sto cimentando con il C#, creando una piccola applicazione che crea un albero di categorie da un database (usando l'ID della categoria di livello superiore), poi una volta selezionato il nodo dell'albero, dovrebbe comparire nella ListView la lista degli articoli presenti in quella categoria.
Qualcosa sono riuscito a fare, solo che non riesco a trovare il metodo per filtrare la query degli articoli della ListView in base alla categoria selezionata nel treeview.
Il codice è il seguente:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
namespace Treeview
{
public partial class Articoli : Form
{
public Articoli()
{
InitializeComponent();
string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Datapref.mdb";
int? ParentUID = null;
System.Collections.ArrayList tnodes = new System.Collections.ArrayList();
OleDbConnection conn = new OleDbConnection(connString);
DataSet ds = new DataSet();
conn.Open();
OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM TblArtCat", conn);
adapter.Fill(ds);
conn.Close();
DataTable dtbParent = new DataTable();
dtbParent = ds.Tables[0];
foreach (DataRow drowParent in dtbParent.Rows)
{
if (ParentUID == null)
{
ParentUID = 0;
TreeNode node = new TreeNode();
node.Text = drowParent["ArtCatDeb"].ToString();
node.Tag = (int)drowParent["ArtCatKey"];
TreeCat.Nodes.Add(node);
tnodes.Add(node);
}
else
{
ParentUID = (int)drowParent["ArtCatLnk"];
//Se è il primo nodo
if (ParentUID == 0)
{
TreeNode node = new TreeNode();
node.Text = drowParent["ArtCatDeb"].ToString();
node.Tag = (int)drowParent["ArtCatKey"];
TreeCat.Nodes.Add(node);
tnodes.Add(node);
}
else
{
for (int i = 0; i < tnodes.Count; i++)
{
if ((int)((TreeNode)tnodes[i]).Tag == ParentUID)
{
TreeNode node = new TreeNode();
node.Text = drowParent["ArtCatDeb"].ToString();
node.Tag = (int)drowParent["ArtCatKey"];
tnodes.Add(node);
((TreeNode)tnodes[i]).Nodes.Add(node);
break;
}
//Fine albero
}
}
}
}
}
private void TreeCat_AfterSelect(object sender, TreeViewEventArgs e)
{
string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Datapref.mdb";
OleDbConnection conn = new OleDbConnection(connString);
DataSet DGrid = new DataSet();
conn.Open();
OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT ArtKey, ArtDeb FROM TblArt WHERE TblArt.ArtCatKey = 29" , conn);
adapter.Fill(DGrid);
DataTable dtable = new DataTable();
dtable = DGrid.Tables[0];
// Svuota la Listview
ArtGrid.Items.Clear();
for (int i = 0; i < dtable.Rows.Count; i++)
{
DataRow drow = dtable.Rows[i];
// Definisce Item e SubItems
ListViewItem lvi = new ListViewItem(drow["ArtKey"].ToString());
lvi.SubItems.Add(drow["ArtDeb"].ToString());
// Aggiunge i dati alla Listview
ArtGrid.Items.Add(lvi);
}
conn.Close();
}
private void Chiudi_Click(object sender, EventArgs e)
{
this.Close();
}
}
}
Ora nella query degli articoli c'è una categora fissa, come fare per leggere l'Id (ArtCatKey) dal nodo selezionato?
Grazie a chi mi aiuterà!
Qualcosa sono riuscito a fare, solo che non riesco a trovare il metodo per filtrare la query degli articoli della ListView in base alla categoria selezionata nel treeview.
Il codice è il seguente:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
namespace Treeview
{
public partial class Articoli : Form
{
public Articoli()
{
InitializeComponent();
string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Datapref.mdb";
int? ParentUID = null;
System.Collections.ArrayList tnodes = new System.Collections.ArrayList();
OleDbConnection conn = new OleDbConnection(connString);
DataSet ds = new DataSet();
conn.Open();
OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM TblArtCat", conn);
adapter.Fill(ds);
conn.Close();
DataTable dtbParent = new DataTable();
dtbParent = ds.Tables[0];
foreach (DataRow drowParent in dtbParent.Rows)
{
if (ParentUID == null)
{
ParentUID = 0;
TreeNode node = new TreeNode();
node.Text = drowParent["ArtCatDeb"].ToString();
node.Tag = (int)drowParent["ArtCatKey"];
TreeCat.Nodes.Add(node);
tnodes.Add(node);
}
else
{
ParentUID = (int)drowParent["ArtCatLnk"];
//Se è il primo nodo
if (ParentUID == 0)
{
TreeNode node = new TreeNode();
node.Text = drowParent["ArtCatDeb"].ToString();
node.Tag = (int)drowParent["ArtCatKey"];
TreeCat.Nodes.Add(node);
tnodes.Add(node);
}
else
{
for (int i = 0; i < tnodes.Count; i++)
{
if ((int)((TreeNode)tnodes[i]).Tag == ParentUID)
{
TreeNode node = new TreeNode();
node.Text = drowParent["ArtCatDeb"].ToString();
node.Tag = (int)drowParent["ArtCatKey"];
tnodes.Add(node);
((TreeNode)tnodes[i]).Nodes.Add(node);
break;
}
//Fine albero
}
}
}
}
}
private void TreeCat_AfterSelect(object sender, TreeViewEventArgs e)
{
string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Datapref.mdb";
OleDbConnection conn = new OleDbConnection(connString);
DataSet DGrid = new DataSet();
conn.Open();
OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT ArtKey, ArtDeb FROM TblArt WHERE TblArt.ArtCatKey = 29" , conn);
adapter.Fill(DGrid);
DataTable dtable = new DataTable();
dtable = DGrid.Tables[0];
// Svuota la Listview
ArtGrid.Items.Clear();
for (int i = 0; i < dtable.Rows.Count; i++)
{
DataRow drow = dtable.Rows[i];
// Definisce Item e SubItems
ListViewItem lvi = new ListViewItem(drow["ArtKey"].ToString());
lvi.SubItems.Add(drow["ArtDeb"].ToString());
// Aggiunge i dati alla Listview
ArtGrid.Items.Add(lvi);
}
conn.Close();
}
private void Chiudi_Click(object sender, EventArgs e)
{
this.Close();
}
}
}
Ora nella query degli articoli c'è una categora fissa, come fare per leggere l'Id (ArtCatKey) dal nodo selezionato?
Grazie a chi mi aiuterà!