Asp.net - Sử dụng lồng các control
Posted: 26/3/2013.
Khi xây dựng ứng dụng hay website, nhiều khi bạn phải sử dùng lồng các control để hiển thị dữ liệu. Ở bài này sẽ hướng dẫn bạn dùng DataList lồng trong ListView.
Khi xây dựng ứng dụng hay website, nhiều khi bạn phải sử dùng lồng các control để hiển thị dữ liệu. Ở bài này sẽ hướng dẫn bạn dùng DataList lồng trong ListView.
Việc này ứng dụng khá dễ khi bạn dùng để hiển thị list các bài viết của mỗi chuyên mục và được phân cách nhau, số chuyên mục này không cố định. Ở bài này tôi chỉ minh họa cách dùng DataList lồng trong ListView, bạn có thể ứng dụng cách làm này trình bày dữ liệu theo yêu cầu của bạn. Giả sử dữ liệu của bạn có 2 bảng TB_Category và TB_News có quan hệ 1-n như sau:
Giờ ta muốn hiển thị dạng Frame với các CateName là các FrameTitle và bên trong là list danh sách các bài viết mới nhất của mỗi CateName này. Code aspx viết như sau:
- <asp:ListView ID="lvCate" runat="server">
- <LayoutTemplate>
- <span id="itemPlaceholder" runat="server"></span>
- </LayoutTemplate>
- <ItemTemplate>
- <div>
- <div class='LeadTitle'>
- <a href='#' title="<%# Eval("CateName") %>">
- <b><%# Eval("CateName") %></b></a>
- </div>
- <asp:Label ID="lblCateID" runat="server" Text='<%# Eval("CateID") %>' Visible="false" />
- <div id="NewsList">
- <asp:DataList ID="lvListNew" RepeatDirection="Horizontal" runat="server" RepeatColumns="4" CellPadding="10" CellSpacing="10" >
- <ItemStyle Width="25%" CssClass="itemoflv" HorizontalAlign="Center" VerticalAlign="Top" />
- <ItemTemplate>
- <a href='#' title='<%# Eval("Title") %>'>
- <%# Eval("Title")%></a>
- </ItemTemplate>
- </asp:DataList>
- </div>
- </div>
- </ItemTemplate>
- </asp:ListView>
Bạn chú ý Trong code aspx trên phần chữ màu xanh là DataList được lồng bên trong ListView (lvCate) và ta cần một Label (Bạn có thể dùng control khác) để khi ta code ta có thể lấy ra các CateID tương ứng và ta không hiển thị Lable này nên có thuộc tính Visible=”false”.
Code Csharp: Vì ở đây tôi chỉ làm ví dụ minh họa nên thực hiện việc truy vấn trực tiếp luôn nên cần hàm thực thi một câu truy vấn và trả về một DataTable
- private DataTable QueryToDataTable(string strSQL)
- {
- DataTable dtbTmp = new DataTable();
- string connString = @" Server =.SQL2005;Initial Catalog=TB_New;User ID=sa;Password=***"; SqlConnection conn = new SqlConnection(connString);
- try
- {
- conn.Open();
- SqlDataAdapter da = new SqlDataAdapter(strSQL, conn);
- DataSet ds = new DataSet();
- da.Fill(ds, "GetData");
- dtbTmp = ds.Tables[0];
- }
- catch (Exception e)
- {
- Console.WriteLine(e.Message);
- }
- finally
- {
- conn.Close();
- }
- return dtbTmp;
- }
Giờ ta viết hàm Bind dữ liệu như sau:
- private void LoadData()
- {
- string strCate = "SELECT CateID, CateName FROM TB_Category";
- string strNew="";
- DataTable dtb = QueryToDataTable(strCate);
- if (dtb.Rows.Count > 0)
- {
- lvCate.DataSource = dtb;
- lvCate.DataBind();
- for (int i = 0; i < dtb.Rows.Count; i++)
- {
- DataList lvListNew = (DataList)lvCate.Items[i].FindControl("lvListNew");
- Label lblCateID = (Label)lvCate.Items[i].FindControl("lblCateID");
- strNew = @"SELECT Top 6 tn.Title, tn.Description FROM TB_News tn INNER JOIN TB_Category ct
- ON tn.CateID = ct.CateID WHERE ct.CateID=" + lblCateID.Text + " AND tn.Status=1 ORDER BY tn.idNews DESC "; DataTable dtbListNew = QueryToDataTable(strNew);
- if (dtbListNew.Rows.Count > 0)
- {
- lvListNew.DataSource = dtbListNew; lvListNew.DataBind();
- }
- }
- }
- }
Trong hàm LoadData trên bạn thấy ta dùng vòng lặp và FindControl để tìm các control bên trong ListView và thực hiện tiếp việc Bind dữ liệu tương ứng. Trong hàm Page_Load nơi bạn muốn hiển thị dữ liệu bạn chỉ cần gọi hàm LoadData(). Về stylesheet bạn chỉ cần thiết kế các style để trình bày dữ liệu cho rõ ràng và đẹp chút là được. Bạn có thể tham khảo stylesheet mà tôi đang dùng trong demo như sau:
.DivFrame{ border:1px solid #999999; margin-bottom:15px; } #ClipList{ background:url(Images/ContentBack.jpg) repeat-x; font-size:13px; } #ClipList .Description{ line-height:20px; padding:0px 10px 0px 10px; font-weight:bold; color:#666666;} #ClipList .Content{ line-height:20px; padding:0px 10px 10px 10px;} #ClipList h1{font-size:16px; color:#0099CC; padding:5px;} .itemoflv{ text-align:center; padding:10px 0px 0px 0px; border:1px solid #DEDEDE; }
Theo blog.hmclip.vn
Các tin mới:
Hướng dẫn tích hợp giao diện trang quản trị SB Admin 2 vào Laravel 5.8.
Hướng dẫn tích hợp Google ReCaptcha v2 vào Laravel bằng curl.
Học lập trình React JS trong vòng 5 phút.
Sử dụng trình soạn thảo CKeditor tích hợp CKFinder với Laravel.
Hướng dẫn cài đặt Apache, PHP, MySQL, PHPMyAdmin trên Windows 10 và cấu hình SendMail.
Các tin cũ hơn:
Hãy bắt đầu lập trình với Windows Phone 8.
Những cách hay giúp bạn trở thành người lập trình viên giỏi.
Kỹ thuật bit field trong phân quyền.
Lựa chọn mô hình lập trình ASP.NET.
Giới thiệu nền tảng Windows Azure.