What I'm trying to accomplish is quite simple but I still didn't grasp all the ways of iterating the grid items in all the events.
I have a grid with a custom FormView inside <NestedViewTemplate> (well the FormView really is inside a user control in <NestedViewTemplate>).
What I would like to happen in the gui is this: when you click on the edit button (wich triggers a custom edit logic) I would like to check all OTHER rows to see if:
1) they are expanded (and in this case collapse them so that only the active edited row is expanded)
2) set the FormView.FormViewMode of each row OTHER than the edited one to ReadOnly so that if the user opens the row again in a later moment he finds it in view mode and no more in edit mode.
3) set the <asp:Panel runat="server" ID="RadGrid1DetailContainer" CssClass="RadGridDetailContainer" Visible="true">, wich is the first item in the <NestedViewTemplate> to visible = false for all the row OTHER than the edited one
The expand part is easy, and the custom logic wich expands the edited row and sets the FormView in edit mode is easy but I cannot find a way to address points 2 and 3.
Here is my logic so far that triggers in RadGrid1_ItemCommand when user clicks on the edit button and throws the EditFormView command.
ASPX part:
The code behind for the EditFormView command is:
The item.Expanded = False part works like expected. The issue I'm facing is how to retrieve a reference to the FormView(s) and to the RadGrid1DetailContainer for each other row
I tried with
DirectCast(item.DataItem, GridDataItem).ChildItem.FindControl("RadGrid1DetailContainer").Visible = False
But I guess item.DataItem is not what I'm looking for since I always have a System.NullReferenceException on that line...
Any hint on how to iterate and access the FormView in all the rows other than the one where the click command triggered, would be greatly appreciated.
Thanks in advance
I have a grid with a custom FormView inside <NestedViewTemplate> (well the FormView really is inside a user control in <NestedViewTemplate>).
What I would like to happen in the gui is this: when you click on the edit button (wich triggers a custom edit logic) I would like to check all OTHER rows to see if:
1) they are expanded (and in this case collapse them so that only the active edited row is expanded)
2) set the FormView.FormViewMode of each row OTHER than the edited one to ReadOnly so that if the user opens the row again in a later moment he finds it in view mode and no more in edit mode.
3) set the <asp:Panel runat="server" ID="RadGrid1DetailContainer" CssClass="RadGridDetailContainer" Visible="true">, wich is the first item in the <NestedViewTemplate> to visible = false for all the row OTHER than the edited one
The expand part is easy, and the custom logic wich expands the edited row and sets the FormView in edit mode is easy but I cannot find a way to address points 2 and 3.
Here is my logic so far that triggers in RadGrid1_ItemCommand when user clicks on the edit button and throws the EditFormView command.
ASPX part:
<NestedViewTemplate> <asp:Panel runat="server" ID="RadGrid1DetailContainer" CssClass="RadGridDetailContainer" Visible="true"> <telerik:RadTabStrip runat="server" ID="RadGrid1DetailTabStrip" MultiPageID="RadGrid1DetailMultipage1" SelectedIndex="0" CssClass="RadGridTabStrip"> <Tabs> <telerik:RadTab runat="server" Text="Dati utente" PageViewID="RadGrid1DetailRadPageView1"> </telerik:RadTab> <telerik:RadTab runat="server" Text="Anagrafica" PageViewID="RadGrid1DetailRadPageView2"> </telerik:RadTab> <telerik:RadTab runat="server" Text="Altri dati" PageViewID="RadGrid1DetailRadPageView3"> </telerik:RadTab> </Tabs> </telerik:RadTabStrip> <telerik:RadMultiPage runat="server" ID="RadGrid1DetailMultipage1" SelectedIndex="0" RenderSelectedPageOnly="false"> <telerik:RadPageView runat="server" ID="RadGrid1DetailRadPageView1" CssClass="RadGridPageView"> <asp:FormView id="RadGrid1DetailForm1" CssClass="RadGridDetailForm" runat="server"> <ItemTemplate> <div class="form-horizontal form-stripe" style="padding: 12px;"> <eva:FormUserDetail ID="FormUserDetail1" Item="<%# Container.DataItem %>" View="Detail1" runat="server" /> <div class="form-actions"> <asp:LinkButton ID="FormConfirmUpdate" runat="server" CssClass="btn btn-primary" CommandName="EditFormView"> <i class="icon icon-pencil"></i> Edit </asp:LinkButton> </div> </div> </ItemTemplate> <EditItemTemplate> <div class="form-horizontal form-stripe" style="padding: 12px;"> <eva:FormUserEdit ID="FormUserDetail2" Item="<%# Container.DataItem %>" View="Detail1" runat="server" /> <div class="form-actions"> <asp:Button runat="server" ID="FormConfirmUpdate" CssClass="btn btn-success" Text="Submit" CommandName="FormConfirmUpdate" /> <asp:Button runat="server" ID="FormCancelUpdate" CssClass="btn" Text="Cancel" CommandName="FormCancelUpdate" /> </div> </div> </EditItemTemplate> </asp:FormView> </telerik:RadPageView> <telerik:RadPageView runat="server" ID="RadGrid1DetailRadPageView2"> </telerik:RadPageView> <telerik:RadPageView runat="server" ID="RadGrid1DetailRadPageView3"> </telerik:RadPageView> </telerik:RadMultiPage> </asp:Panel></NestedViewTemplate>The code behind for the EditFormView command is:
Protected Sub RadGrid1_ItemCommand(ByVal source As Object, ByVal e As GridCommandEventArgs) Handles RadGrid1.ItemCommand Dim gridFormView As FormView Dim primaryKey As Integer If TypeOf (e.Item) Is GridDataItem Then gridFormView = DirectCast(e.Item, GridDataItem).ChildItem.FindControl("RadGrid1DetailContainer").FindControl("RadGrid1DetailMultipage1").FindControl("RadGrid1DetailRadPageView1").FindControl("RadGrid1DetailForm1") primaryKey = Convert.ToInt32(DirectCast(e.Item, GridDataItem).GetDataKeyValue("UserId")) End If Select Case e.CommandName Case "EditFormView" e.Item.Expanded = True If TypeOf (e.Item) Is GridDataItem Then DirectCast(e.Item, GridDataItem).ChildItem.FindControl("RadGrid1DetailContainer").Visible = True ' Collapse all other opened details For Each item As GridItem In e.Item.OwnerTableView.Items If item.Expanded AndAlso Not item Is e.Item Then item.Expanded = False DirectCast(item.DataItem, GridDataItem).ChildItem.FindControl("RadGrid1DetailContainer").Visible = False Dim gridFormViewToBeClosed As FormView = DirectCast(item.DataItem, GridDataItem).ChildItem.FindControl("RadGrid1DetailContainer").FindControl("RadGrid1DetailMultipage1").FindControl("RadGrid1DetailRadPageView1").FindControl("RadGrid1DetailForm1") ' Put form always in ReadOnly when is expanded If gridFormViewToBeClosed.CurrentMode <> FormViewMode.ReadOnly Then gridFormViewToBeClosed.ChangeMode(FormViewMode.ReadOnly) End If End If Next item End If ' Put form in EditMode when is expanded If gridFormView.CurrentMode <> FormViewMode.Edit Then gridFormView.ChangeMode(FormViewMode.Edit) End If ' Fill the form view from the db SelectUserEdit(primaryKey, gridFormView) End SelectEnd SubThe item.Expanded = False part works like expected. The issue I'm facing is how to retrieve a reference to the FormView(s) and to the RadGrid1DetailContainer for each other row
I tried with
DirectCast(item.DataItem, GridDataItem).ChildItem.FindControl("RadGrid1DetailContainer").Visible = False
But I guess item.DataItem is not what I'm looking for since I always have a System.NullReferenceException on that line...
Any hint on how to iterate and access the FormView in all the rows other than the one where the click command triggered, would be greatly appreciated.
Thanks in advance