I have a radGrid that is grouped by a certain text field. When GroupsDefaultExpanded is true (or not specified) clicking the Edit button open the popup form template correctly. But when I set GroupsDefaultExpanded to false, the Edit button no longer opens the editor popup. Clicking the Edit buttons posts back to the server, the ItemCommand event is executed with CommandName equal to "Edit", but then the group collapses itself, and the editor never appears! Clicking the AddItem link does open the editor successfully. If I change nothing more than the value of GroupsDefaultExpanded this behavior appears and disappears, so it is obviously related.
3 Answers, 1 is accepted
0
Princy
Top achievements
Rank 2
answered on 25 Oct 2012, 06:34 AM
Hi,
Please check the following code snippet I tried to show popup edit on setting GroupsDefaultExpanded to false.
ASPX:
C#:
Thanks,
Princy.
Please check the following code snippet I tried to show popup edit on setting GroupsDefaultExpanded to false.
ASPX:
<
telerik:RadGrid
ID
=
"RadGrid1"
runat
=
"server"
OnNeedDataSource
=
"RadGrid1_NeedDataSource"
AllowSorting
=
"true"
ShowGroupPanel
=
"True"
OnGroupsChanging
=
"RadGrid1_GroupsChanging"
OnItemCommand
=
"RadGrid1_ItemCommand"
AutoGenerateEditColumn
=
"true"
OnPreRender
=
"RadGrid1_PreRender"
>
<
ClientSettings
AllowDragToGroup
=
"True"
>
</
ClientSettings
>
<
MasterTableView
GroupsDefaultExpanded
=
"false"
GroupLoadMode
=
"Client"
EditMode
=
"PopUp"
>
<
GroupByExpressions
>
<
telerik:GridGroupByExpression
>
<
GroupByFields
>
<
telerik:GridGroupByField
FieldName
=
"Group"
/>
</
GroupByFields
>
<
SelectFields
>
<
telerik:GridGroupByField
FieldName
=
"Group"
/>
</
SelectFields
>
</
telerik:GridGroupByExpression
>
</
GroupByExpressions
>
</
MasterTableView
>
</
telerik:RadGrid
>
C#:
public
Hashtable Groups
{
get
{
if
(ViewState[
"Groups"
] ==
null
)
{
Hashtable res =
new
Hashtable();
ViewState[
"Groups"
] = res;
return
res;
}
return
(Hashtable)ViewState[
"Groups"
];
}
set
{
ViewState[
"Groups"
] = value;
}
}
protected
void
Page_Load(
object
sender, EventArgs e)
{
RadGrid1.DataBound +=
new
EventHandler(RadGrid1_DataBound);
}
void
RadGrid1_DataBound(
object
sender, EventArgs e)
{
foreach
(GridGroupHeaderItem item
in
RadGrid1.MasterTableView.GetItems(GridItemType.GroupHeader))
{
if
(Groups.ContainsKey(item.DataCell.Text))
{
item.Expanded = (
bool
)Groups[item.DataCell.Text];
}
}
}
protected
void
RadGrid1_NeedDataSource(
object
source, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
{
DataTable tbl =
new
DataTable();
DataColumn col =
new
DataColumn(
"ID"
);
col.DataType =
typeof
(
int
);
tbl.Columns.Add(col);
col =
new
DataColumn(
"Name"
);
col.DataType =
typeof
(
string
);
tbl.Columns.Add(col);
col =
new
DataColumn(
"Group"
);
col.DataType =
typeof
(
string
);
tbl.Columns.Add(col);
int
size = 15;
int
maxLen = size.ToString().Length;
for
(
int
i = 1; i <= size; i++)
{
tbl.Rows.Add(
new
object
[] { i,
"Name"
+ i.ToString(
"D"
+ maxLen),
"Group"
+ i % 5 });
}
RadGrid1.DataSource = tbl;
}
protected
void
RadGrid1_GroupsChanging(
object
source, GridGroupsChangingEventArgs e)
{
Groups.Clear();
foreach
(GridGroupHeaderItem item
in
RadGrid1.MasterTableView.GetItems(GridItemType.GroupHeader))
{
Groups[item.DataCell.Text] = item.Expanded;
}
}
protected
void
RadGrid1_ItemCommand(
object
source, GridCommandEventArgs e)
{
if
(e.CommandName == RadGrid.ExpandCollapseCommandName)
{
Groups[((GridGroupHeaderItem)e.Item).DataCell.Text] = !e.Item.Expanded;
}
if
(e.CommandName == RadGrid.EditCommandName && RadGrid1.MasterTableView.GroupByExpressions.Count > 0)
group = e.Item.GroupIndex.Substring(0, e.Item.GroupIndex.LastIndexOf(
"_"
));
}
protected
void
Button1_Click(
object
sender, EventArgs e)
{
RadGrid1.Rebind();
}
string
group =
string
.Empty;
protected
void
RadGrid1_PreRender(
object
sender, EventArgs e)
{
if
(!
string
.IsNullOrEmpty(group))
{
GridItem[] items = RadGrid1.MasterTableView.GetItems(GridItemType.GroupHeader);
foreach
(GridGroupHeaderItem item
in
items)
if
(item.GroupIndex == group)
item.Expanded =
true
;
}
}
Thanks,
Princy.
0
Jeanne
Top achievements
Rank 1
answered on 25 Oct 2012, 02:11 PM
Did you try it without all the additional code? Is it broken like I described? You also don't have a form template, which might make a difference. Either way, if it takes all this additional code to make it work, it's broken. Specifying GroupsDefaultExpanded="false" should simply do what it says, without requiring additional code to make editing work.
Regardless, I already found the source code you posted and implemented it (with GroupsDefaultExpanded not specfied, i.e. true) and it almost works fine. There is a bug in the implementation. I would have posted a reply to mention it, but the source code library doesn't allow replies. The problem is that if the group header item contains an aggregate value that can change as you work, such as count or sum, the the text of the group header will change when the records in the group change, and it will no longer match what you stored. To get around the problem you have to parse the constant part out of the group header and use only that. You should add a note to the source code posting to that effect. Also, for some reason I did not need the PreRender event. I left GroupsDefaultExpanded to it's default of true, and initially collapsed all but the first group in the DataBound event like this:
I realize that the GroupIndex would look different if I had multiple-level grouping, but I don't,
Regardless, there is still the original issue that specifying GroupsDefaultExpanded="false" broke editing. One shouldn't have to add all this code just to make it work like it should.
Regardless, I already found the source code you posted and implemented it (with GroupsDefaultExpanded not specfied, i.e. true) and it almost works fine. There is a bug in the implementation. I would have posted a reply to mention it, but the source code library doesn't allow replies. The problem is that if the group header item contains an aggregate value that can change as you work, such as count or sum, the the text of the group header will change when the records in the group change, and it will no longer match what you stored. To get around the problem you have to parse the constant part out of the group header and use only that. You should add a note to the source code posting to that effect. Also, for some reason I did not need the PreRender event. I left GroupsDefaultExpanded to it's default of true, and initially collapsed all but the first group in the DataBound event like this:
Protected
Sub
rgNews_DataBound(sender
As
Object
, e
As
System.EventArgs)
Handles
rgNews.DataBound
For
Each
oItem
As
GridGroupHeaderItem
In
rgNews.MasterTableView.GetItems(GridItemType.GroupHeader)
Dim
sGroupKey
As
String
= ParseGroupKey(oItem.DataCell.Text)
If
Not
Page.IsPostBack
Then
Groups.Add(sGroupKey, oItem.GroupIndex =
"0"
)
End
If
If
Groups.ContainsKey(sGroupKey)
Then
oItem.Expanded =
CBool
(Groups(sGroupKey))
End
If
Next
End
Sub
I realize that the GroupIndex would look different if I had multiple-level grouping, but I don't,
Regardless, there is still the original issue that specifying GroupsDefaultExpanded="false" broke editing. One shouldn't have to add all this code just to make it work like it should.
0
Hi Jeanne,
This behavior is due to the fact that the grid makes a PostBack to the server when opening its Edit form and since the GroupsDefaultExpanded property is set to false, all of the groups are being collapsed.
I will forward this issue to our developers who will analyze the code library and the described problem. I will reply to you when they are ready with the result.
Thank you for your valuable feedback.
All the best,
Eyup
the Telerik team
This behavior is due to the fact that the grid makes a PostBack to the server when opening its Edit form and since the GroupsDefaultExpanded property is set to false, all of the groups are being collapsed.
I will forward this issue to our developers who will analyze the code library and the described problem. I will reply to you when they are ready with the result.
Thank you for your valuable feedback.
All the best,
Eyup
the Telerik team
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now.