Создание пользовательского меню - ASP .NET
Как обещал ранее, выкладываю решение по "Создание пользовательского меню" на платформе Visual Studio 2010, языке C#. Структура Базы остается прежним, меняется только таблица BP_USER_MENU поле BP_REPORT_ID, который в свою очередь уже хранит в себе ссылку на страниц.
И так, открываем студию, создаем новый проект и например даем имя проекта Project_UserMenu. Далее добавляем новую страницу, страницу "Входа" и назовем его wfrm_login (учтите что добавление префикса в начале имена объектов, освобождает вас от не чайно использованием зарезервированных слов, в данном случаи префикс "wfrm" означает "web form"), так как эта статья носит тестовый характер, интерфейс входа в приложение будет совсем простым. Добавляем 2 TextBox , 1 Button , 1 Treeview и 1 Custom Validator для отображении ошибок.

Далее добавляем наши бизнес страницы который будет открываться когда будет выбрано соответствующий нод в меню. Для примера я добавляю 2 страницы с именами wfrm_form1, myfrm_form2 в проект и в таблице BP_USER_MENU в поле BP_REPORT_ID указываем меню который должен открывать эти страницы:
Далее обработка кнопки Button , который в свою очередь будет создавать коннект к Базе данных и вызов метода Populate() на рисование соответствующего меню пользователя. Запрос остается тот же:
Behind Code странице wfrm_login:
скриншоты теста:


---
Ramin Hashimzade
И так, открываем студию, создаем новый проект и например даем имя проекта Project_UserMenu. Далее добавляем новую страницу, страницу "Входа" и назовем его wfrm_login (учтите что добавление префикса в начале имена объектов, освобождает вас от не чайно использованием зарезервированных слов, в данном случаи префикс "wfrm" означает "web form"), так как эта статья носит тестовый характер, интерфейс входа в приложение будет совсем простым. Добавляем 2 TextBox , 1 Button , 1 Treeview и 1 Custom Validator для отображении ошибок.

<body> <form id="form1" runat="server"> <div> <table class="style1"> <tr> <td> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:TextBox ID="TextBox2" runat="server" TextMode="Password"></asp:TextBox> <asp:Button ID="Button1" runat="server" Text="Login" onclick="Button1_Click" /> </td> </tr> <tr> <td> <asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="CustomValidator"></asp:CustomValidator> </td> </tr> <tr> <td> <asp:TreeView ID="cmp_Menu_TreeView" runat="server" ShowLines="true" Style="margin-right: 0px" Font-Bold="True" Font-Size="Medium" ForeColor="Black"> </asp:TreeView> </td> </tr> </table> </div> </form> </body>
Далее добавляем наши бизнес страницы который будет открываться когда будет выбрано соответствующий нод в меню. Для примера я добавляю 2 страницы с именами wfrm_form1, myfrm_form2 в проект и в таблице BP_USER_MENU в поле BP_REPORT_ID указываем меню который должен открывать эти страницы:
|
Далее обработка кнопки Button , который в свою очередь будет создавать коннект к Базе данных и вызов метода Populate() на рисование соответствующего меню пользователя. Запрос остается тот же:
SELECT USER_MENU.BP_ID, USER_MENU.BP_PARENT_ID, USER_MENU.BP_LEVEL_ID, USER_MENU.BP_MENU_CAPTION, USER_MENU.BP_REPORT_ID FROM RAMIN.BP_USER t1 JOIN RAMIN.BP_USER_GROUP_MENU T ON T1.BP_USER_GROUP_ID = T.BP_USER_GROUP_ID JOIN RAMIN.BP_USER_MENU USER_MENU ON USER_MENU.BP_ID = T.BP_MENU_ID WHERE (T1.BP_LOGIN = 'ЛОГИН ПОЛЬЗОВАТЕЛЯ ВХОДЯЩЕГО В СИСТЕМУ') ORDER BY USER_MENU.BP_LEVEL_ID, USER_MENU.BP_ID
Behind Code странице wfrm_login:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Oracle.DataAccess.Client; namespace Project_UserMenu { public partial class wfrm_login : System.Web.UI.Page { string myconn; OracleConnection appConn; protected void Page_Load(object sender, EventArgs e) { cmp_Menu_TreeView.Nodes.Clear(); } protected void Button1_Click(object sender, EventArgs e) { myconn = "Data Source=MYDB;User ID=" + TextBox1.Text + ";Password=" + TextBox2.Text; try { appConn = new OracleConnection(myconn); appConn.Open(); Populate(); } catch (Exception ex) { CustomValidator1.IsValid = false; CustomValidator1.Text = ex.Message; return; } } // Рисование меню пользователя в виде дерево. private void Populate() { OracleDataAdapter oraAdap = new OracleDataAdapter(); oraAdap.SelectCommand = new OracleCommand(); oraAdap.SelectCommand.Connection = appConn; oraAdap.SelectCommand.CommandText = Resource1.myQuery; oraAdap.SelectCommand.Parameters.Add("login", OracleDbType.Varchar2, 10).Value = TextBox1.Text; OracleDataReader oraRead = oraAdap.SelectCommand.ExecuteReader(); while (oraRead.Read()) { if (System.Convert.ToString(oraRead["BP_PARENT_ID"]) == "") { TreeNode tn = new TreeNode(); tn.Text = (string)oraRead["BP_MENU_CAPTION"]; tn.Value = System.Convert.ToString(oraRead["BP_ID"]); tn.SelectAction = TreeNodeSelectAction.Expand; cmp_Menu_TreeView.Nodes.Add(tn); tn.NavigateUrl = System.Convert.ToString(oraRead["BP_REPORT_ID"]); } else { TreeNode tn = new TreeNode(); tn.Text = (string)oraRead["BP_MENU_CAPTION"]; tn.Value = System.Convert.ToString(oraRead["BP_ID"]); tn.Target = "_blank"; tn.NavigateUrl = System.Convert.ToString(oraRead["BP_REPORT_ID"]); AddChildNode(cmp_Menu_TreeView.Nodes, System.Convert.ToString(oraRead["BP_PARENT_ID"]), tn); } } oraRead.Close(); } // Добавление дочерный нодов ("Как добавить дочерные ноды зная его родителскый нод") private void AddChildNode(TreeNodeCollection n, string val, TreeNode tn) { for (int i = 0; i < n.Count; i++) { if (n[i].Value == val) { n[i].ChildNodes.Add(tn); n[i].SelectAction = TreeNodeSelectAction.Expand; n[i].NavigateUrl = ""; } n[i].Expand(); AddChildNode(n[i].ChildNodes, val, tn); n[i].Collapse(); } } } }
скриншоты теста:


---
Ramin Hashimzade
добавлено: 15 май 12
просмотры: 4245, комментарии: 0
- создание пользовательского меню - asp .net
- ramin
- ramin hashimzade
- hashimzade ramin
- treeview c
- пользовательское меню
- создание динамического меню
- динамическое меню
- пользовательское меню