Từ 1 tới 8 trên tổng số 8 kết quả

Đề tài: help với : CSDL và treeview

  1. #1
    Ngày gia nhập
    11 2007
    Bài viết
    1

    Mặc định help với : CSDL và treeview

    Mình có 1 treeview , cơ sở dữ liệu mình dùng là SQL2000 ,
    Node cha mình muốn load từ 1 table của CSDL (thể loại sách )
    Node con mình muốn load từ 1 table khác ( sách )
    vấn đề đặt ra là , node con (sách) thuộc thể loại nào thì xếp đúng vào node cha có thể loại tương ứng. Nhưng mình làm hoài không làm được

    Mong được cộng đồng anh em giúp đỡ.

  2. #2
    Ngày gia nhập
    06 2007
    Nơi ở
    TP.HCM
    Bài viết
    113

    Đây là CSDL mà tớ nghĩ của cậu cũng vậy:
    LOAISACH(MALS,TENLS);
    SACH(MAS,TENSACH,....,MALS)

    Dưới đây là một cách làm, chuổi kết nối bạn thêm vào, trên form thêm vào một treeview đặt tên là trvTest là OK.

    Code:
    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.SqlClient;
    
    namespace CSDLTREE
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            //biến connection
            private SqlConnection myCon = new SqlConnection();
    
            //hàm truy vấn lấy dữ liệu
            private DataTable Query(string strQuery, SqlConnection connection)
            {
                DataTable dataTable = new DataTable();
                SqlDataAdapter myAdapter = new SqlDataAdapter(strQuery,connection);
                myAdapter.Fill(dataTable);
                return dataTable;
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                //kết nối đến csdl
                myCon.ConnectionString = "server=SUNFLOWER;uid=sa;pwd=;database=DEMO;";
                myCon.Open();
                //lấy dữ liệu với LOAISACH(MALS,...), SACH(MAS,TENSACH,...,MALS)
                DataTable dtbLoaiSach = new DataTable();
                DataTable dtbSach = new DataTable();
    
                dtbLoaiSach = Query("select MALS from LOAISACH", myCon);
                //đưa vào treeview
                //MessageBox.Show(dtbLoaiSach.Rows.Count.ToString());
                for (int i = 0; i < dtbLoaiSach.Rows.Count; i++)
                {
                    //thêm node loại sách vào cây
                    trvTest.Nodes.Add(dtbLoaiSach.Rows[i][0].ToString());
                    //lấy các mặc sách ứng với loại sách của node
                    dtbSach=Query("select TENSACH from SACH where MALS='" + dtbLoaiSach.Rows[i][0].ToString()+"'",myCon);
                    //thêm node sách vào node loại sách
                    for (int j = 0; j < dtbSach.Rows.Count; j++)
                    {
                        trvTest.Nodes[i].Nodes.Add(dtbSach.Rows[j][0].ToString());
                    }
                }
    
                myCon.Close();
            }
    
        }
    }
    Đã được chỉnh sửa lần cuối bởi sunflower : 17-12-2007 lúc 04:59 PM. Lý do: Sửa lại code

    Gác Kiếm

  3. #3
    Ngày gia nhập
    06 2007
    Bài viết
    0

    Cách trên nhìn chung là OK, nhưng theo tớ thì mình bắt sự kiện BeforeExpand hay AfterExpand để Add node con (là tên sách) thì hay hơn. Vì biết đâu trong CSDL của mình có cả trăm ngàn quyển sách cho mỗi thể loại thì chắc chắn là nó load cực chậm.
    Để bắt được 1 trong 2 sự kiện trên thì yêu cầu trên mỗi node cha của TreeView phải có dấu "+" (để click vào). Do đó bạn phải add cho nó 1 node con (ảo-tạm), và trong trong hàm sự kiện bạn xóa node này đi là OK.
    Đó chỉ là ý tưởng của người "ngồi rảnh ko bít làm gì" như tớ. Chúc bạn làm tốt mọi thứ.
    Ngày mai chẳng biết ra sao nữa?
    Dù có ra sao cũng chẳng sao.
    ------------------------------
    Tại hạ mong muốn học hỏi được nhiều hơn từ các cao thủ "C".

  4. #4
    Ngày gia nhập
    06 2007
    Nơi ở
    TP.HCM
    Bài viết
    113

    Trích dẫn Nguyên bản được gửi bởi nhsanga12 Xem bài viết
    Cách trên nhìn chung là OK, nhưng theo tớ thì mình bắt sự kiện BeforeExpand hay AfterExpand để Add node con (là tên sách) thì hay hơn. Vì biết đâu trong CSDL của mình có cả trăm ngàn quyển sách cho mỗi thể loại thì chắc chắn là nó load cực chậm.
    Để bắt được 1 trong 2 sự kiện trên thì yêu cầu trên mỗi node cha của TreeView phải có dấu "+" (để click vào). Do đó bạn phải add cho nó 1 node con (ảo-tạm), và trong trong hàm sự kiện bạn xóa node này đi là OK.
    Đó chỉ là ý tưởng của người "ngồi rảnh ko bít làm gì" như tớ. Chúc bạn làm tốt mọi thứ.
    Uhm! Ý tưởng cũng hay, vậy thì thêm vào cơ chế kiểm tra trong mỗi sự kiên node cha đã được thêm node con chưa nếu thêm rùi thì không thêm nữa, để nó không load tiếp lần khác.

    Gác Kiếm

  5. #5
    Ngày gia nhập
    11 2007
    Bài viết
    1

    cảm ơn các bạn nhiều lắm , mình đã giải quyết được vấn đề ,
    cộng đồng này thật tuyệt

    codes của bạn SunFlower mình chỉnh lại theo bài mình như sau thì bị lỗi ngay vòng lặp đầu tiên tại : i < dt.Rows.Count ( lỗi NullReferenceException was unhandled)

    bạn nào chỉnh lại giúp mình với

    Code:
    private void Form1_Load(object sender, EventArgs e)
            {
                //kết nối đến csdl hàm TaoKetNoi đã được định nghĩa  
                kn.TaoKetNoi();
    
                DataSet ds = new DataSet();
                String s = "SELECT TENLOAISACH FROM LOAISACH";
                ds = kn.Read(s); // hàm truy vấn dữ liệu DataSet read() đã có 
                DataTable dt = ds.Tables["LOAISACH"];                       
                
                for (int i = 0; i < dt.Rows.Count ; i++)
                {
                    //thêm node loại sách vào cây
                    treeView1.Nodes.Add(dt.Rows[i][0].ToString());
    
                     //thêm node tạm vào node loại sách để bắt sự kiện AfterExpand
                    for (int j = 0; j < 1 ; j++)
                    {
                        treeView1.Nodes[i].Nodes.Add("a");
                    }
                }
    
                kn.DongKetNoi();
            }

    ---------------------------------------------------------------
    Đề nghị bạn để code trong thẻ [c o d e]. nhc1987.
    Đã được chỉnh sửa lần cuối bởi nhc1987 : 18-12-2007 lúc 09:03 PM.

  6. #6
    Ngày gia nhập
    03 2007
    Bài viết
    179

    Mặc định help với : CSDL và treeview

    i < dt.Rows.Count
    chỉnh lại i < dt.Rows.Count -1 thử xem nhé, nhưng tốt nhất nên debug xem dt.Rows.Count là nhiêu đã

  7. #7
    Ngày gia nhập
    01 2008
    Bài viết
    20

    Sẳn vấn đề về treeview các bạn cho mình hỏi cái.
    Ví dụ như trên : mình có một table SACH(MAS,TENSACH,....,MALS)
    khi load form lên thì mình cho table này load lên treeview
    lúc này Treeview sẽ có dạng :

    Các Loại sách hiển thị :
    + Sách A
    MAS
    TENSACH
    ...........
    MALS
    + Sách B

    MAS
    TENSACH
    ...........
    MALS
    + Sách C

    MAS
    TENSACH
    ...........
    MALS
    oki vấn đề load sách đã giải quyết đc...
    bây giờ mình sẽ có một form add thêm các loại sách. Add vào csdl mình cũng đã làm dc. tuy nhiên nó không cập nhật lên Treeview ngay cho mình. Mong các bạn giúp chỗ đó.

  8. #8
    Ngày gia nhập
    04 2011
    Nơi ở
    IT-HUI
    Bài viết
    20

    Code:
    public void loadform()
            {
                if (cnn.State == ConnectionState.Closed)
                {
                    cnn.Open();
                    treeView1.Nodes.Clear();
                    listView1.Items.Clear();
    
                    TreeNode nodeRoot, nodeSon, nodeChild;
                    int i, j, k, zx;
    
                    dtb = loadf.ConnectData("Select * From tblCompany");
    
                    if (dtb.Rows.Count > 0)
                    {
                        for (i = 0; i < dtb.Rows.Count; i++)
                        {
                            // Khai báo nodeRoot________________________________________________
                            nodeRoot = new TreeNode(); 
                            nodeRoot.Text = dtb.Rows[i][1].ToString();
    
                            dtb = loadf.ConnectData("Select * From tblRoom Where MaCTY='" + dtb.Rows[i][0].ToString() + "'");
    
                            for (j = 0; j < dtb.Rows.Count; j++)
                            {
                                // Khai báo nodeSon________________________________________________
                                nodeSon = new TreeNode(); 
                                nodeSon.Text = dtb.Rows[j][1].ToString();
    
                                dtb = loadf.ConnectData("Select * From tblPerson Where MaPhong='" + dtb.Rows[j][0].ToString() + "'");
    
                                for (k = 0; k < dtb.Rows.Count; k++)
                                {
                                    // Khai báo nodeChild________________________________________________
                                    nodeChild = new TreeNode(); 
                                    nodeChild.Text = dtb.Rows[k][1].ToString();
    
                                    dtb = loadf.ConnectData("Select * From tblPerson Where MaNV='" + dtb.Rows[k][0].ToString() + "'");
    
                                    nodeSon.Nodes.Add(nodeChild);
                                }
                                nodeRoot.Nodes.Add(nodeSon);
                            }
                            treeView1.Nodes.Add(nodeRoot);
                        }
                    }
                    treeView1.ExpandAll();
                }
            }
    
            private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
            {
                //treeView1.Nodes.Clear();  
                TreeNode chon = treeView1.SelectedNode;
    
                if (chon == null)
                    return;
                else
                {
                    if (chon.Level == 0)
                    {
                        listView1.Items.Clear();
    
                        foreach (TreeNode nodeRoom in treeView1.SelectedNode.Nodes)
                        {
                            foreach (TreeNode nodeEmployer in nodeRoom.Nodes)
                            {
                                ListViewItem item = listView1.Items.Add(nodeEmployer.Text);
                                item.SubItems.Add(nodeRoom.Text);
                            }
                        }
                    }
                    else 
                        if(chon.Level==1)
                        {
                            listView1.Items.Clear();
    
                            foreach (TreeNode node in treeView1.SelectedNode.Nodes)
                            {
                                ListViewItem item = listView1.Items.Add(node.Text);
                                item.SubItems.Add(treeView1.SelectedNode.Text);
                            }
                        }
                        else
                            if (chon.Level == 2)
                            {
                                listView1.Items.Clear();
    
                                ListViewItem item = listView1.Items.Add(treeView1.SelectedNode.Text);
                                item.SubItems.Add(treeView1.SelectedNode.Parent.Text);
                            }
                }
            }
    Các bạn tham khảo nhé !!!

Các đề tài tương tự

  1. cách dùng TreeView với CSDL trong web form?
    Gửi bởi nobita2009hp trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 0
    Bài viết cuối: 02-10-2012, 11:04 PM
  2. kết nối CSDL và hiển thị ra treeview như thế nào?
    Gửi bởi wkiamiuemth trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 18-11-2010, 11:56 PM
  3. Làm sao load tất cả table và column trong CSDL Access vào Treeview?
    Gửi bởi thuan199 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 16-06-2010, 11:31 AM
  4. thắc mắc treeview và CSDL
    Gửi bởi atenachiaka trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 6
    Bài viết cuối: 07-05-2010, 02:46 AM
  5. Load csdl lên treeview được,nhưng không hiện lên textbox???
    Gửi bởi hieudiep trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 22-10-2009, 01:36 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn