Tạo Tab động sử dụng Ajaxcontroltoolkit từ SQL Server trong Asp.net
(Cách tạo Tab Ajaxcontroltoolkit động trong Asp.net) - Tiện ích Tab giúp người sử dụng
có thể nhanh chóng truy cập, xem nội dung bằng cách chuyển đổi giữa các khung
nhìn mà không cần phải di chuyển qua lại giữa các trang. Hiện có rất nhiều các Plugin hay Jquery hỗ trợ
công việc này, tuy nhiên hôm nay Thủ thuật lập trình sẽ giới thiệu với các bạn
cách sử dụng AjaxControlToolkit để tạo các Tabs. Nội dung các Tabs được hiển thị từ các Control
ngoài và đường dẫn cũng như tên các Control này được lấy từ CSDL SQL Server.
- B1: Tạo Bảng DynamicTabs có cấu trúc phía dưới trong CSDL SQL Server.
STT | Tên trường | Kiểu trường | Ghi chú |
1 | ItemID | Int | Trường tự tăng |
2 | TabName | nvarchar(150) | |
3 | Description | nvarchar(250) | Mô tả |
4 | ControlURL | nvarchar(250) | |
5 | ImageURL | nvarchar(250) | |
6 | SortOrder | Int | Thứ tự sắp xếp |
7 | IsVisible | bit | Ân/Hiện Tab |
- B2: Nhập dữ liệu cho bảng DynamicTabs
- B3: Tạo stored procedure trong SQL Server
CREATE procedure [dbo].[Pro_DynamicTabs_List]
@IsVisible bit
as
declare @strSQL nvarchar(1000)
declare @strWhere nvarchar(500)
declare @strOrder nvarchar (50)
set @strSQL= 'Select * from DynamicTabs'
set @strWhere =' where 1=1'
if @IsVisible=1
set @strWhere= @strWhere +' and (IsVisible=1)'
if @IsVisible=0
set @strWhere= @strWhere +' and (IsVisible=0 Or IsVisible Is Null)'
set @strOrder =' Order by SortOrder, TabName'
set @strSQL=@strSQL+@strWhere+@strOrder
print @strSQL
exec sp_executesql @strSQL
- B4: Tạo Project trong Microsoft Visual Studio 2010
Trong Visual Studio tạo 1 Class có tên: Utility và nhập đoạn Code phía dưới cho Class này.
Imports System.Data.SqlClient
Imports System.Data
Namespace BootstrapAccordion
Public Class SqlDataProvider
#Region "Membres Prives"
Shared _IsError As Boolean = False
Private _connectionString As String
#End Region
#Region "Constructeurs"
Public Sub New()
Try
_connectionString = ConfigurationManager.ConnectionStrings("SiteSqlServer").ConnectionString
_IsError = False
Catch ex As Exception
_IsError = True
End Try
End Sub
#End Region
#Region "Proprietes"
Public ReadOnly Property ConnectionString() As String
Get
Return _connectionString
End Get
End Property
#End Region
#Region "Functions"
Public Function FillTable(ByVal sql As String) As DataTable
Try
Dim tb As New DataTable
Dim adap As New SqlDataAdapter(sql, _connectionString)
adap.Fill(tb)
Return tb
Catch ex As Exception
Return Nothing
End Try
End Function
Public Function FillTable(ByVal ProcName As String, ByVal ParamArray Para() As ObjectPara) As DataTable
Try
Dim tb As New DataTable
Dim adap As New SqlDataAdapter(ProcName, _connectionString)
adap.SelectCommand.CommandType = CommandType.StoredProcedure
If Not Para Is Nothing Then
For Each p As ObjectPara In Para
adap.SelectCommand.Parameters.Add(New SqlParameter(p.Name, p.Value))
Next
End If
adap.Fill(tb)
Return tb
Catch ex As Exception
Return Nothing
End Try
End Function
#End Region
End Class
Public Class ObjectPara
Dim _name As String
Dim _Value As Object
Sub New(ByVal Pname As String, ByVal PValue As Object)
_name = Pname
_Value = PValue
End Sub
Public Property Name() As String
Get
Return _name
End Get
Set(ByVal value As String)
_name = value
End Set
End Property
Public Property Value() As Object
Get
Return _Value
End Get
Set(ByVal value As Object)
_Value = value
End Set
End Property
End Class
Chú ý: Thuộc tính SiteSqlServer chính là chuỗi Connect với SQL Server trong file Web.Config
- B5: Download thư viện AjaxControlToolkit tại địa chỉ: Download
- B6: Giải nén AjaxControlToolkit.Binary.NET4, và References Ajaxcontroltoolkit.dll trong thư mục vừa giải nén vào Project.
- B7: Mở file Default.aspx dưới dạng HTML và bổ xung Control
<asp:ScriptManager ID="ScriptManager1" runat="server">
<asp:PlaceHolder ID="plTabs" runat="server"></asp:PlaceHolder>
- B8: Viết Code cho file Default.aspx
C# Code
//Visit http://www.laptrinhdotnet.com
for more ASP.NET Tutorials
using System;
using System.Web.Services;
using System.Web.Script.Services;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Web.UI;
using AjaxControlToolkit;
namespace DynamicTabs
{
public partial class _Default :
System.Web.UI.Page
{
#region
"Create Tab"
private void
CreateTabs()
{
DataTable objBind = new
DataTable();
int
iCount = 0;
int i = 0;
AjaxControlToolkit.TabContainer
tbcDynamic = null;
tbcDynamic = new AjaxControlToolkit.TabContainer();
objBind = BindData();
if (objBind != null)
{
if (objBind.Rows.Count > 0)
{
iCount = objBind.Rows.Count;
foreach (DataRow
row in objBind.Rows)
{
AjaxControlToolkit.TabPanel TabPanel = new
AjaxControlToolkit.TabPanel();
Control myCtrl = new Control();
if (File.Exists(Server.MapPath("~/" + row["ControlURL"].ToString())))
{
myCtrl = Page.LoadControl(row["ControlURL"].ToString());
}
TabPanel.HeaderText =
row["TabName"].ToString();
TabPanel.ID = "Tab" + row["ItemID"].ToString();
tbcDynamic.Tabs.Add(TabPanel);
tbcDynamic.Tabs[i].Controls.Add(myCtrl);
i = i + 1;
}
plTabs.Controls.Add(tbcDynamic);
}
}
}
#endregion
#region
"Bind Data"
private DataTable
BindData()
{
SqlDataProvider objSQL = new
SqlDataProvider();
DataTable objBind = objSQL.FillTable("Pro_DynamicTabs_List", new ObjectPara("@IsVisible", 1));
return objBind;
}
#endregion
#region
"Event Handles"
protected void
Page_Load(object sender, System.EventArgs e)
{
try
{
if (!IsPostBack)
{
CreateTabs();
}
}
catch
{
}
}
#endregion
}
}
VB.NET Code
Imports System.IO
Namespace DynamicTabs
Public Class _Default
Inherits System.Web.UI.Page
#Region "Create
Tabs"
Private Sub
CreateTabs()
Dim objBind As New DataTable
Dim iCount As Integer = 0
Dim i As Integer = 0
Dim tbcDynamic As
AjaxControlToolkit.TabContainer = Nothing
tbcDynamic = New AjaxControlToolkit.TabContainer
objBind = BindData()
If Not objBind Is Nothing Then
If objBind.Rows.Count > 0 Then
iCount = objBind.Rows.Count
For Each
row As DataRow
In objBind.Rows
Dim TabPanel As New AjaxControlToolkit.TabPanel
Dim myCtrl As New Control
If File.Exists(Server.MapPath("~/" & row("ControlURL").ToString))
Then
myCtrl =
Page.LoadControl(row("ControlURL").ToString)
End If
With TabPanel
.HeaderText = row("TabName").ToString
.ID = "Tab" & row("ItemID").ToString
End With
tbcDynamic.Tabs.Add(TabPanel)
tbcDynamic.Tabs(i).Controls.Add(myCtrl)
i = i + 1
Next
plTabs.Controls.Add(tbcDynamic)
End If
End If
End Sub
#End Region
#Region "Bind Data"
Private Function
BindData() As DataTable
Dim objSQL As New SqlDataProvider
Dim objBind As DataTable = objSQL.FillTable("Pro_DynamicTabs_List", New ObjectPara("@IsVisible", 1))
Return objBind
End Function
#End Region
#Region "Event
Handles"
Protected Sub
Page_Load(ByVal sender As
Object, ByVal e
As System.EventArgs)
Handles Me.Load
Try
If Page.IsPostBack = False Then
CreateTabs()
End If
Catch ex As Exception
End Try
End Sub
#End Region
End Class
End Namespace
Trong trường hợp bạn không sử dụng css khác, AjaxControlToolkit sẽ sử dụng css mặc định đã được tích hợp sẵn vào trong thư viện. Bạn có thể tự xây dựng phong cách CssClass theo cách của riêng mình để khoác lên các Tab một tấm áo đẹp và chuyên nghiệp hơn. Dưới đây là các thuộc tính Css của Tab AjaxToolkit.
.ajax__tab_header: Định dạng tiêu đề tab container.
.ajax__tab_outer: Định dạng cạnh trái của một Tab.
.ajax__tab_inner: Định dạng cạnh bên phải của Tab.
.ajax__tab_tab: Định dạng phần trung tâm của một Tab chứa văn bản.
.ajax__tab_hover: Định dạng khi di chuyển chuột qua trạng thái của một Tab.
.ajax__tab_active: Định dạng khi Tab đang được chọn.
.ajax__tab_body: Định dạng vùng chứa nội dung mỗi Tab.
Bây giờ chạy Project bạn sẽ có kết quả sẽ giống như hình dưới.
Chúc các bạn thành công!
Quang Bình
No Comment to " Tạo Tab động sử dụng Ajaxcontroltoolkit từ SQL Server trong Asp.net "