سأنشر إن شاء الله مجموعة من الأكواد و الطرق للتعامل مع هذه الأداة :
كما ورد في شرح هذه الأداة من AjaxToolKit : إنها تحتوي على عدة ألواح (Pane) تستطيع أن تعرض واحدة منها فقط كل مرة
لنرى في البداية كيفية وضع Accordion من خلال Source Code :
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Accordion Tips and Tricks</title>
<style type="text/css">
.accordionHeader
{
color: white;
background-color: #719DDB;
font: bold 11px auto "Trebuchet MS", Verdana;
font-size: 12px;
cursor: pointer;
padding: 4px;
margin-top: 3px;
}
.accordionContent
{
background-color: #DCE4F9;
font: normal 10px auto Verdana, Arial;
border: 1px gray;
padding: 4px;
padding-top: 7px;
}
</style>
<script type="text/javascript">
// Add the scripts shown in the tips over here
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<cc1:Accordion ID="AccordionCtrl" runat="server"
SelectedIndex="0" HeaderCssClass="accordionHeader"
ContentCssClass="accordionContent" AutoSize="None"
FadeTransitions="true">
<Panes>
<cc1:AccordionPane ID="AccordionPane0" runat="server">
<Header>Pane 1</Header>
<Content>
Lorem ipsum dolor sit amet, consectetur adipisicing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna
aliqua.
</Content>
</cc1:AccordionPane>
<cc1:AccordionPane ID="AccordionPane1" runat="server">
<Header>Pane 2</Header>
<Content>
Ut enim ad minim veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat.
</Content>
</cc1:AccordionPane>
<cc1:AccordionPane ID="AccordionPane2" runat="server">
<Header>Pane 3</Header>
<Content>
Duis aute irure dolor in reprehenderit in voluptate velit
esse cillum dolore eu fugiat nulla pariatur.
</Content>
</cc1:AccordionPane>
<cc1:AccordionPane ID="AccordionPane3" runat="server">
<Header>Pane 4</Header>
<Content>
Excepteur sint occaecat cupidatat non proident, sunt in
culpa qui officia deserunt mollit anim id est laborum.
</Content>
</cc1:AccordionPane>
</Panes>
</cc1:Accordion>
</div>
</form>
</body>
</html>1- نرى تحت كود تعريف الصفحة سطر يتضمن كود تعريف هذه الأداة و عند سحب الأداة و إفلاتها فإن هذا الكود سيتولد تلقائياً
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
2- و أيضا كود الستايل الخاص بالأداة , و نستطيع وضع كود الستايل في صفحة مستقلة أو ضمن صفحة Source
في السطر رقم 1 التابع المخصص لإعطاء الستايل إلى المعلومات في راس الاداة
و في السطر رقم 11 التابع المخصص لإعطاء الستايل إلى المحتوى
0- <style type="text/css">
1- .accordionHeader
2- {
3- color: white;
4- background-color: #719DDB;
5- font: bold 11px auto "Trebuchet MS", Verdana;
6- font-size: 12px;
7- cursor: pointer;
8- padding: 4px;
9- margin-top: 3px;
10- }
11- .accordionContent
12- {
13- background-color: #DCE4F9;
14- font: normal 10px auto Verdana, Arial;
15- border: 1px gray;
16- padding: 4px;
17- padding-top: 7px;
18- }
19- </style>3- يتم استدعاء هذين التابعين مباشرة من :
<cc1:Accordion ID="AccordionCtrl" runat="server"
SelectedIndex="0"
HeaderCssClass="accordionHeader" ستايل الرأس
ContentCssClass="accordionContent" ستايل المحتوى
AutoSize="None"
FadeTransitions="true">4- و قبل وضع هذه الأداة يجب علينا وضع ScriptManager في بداية الكود و قبل كل شيء
<asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager>
5- و هذا كود توليد الأداة Accordion
في السطر 0 و هي الأداة التي تحوي الألواح (Panes ) و يستدعى فيها كما سبق الستايلات
في السطر 4 نضع الخاصية <pane> لوضع داخلها العدد الذي نريده من AccordionPane
وبعد وضع أول AccordionPane نضمن بداخلها في السطر 6 النص الذي نريده أن يظهر في رأس الاداة
و في السطر 7 حتى 11 نضع النص الذي نريده أن يظهر في محتوى الأداة
و نكرر نفس العملية بالنسبة للباقي
0- <cc1:Accordion ID="AccordionCtrl" runat="server" 1- SelectedIndex="0" HeaderCssClass="accordionHeader" 2- ContentCssClass="accordionContent" AutoSize="None" 3- FadeTransitions="true"> 4- <Panes> 5- <cc1:AccordionPane ID="AccordionPane0" runat="server"> 6- <Header>Pane 1</Header> 7- <Content> 8- Lorem ipsum dolor sit amet, consectetur adipisicing elit, 9- sed do eiusmod tempor incididunt ut labore et dolore magna 10- aliqua. 11- </Content> 12- </cc1:AccordionPane> 13- <cc1:AccordionPane ID="AccordionPane1" runat="server"> 14- <Header>Pane 2</Header> 15- <Content> 16- Ut enim ad minim veniam, quis nostrud exercitation ullamco 17- laboris nisi ut aliquip ex ea commodo consequat. 18- </Content> 19- </cc1:AccordionPane> 20- <cc1:AccordionPane ID="AccordionPane2" runat="server"> 21- <Header>Pane 3</Header> 22- <Content> 23- Duis aute irure dolor in reprehenderit in voluptate velit 24- esse cillum dolore eu fugiat nulla pariatur. 25- </Content> 26- </cc1:AccordionPane> 27- <cc1:AccordionPane ID="AccordionPane3" runat="server"> 28- <Header>Pane 4</Header> 29- <Content> 30- Excepteur sint occaecat cupidatat non proident, sunt in 31- culpa qui officia deserunt mollit anim id est laborum. 32- </Content> 33- </cc1:AccordionPane> 34- </Panes> 35- </cc1:Accordion>
كيف تضيف Accordion Pane الى Accordion برمجياً من خلال كود JavaScript
How to Add an ASP.NET AJAX Accordion Pane at Runtime
في السطر 1 نضع tag بداية كود Javascript حيث نخبر الكومبايلر أن هذا الكود هو JavaScript كما هو موضوح
ملاحظة : هذا الكود يجب أن يوضع بين <Head> يوضع الكود هنا </Head> و لا يجب أن يوضع في الفورم و إلا لن يعمل .
في السطر 2 نضع حدث بداية تحميل الصفحة و نضع فيه استدعاء للتابع الذي نريده أن يضيف AccordionPane برمجيا
في السطر 7 تعريف للتابع و يحتوي على :
في 9 عليه إيجاد الأداة التي يجب أن يضيف إليها Pane
في 11 النص الذي سيظهر في الرأس
في 12 تعريف نوع كلاس الاضافة
في 14 النص الذي سيظهر في المحتوى
في 15 تعريف نوع كلاس الاضافة
في 16 – 17 نضيف عنصري الرأس و المحتوى إلى الأداة المراد الإضافة إليها
في 18 إضافة الرأس و المحتوى بعد تعريفهما في الأداة
1- <script type="text/javascript">
2- function pageLoad()
3- {
4- AddPaneAtRuntime();
5- }
6-
7- function AddPaneAtRuntime()
8- {
9- var newAccordion = $find("AccordionCtrl_AccordionExtender");
10- var header = document.createElement("div");
11- header.innerText = "Pane 5";
12- header.className = "accordionHeader";
13- var content = document.createElement("div");
14- content.innerText = " This pane was added using JavaScript";
15- content.className = "accordionContent";
16- newAccordion.get_element().appendChild(header);
17- newAccordion.get_element().appendChild(content);
18- newAccordion.addPane(header,content);
19- }
20-
21- </script>إضافتها من خلال كود c#
في السطر 1 حدث تحميل الصفحة
في السطر 3 إنشاء (instants ) من AccordinPane
في السطر 4 إضافة النص في الرأس
في السطر 5- 6 إضافة النص في المحتوى
في السطر 7 إضافة HeaderContainer و ContentContainer الى AccordinPane
1- protected void Page_Load(object sender, EventArgs e)
2- {
3- AccordionPane newAccordion = new AccordionPane();
4- newAccordion.HeaderContainer.Controls.Add(new LiteralControl("Pane 5"));
5- newAccordion.ContentContainer.Controls.Add(new
6- LiteralControl("This pane was added using Code Behind"));
7- AccordionCtrl.Panes.Add(newAccordion);
8- }كيفية إخفاء الأداة من خلال كود javascript
How to Hide an ASP.NET AJAX Accordion Pane at Runtime
<script type="text/javascript">
function pageLoad()
{
hideAccordionPane(1);
}
// hides pane 1
function hideAccordionPane(paneno)
{
$find('AccordionCtrl_AccordionExtender').get_Pane(paneno).header.style.display="none";
$find('AccordionCtrl_AccordionExtender').get_Pane(paneno).content.style.display="none";
}
</script>لا جديد في الكود حيث يبحث عن الأداة من خلال الـ ID و يخفي الرأس و المحتوى كل على حدى ( و يقوم بإخفاء أول Pane)
كيفية توسيع (Expand ) برمجيا دون النقر عليها بالفأرة :
How to programmatically expand an ASP.NET AJAX Accordion Pane
<script type="text/javascript">
function pageLoad()
{
changeSelected(2); // expand pane 3
}
// expand given accordion pane
function changeSelected(idx)
{
$find('AccordionCtrl_AccordionExtender').set_SelectedIndex(idx);
}
</script>كيف تعرف الـ Pane التي تم تحديدها
How to determine when an ASP.NET AJAX Accordion Pane has been expanded/selected
<script type="text/javascript">
function pageLoad()
{
var accCtrl = $find('AccordionCtrl_AccordionExtender');
accCtrl.add_selectedIndexChanged(onAccordionPaneChanged);
}
function onAccordionPaneChanged(sender, eventArgs)
{
var selPane = sender.get_SelectedIndex() + 1;
alert('You selected Pane ' + selPane);
}
</script>لجعل الـ Pane تتوسع تلقائياً عند مرور الفأرة عليها .
Expand an ASP.NET AJAX Accordion Pane on MouseOver
<script type="text/javascript">
function pageLoad()
{
AddMouseOverToAccordion();
}
function AddMouseOverToAccordion()
{
var acc = $find('AccordionCtrl_AccordionExtender');
for(paneIdx = 0; paneIdx < acc.get_Count(); paneIdx++)
{
$addHandler(acc.get_Pane(paneIdx).header,"mouseover",acc._headerClickHandler);
}
}
</script>لمنع توسيع Pane معينة من التوسع
Prevent an ASP.NET AJAX Accordion Pane from Expanding
<script type="text/javascript">
function pageLoad()
{
RemoveHandlerAtRuntime(2);
}
function RemoveHandlerAtRuntime(pane)
{
$removeHandler($find('AccordionCtrl_AccordionExtender').get_Pane(pane).header,"click",$find('AccordionCtrl_AccordionExtender')._headerClickHandler);
}
</script>أرجو صالح الدعاء
و السلام عليكم و رحمة الله و بركاته