Bạn ghé thăm diễn đàn lần đầu? hãy đăng ký ngay bây giờ để tham gia.
  • Đăng nhập:

Chào mừng bạn đến với ITVNN FORUM - Diễn đàn công nghệ thông tin.

Nếu đây là lần đầu tiên bạn tham gia diễn đàn, xin mời bạn xem phần Hỏi/Ðáp để biết cách dùng diễn đàn. Để có thể tham gia thảo luận bạn phải đăng ký làm thành viên, click vào đây để đăng ký.


  • Partner Area
    • ITVNN HOSTING - Thiết kế website, Cung cấp Domain, Hosting, VPS Việt Nam Anh Hùng - Thông tin truyền thông
kết quả từ 1 tới 2 trên 2
Tăng kích thước phông chữ Giảm kích thước phông chữ
  1. #1
    nmhung's Avatar

    Trạng thái
    Offline
    Tham gia ngày
    Jan 2011
    Thành viên thứ
    37564
    Tuổi
    37
    Giới tính
    Bài gởi
    167
    Level: 35 [?]
    Experience: 808,457
    Next Level: 824,290
    Cảm ơn 74
    Cảm ơn 12 lần / 10 Bài viết

    Default [ASP.NET] Tạo Menu đa cấp load từ SQL Server  

    Với menu 1 cấp chúng ta hoàn toàn ko cần viết code lập trình vì với 2 control Repeater SqlDataSource đã đủ làm việc đó. Nhưng với menu đa cấp (đặc biệt là ko giới hạn cấp) thì 2 control trên pó tay
    Bài này mình sẽ hướng dẫn các bạn viết code để tạo menu không giới hạn cấp bằng cách dùng đệ qui
    Ở đây mình không phân tích đệ qui là gì. Xem như mọi người đã biết

    Ví dụ ta có DB và một table [chuyenmuc] gồm 3 trường:
    - chuyenmuc_id: mã của chuyên mục.
    - chuyenmuc_name: Tên của chuyên mục.
    - chuyenmuc_parent: mã chuyên mục cha. nếu không có chuyên mục cha thì mã là 0

    Thông thường để tạo menu (dù 1 hay nhiều cấp) ta đều dùng tag

    của html. trong bài này mình cũng dùng tag này.
    Vậy kết quả mà ta cần là một đoạn html có dạng:
    Code: 
    <ul>
    <li>Menu 1 </li>
    <ul>
    <li>Menu 1.1 </li>
    <li>Menu 1.2 </li>
    <li>Menu 1.3 </li>
    <ul>
    <li>Menu 1.3.1 </li>
    <li>Menu 1.3.2 </li>
    </ul>
    </ul>
    <li>Menu 2 </li>
    <ul>
    <li>Menu 2.1 </li>
    <li>Menu 2.2 </li>
    </ul>
    <li>Menu 3 </li>
    <ul>
    <li>Menu 3.1 </li>
    <li>Menu 3.2 </li>
    </ul>
    </ul>
    Bước 1: Trong trang aspx tạo một Label đặt ID=menu

    Code: 
    <asp:Label ID=”menu” runat=”server” Text=”"></asp:Label>
    Bước 2: Viết hàm đệ qui để load menu với nội dung như sau:
    Code: 
    public string loadmenu(int parentid, int level)
    {
    string result = string.Empty;
    string ConnectString = “Data Source=IP SERVER;User ID=USERNAME;Password=PASSWORD”;
    System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection();
    conn.ConnectionString = ConnectString;
    
    System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();
    cmd.CommandType = System.Data.CommandType.Text;
    cmd.CommandText = “SELECT * FROM [chuyenmuc] WHERE [chuyenmuc_parent] = ” + parentid.ToString();
    cmd.Connection = conn;
    conn.Open();
    System.Data.SqlClient.SqlDataReader rd = cmd.ExecuteReader();
    if (!rd.HasRows)
    return result;
    else
    {
    result = ”
    
    “;
    while (rd.Read())
    {
    result += ”
    ” + rd.GetString(rd.GetOrdinal(“chuyenmuc_name”)) + “
    “;
    result += loadmenu(rd.GetInt32(rd.GetOrdinal(“chuyenmuc_id”) ), level + 1);
    }
    result += “
    
    “;
    conn.Close();
    }
    return result;
    }
    Trong đoạn code trên bạn chú ý biến ConnectString có 3 giá trị cần thay đổi cho phù hợp với bạn là: IP SERVER, USERNAME, PASSWORD.

    Vậy là ta đã có một hàm đệ qui trả về giá trị là một string. Hàm này mỗi lần lấy được một chuyên mục sẽ tiếp tục gọi chính nó và tìm chuyên mục con của chuyên mục hiện tại. Cứ như thế cho đến khi đọc hết DB.

    Bước 3: Trong Page_Load gọi hàm loadmenu và gán cho label menu là dc.

    Code: 
    menu.Text = loadmenu(0, 0);
    Vậy là chỉ trong 3 bước bạn đã có một menu không giới hạn cấp rồi đó.

    Ghi chú:Vì hàm này mỗi lần dc gọi là thực hiện truy cập DB nhiều lần nên có thể ảnh hưởng tốc độ. Vì vậy bạn nên lưu giá trị đã tìm dc vào một file nào đó. Chỉ khi nào có thay đổi trên menuthì cập nhật lại file này

  2. #2
    mairoixa's Avatar

    Trạng thái
    Offline
    Tham gia ngày
    Mar 2012
    Thành viên thứ
    56659
    Tuổi
    35
    Giới tính
    Bài gởi
    4
    Level: 19 [?]
    Experience: 17,668
    Next Level: 22,851
    Cảm ơn 0
    Cảm ơn 0 lần / 0 Bài viết

    Default

    Đang cần cái này, cám ơn nhiều nha


 

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. Trả lời: 0
    Bài mới gởi: 23-05-2016, 08:29 AM
  2. Trả lời: 0
    Bài mới gởi: 21-05-2013, 07:56 AM
  3. HDD server, RAM server, Raid controller ...
    By nbkhanh1982 in forum Tư vấn - Thị trường
    Trả lời: 0
    Bài mới gởi: 05-07-2010, 03:46 PM
  4. Arcade: Main Nav Tab + Sub Menu + Dropdown Menu
    By admin in forum v4.0.x Modifications
    Trả lời: 0
    Bài mới gởi: 08-02-2010, 11:26 AM
  5. Trả lời: 0
    Bài mới gởi: 13-09-2009, 04:42 PM

Tags for this Thread

Bookmarks

Quuyền Hạn Của Bạn

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