Hi,
I'e followed this demo to get a treeview-like radgrid:
http://demos.telerik.com/aspnet-ajax/grid/examples/hierarchy/selfreferencing/defaultcs.aspx
But the problems start at editing already inserted items.
Only the root(top-parent) item can be edited. If I click on the edit pencil icon on an item that has a parrent, that item dissapears from the gird, but if I later click on a root item both items get opened for editing.
Editing mode is on PopUp with user control.
And here is the page:
And the code behind:
Any help with this?
Best regards,
Thomas
I'e followed this demo to get a treeview-like radgrid:
http://demos.telerik.com/aspnet-ajax/grid/examples/hierarchy/selfreferencing/defaultcs.aspx
But the problems start at editing already inserted items.
Only the root(top-parent) item can be edited. If I click on the edit pencil icon on an item that has a parrent, that item dissapears from the gird, but if I later click on a root item both items get opened for editing.
Editing mode is on PopUp with user control.
And here is the page:
| <%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="pm_tasks.aspx.cs" Inherits="members_pm_tasks" %> |
| <%@ Register assembly="Telerik.Web.UI" namespace="Telerik.Web.UI" tagprefix="telerik" %> |
| <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> |
| <script type="text/javascript"> |
| var combo; |
| function nodeClicking(sender, args) { |
| var combocomboBox = combo; |
| var node = args.get_node() |
| comboBox.set_text(node.get_text()); |
| comboBox.value = node.get_value(); |
| comboBox.trackChanges(); |
| comboBox.commitChanges(); |
| comboBox.hideDropDown(); |
| } |
| function StopPropagation(e) { |
| if (!e) { |
| e = window.event; |
| } |
| e.cancelBubble = true; |
| } |
| function OnClientDropDownOpenedHandler(sender, args) { |
| combo = sender; |
| var tree = sender.get_items().getItem(0).findControl("rtv_parent"); |
| var selectedNode = tree.get_selectedNode(); |
| if (selectedNode) { |
| selectedNode.scrollIntoView(); |
| } |
| } |
| </script> |
| <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server"> |
| <AjaxSettings> |
| <telerik:AjaxSetting AjaxControlID="RadGrid1"> |
| <UpdatedControls> |
| <telerik:AjaxUpdatedControl ControlID="RadGrid1" /> |
| </UpdatedControls> |
| </telerik:AjaxSetting> |
| <telerik:AjaxSetting AjaxControlID="chk_end"> |
| <UpdatedControls> |
| <telerik:AjaxUpdatedControl ControlID="chk_end" /> |
| <telerik:AjaxUpdatedControl ControlID="RadGrid1" /> |
| </UpdatedControls> |
| </telerik:AjaxSetting> |
| <telerik:AjaxSetting AjaxControlID="ddl_project"> |
| <UpdatedControls> |
| <telerik:AjaxUpdatedControl ControlID="ddl_project" /> |
| <telerik:AjaxUpdatedControl ControlID="RadGrid1" /> |
| </UpdatedControls> |
| </telerik:AjaxSetting> |
| </AjaxSettings> |
| </telerik:RadAjaxManager> |
| <table> |
| <tr> |
| <td> |
| IZBERI PROJEKT: |
| </td> |
| <td> |
| <asp:DropDownList ID="ddl_project" runat="server" DataTextField="title" DataValueField="id" DataSourceID="SqlProject" |
| OnSelectedIndexChanged="project_SelectedIndexChanged" OnDataBound="project_DataBound" AutoPostBack="true" Filter="Contains" AllowCustomText="true"> |
| </asp:DropDownList> |
| <asp:SqlDataSource ID="SqlProject" runat="server" |
| ConnectionString="<%$ ConnectionStrings:myConnectionString %>" |
| SelectCommand="SELECT [id], [title] FROM pm_projects"> |
| </asp:SqlDataSource> |
| </td> |
| <td> |
| <asp:CheckBox ID="chk_end" runat="server" OnCheckedChanged="chk_endChanged" Checked="true" AutoPostBack="true" /> |
| </td> |
| <td> |
| PRIKAŽI SAMO NEDOKONČANE NALOGE |
| </td> |
| </tr> |
| </table> |
| <br /><br /> |
| <telerik:RadGrid ID="RadGrid1" runat="server" DataSourceID="SqlTask" OnColumnCreated="RadGrid1_ColumnCreated" |
| OnItemCreated="RadGrid1_ItemCreated" OnInsertCommand="taskInsertCommand" |
| OnItemDataBound="RadGrid1_ItemDataBound" GridLines="None" Skin="Default>" |
| <MasterTableView HierarchyDefaultExpanded="true" HierarchyLoadMode="Client" AllowSorting="true" |
| DataKeyNames="id" Width="100%" AutoGenerateColumns="False" |
| DataSourceID="SqlTask" GridLines="None" AllowPaging="True" EditMode="PopUp"> |
| <SelfHierarchySettings ParentKeyName="id_parent" KeyName="id" /> |
| <Columns> |
| <telerik:GridBoundColumn DataField="id" DataType="System.Int32" HeaderText="ID" |
| ReadOnly="True" SortExpression="id" UniqueName="id" HeaderStyle-Width="150px"> |
| </telerik:GridBoundColumn> |
| <telerik:GridBoundColumn DataField="title" DataType="System.String" |
| HeaderText="NASLOV" SortExpression="title" |
| UniqueName="title" HeaderStyle-Width="150px"> |
| </telerik:GridBoundColumn> |
| <telerik:GridBoundColumn DataField="start_date" DataType="System.DateTime" |
| HeaderText="DATUM ZAÄŒETKA" SortExpression="start_date" UniqueName="start_date" HeaderStyle-Width="150px"> |
| </telerik:GridBoundColumn> |
| <telerik:GridBoundColumn DataField="task_creator" DataType="System.Guid" |
| HeaderText="USTVARJALEC" SortExpression="task_creator" |
| UniqueName="task_creator" HeaderStyle-Width="150px"> |
| </telerik:GridBoundColumn> |
| <telerik:GridBoundColumn DataField="task_assigned" DataType="System.Guid" |
| HeaderText="IZVAJALEC" SortExpression="task_assigned" |
| UniqueName="task_assigned" HeaderStyle-Width="150px"> |
| </telerik:GridBoundColumn> |
| <telerik:GridBoundColumn DataField="deadline" DataType="System.DateTime" |
| HeaderText="ROK" SortExpression="deadline" UniqueName="deadline" HeaderStyle-Width="150px"> |
| </telerik:GridBoundColumn> |
| <telerik:GridBoundColumn DataField="percent_complete" DataType="System.Int32" |
| HeaderText="KONÄŒANO V %" SortExpression="percent_complete" |
| UniqueName="percent_complete" HeaderStyle-Width="150px"> |
| </telerik:GridBoundColumn> |
| <telerik:GridBoundColumn DataField="end_date" DataType="System.DateTime" |
| HeaderText="DATUM KONCA" SortExpression="end_date" UniqueName="end_date" HeaderStyle-Width="150px"> |
| </telerik:GridBoundColumn> |
| <telerik:GridBoundColumn DataField="predecessors" HeaderText="PREDHODNIKI" |
| SortExpression="predecessors" UniqueName="predecessors" HeaderStyle-Width="150px"> |
| </telerik:GridBoundColumn> |
| <telerik:GridBoundColumn DataField="id_parent" DataType="System.Int32" |
| HeaderText="id_parent" SortExpression="id_parent" UniqueName="id_parent" Visible="true" HeaderStyle-Width="150px"> |
| </telerik:GridBoundColumn> |
| <telerik:GridButtonColumn ButtonType="ImageButton" CommandName="Preview" Text="Predogled" ImageUrl="~/members/images/magnifier.png" UniqueName="Preview"> |
| <HeaderStyle Width="25px" /> |
| </telerik:GridButtonColumn> |
| <telerik:GridEditCommandColumn ButtonType="ImageButton" CancelText="Preklici" |
| InsertText="Dodaj" UpdateText="Shrani"> |
| <HeaderStyle Width="32px" /> |
| </telerik:GridEditCommandColumn> |
| <telerik:GridButtonColumn ButtonType="ImageButton" CommandName="Delete" |
| ConfirmDialogType="RadWindow" ConfirmText="Ali si preprican da želiš izbrisati vnos ?" |
| Text="Briši" UniqueName="column"> |
| <HeaderStyle Width="32px" /> |
| </telerik:GridButtonColumn> |
| <telerik:GridTemplateColumn AllowFiltering="false"> |
| <ItemTemplate> |
| <img src="images/calendar.gif" style="cursor:pointer;" alt="" onclick="return Wopen('<%# Eval("id") %>');" /> |
| </ItemTemplate> |
| <HeaderStyle Width="32px" /> |
| </telerik:GridTemplateColumn> |
| </Columns> |
| <EditFormSettings CaptionFormatString="UREJANJE NALOG" UserControlName="user_controls/insertTask.ascx" |
| EditFormType="WebUserControl" PopUpSettings-Width="600"> |
| <EditColumn ButtonType="ImageButton" UniqueName="EditCommandColumn1"> |
| </EditColumn> |
| <PopUpSettings ScrollBars="None"></PopUpSettings> |
| </EditFormSettings> |
| </MasterTableView> |
| <ClientSettings AllowExpandCollapse="true" /> |
| </telerik:RadGrid> |
| <asp:SqlDataSource ID="SqlTask" runat="server" |
| ConnectionString="<%$ ConnectionStrings:myConnectionString %>" |
| OnSelecting="SqlTask_Selecting" |
| SelectCommand="SELECT [id], [title], [start_date], [end_date], (select ime + ' ' + priimek from Calendar where guid_calendar = t.task_creator) as [task_creator], |
| (select ime + ' ' + priimek from Calendar where guid_calendar = t.task_assigned) as [task_assigned], [deadline], |
| [percent_complete], [predecessors], [id_parent] |
| FROM [pm_tasks] t |
| WHERE t.id_project = @id_project AND t.percent_complete < @percent_max"> |
| <SelectParameters> |
| <asp:Parameter Name="id_project" DefaultValue="1" /> |
| <asp:Parameter Name="percent_max" DefaultValue="100" /> |
| </SelectParameters> |
| </asp:SqlDataSource> |
| </asp:Content> |
And the code behind:
| using System; |
| using System.Collections.Generic; |
| using System.Linq; |
| using System.Web; |
| using System.Web.UI; |
| using System.Web.UI.WebControls; |
| using Telerik.Web.UI; |
| using System.Reflection; |
| using System.Data; |
| using System.Data.SqlClient; |
| using System.Configuration; |
| using System.Web.Services; |
| using System.Web.Security; |
| using System.Collections; |
| using System.Diagnostics; |
| using System.Text; |
| using System.IO; |
| using System.Web.Profile; |
| using System.Xml.Linq; |
| public partial class members_pm_tasks : System.Web.UI.Page |
| { |
| private int ddl_index; |
| private DataClassesDataContext db = new DataClassesDataContext(); |
| protected void RadGrid1_ColumnCreated(object sender, GridColumnCreatedEventArgs e) |
| { |
| if (e.Column is GridExpandColumn) |
| { |
| e.Column.Visible = false; |
| } |
| else if (e.Column is GridBoundColumn) |
| { |
| e.Column.HeaderStyle.Width = Unit.Pixel(150); |
| } |
| } |
| public void Page_Load(object sender, EventArgs e) |
| { |
| if (Assembly.GetAssembly(typeof(ScriptManager)).FullName.IndexOf("3.5") != -1 || Assembly.GetAssembly(typeof(ScriptManager)).FullName.IndexOf("4.0") != 1) |
| { |
| RadGrid1.MasterTableView.FilterExpression = @"it[""id_parent""] = Convert.DBNull"; |
| } |
| else |
| { |
| RadGrid1.MasterTableView.FilterExpression = "id_parent IS NULL"; |
| } |
| if (!IsPostBack) |
| { |
| try |
| { |
| ddl_index = System.Convert.ToInt32(Request.QueryString["ddl_index"]); |
| if (ddl_index != 0) |
| { |
| ddl_project.SelectedValue = ddl_index.ToString(); |
| } |
| } |
| catch { ddl_index = 0; } |
| } |
| } |
| public void Page_PreRenderComplete(object sender, EventArgs e) |
| { |
| HideExpandColumnRecursive(RadGrid1.MasterTableView); |
| } |
| public void HideExpandColumnRecursive(GridTableView tableView) |
| { |
| GridItem[] nestedViewItems = tableView.GetItems(GridItemType.NestedView); |
| foreach (GridNestedViewItem nestedViewItem in nestedViewItems) |
| { |
| foreach (GridTableView nestedView in nestedViewItem.NestedTableViews) |
| { |
| nestedView.Style["border"] = "0"; |
| Button MyExpandCollapseButton = (Button)nestedView.ParentItem.FindControl("MyExpandCollapseButton"); |
| if (nestedView.Items.Count == 0) |
| { |
| if (MyExpandCollapseButton != null) |
| { |
| MyExpandCollapseButton.Style["visibility"] = "hidden"; |
| } |
| nestedViewItem.Visible = false; |
| } |
| else |
| { |
| if (MyExpandCollapseButton != null) |
| { |
| MyExpandCollapseButton.Style.Remove("visibility"); |
| } |
| } |
| if (nestedView.HasDetailTables) |
| { |
| HideExpandColumnRecursive(nestedView); |
| } |
| } |
| } |
| } |
| protected void RadGrid1_ItemCreated(object sender, GridItemEventArgs e) |
| { |
| CreateExpandCollapseButton(e.Item, "id"); |
| if (e.Item is GridHeaderItem && e.Item.OwnerTableView != RadGrid1.MasterTableView) |
| { |
| e.Item.Style["display"] = "none"; |
| } |
| if (e.Item is GridNestedViewItem) |
| { |
| e.Item.Cells[0].Visible = false; |
| } |
| } |
| protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e) |
| { |
| CreateExpandCollapseButton(e.Item, "id"); |
| RadGrid1.MasterTableView.CommandItemDisplay = GridCommandItemDisplay.Top; |
| RadGrid1.MasterTableView.CommandItemSettings.AddNewRecordText = "NOVO OPRAVILO"; |
| RadGrid1.MasterTableView.CommandItemSettings.RefreshText = "OSVEŽI"; |
| } |
| public void CreateExpandCollapseButton(GridItem item, string columnUniqueName) |
| { |
| if (item is GridDataItem) |
| { |
| if (item.FindControl("MyExpandCollapseButton") == null) |
| { |
| Button button = new Button(); |
| button.Click += new EventHandler(button_Click); |
| button.CommandName = "ExpandCollapse"; |
| button.CssClass = (item.Expanded) ? "rgCollapse" : "rgExpand"; |
| button.ID = "MyExpandCollapseButton"; |
| if (item.OwnerTableView.HierarchyLoadMode == GridChildLoadMode.Client) |
| { |
| string script = String.Format(@"$find(""{0}"")._toggleExpand(this, event); return false;", item.Parent.Parent.ClientID); |
| button.OnClientClick = script; |
| } |
| int level = item.ItemIndexHierarchical.Split(':').Length; |
| if (level > 1) |
| { |
| button.Style["margin-left"] = level * 10 + "px"; |
| } |
| TableCell cell = ((GridDataItem)item)[columnUniqueName]; |
| cell.Controls.Add(button); |
| cell.Controls.Add(new LiteralControl(" ")); |
| cell.Controls.Add(new LiteralControl(((GridDataItem)item).GetDataKeyValue(columnUniqueName).ToString())); |
| } |
| } |
| } |
| void button_Click(object sender, EventArgs e) |
| { |
| ((Button)sender).CssClass = (((Button)sender).CssClass == "rgExpand") ? "rgCollapse" : "rgExpand"; |
| } |
| protected void SqlTask_Selecting(object sender, SqlDataSourceSelectingEventArgs e) |
| { |
| if (ddl_project.SelectedValue != "") |
| e.Command.Parameters["@id_project"].Value = ddl_project.SelectedValue; |
| if (chk_end.Checked) |
| e.Command.Parameters["@percent_max"].Value = "100"; |
| else |
| e.Command.Parameters["@percent_max"].Value = "101"; |
| } |
| protected void project_SelectedIndexChanged(object sender, EventArgs e) |
| { |
| RadGrid1.Rebind(); |
| } |
| protected void project_DataBound(object sender, EventArgs e) |
| { |
| RadGrid1.Rebind(); |
| } |
| protected void chk_endChanged(object sender, EventArgs e) |
| { |
| RadGrid1.Rebind(); |
| } |
| protected void taskInsertCommand(object source, GridCommandEventArgs e) |
| { |
| UserControl userControl = (UserControl)e.Item.FindControl(GridEditFormItem.EditFormUserControlID); |
| pm_task task = new pm_task(); |
| updateTask(ref task, userControl); |
| db.pm_tasks.InsertOnSubmit(task); |
| db.SubmitChanges(); |
| } |
| private void updateTask(ref pm_task task, UserControl userControl) |
| { |
| task.id_project = System.Convert.ToInt32((userControl.FindControl("ddl_project") as DropDownList).SelectedValue); |
| if (!(userControl.FindControl("chk_noParent") as CheckBox).Checked) |
| { |
| RadComboBox rcb_parent = userControl.FindControl("rcb_parent") as RadComboBox; |
| RadTreeView rtv_parent; |
| foreach (RadComboBoxItem item in rcb_parent.Items) |
| { |
| rtv_parent = item.FindControl("rtv_parent") as RadTreeView; |
| task.id_parent = System.Convert.ToInt32(rtv_parent.SelectedValue); |
| } |
| } |
| else |
| task.id_parent = null; |
| task.task_creator = new Guid("8A936ACE-9A27-4008-84B8-367378518F49");//(Guid)Membership.GetUser().ProviderUserKey; |
| task.task_assigned = new Guid((userControl.FindControl("ddl_assigned") as DropDownList).SelectedValue); |
| task.title = (userControl.FindControl("txt_title") as TextBox).Text; |
| task.start_date = (DateTime)(userControl.FindControl("dtp_start") as RadDateTimePicker).SelectedDate; |
| task.deadline = (DateTime)(userControl.FindControl("dtp_deadline") as RadDateTimePicker).SelectedDate; |
| task.description = (userControl.FindControl("txt_description") as TextBox).Text; |
| task.predecessors = getPredecessors(userControl.FindControl("rcb_predecessors") as RadComboBox); |
| } |
| private string getPredecessors(RadComboBox rcb) |
| { |
| string predecessors = ""; |
| CheckBox cb; |
| foreach (RadComboBoxItem item in rcb.Items) |
| { |
| cb = item.FindControl("check") as CheckBox; |
| if (cb.Checked) |
| predecessors += item.Value + ";"; |
| } |
| return predecessors; |
| } |
| } |
Any help with this?
Best regards,
Thomas