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 Select
End Sub
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