or
Forget it. The template I was working from was done by another programmer who I don't have contact with ... or trust.
<
telerik:RadGrid
ID
=
"RadGrid1"
runat
=
"server"
Skin
=
"Web20"
OnItemCreated
=
"RadGrid1_ItemCreated"
OnItemDataBound
=
"RadGrid1_ItemDataBound"
OnColumnCreated
=
"RadGrid1_ColumnCreated"
AutoGenerateColumns
=
"False"
ShowStatusBar
=
"True"
CellSpacing
=
"0"
GridLines
=
"None"
AllowAutomaticInserts
=
"True"
>
<
HeaderContextMenu
CssClass
=
"GridContextMenu GridContextMenu_Default"
></
HeaderContextMenu
>
<
MasterTableView
DataKeyNames
=
"CATEGORY_CDE, PARENT_CDE"
ShowHeader
=
"true"
HierarchyDefaultExpanded
=
"false"
AllowSorting
=
"true"
CommandItemDisplay
=
"Bottom"
editmode
=
"InPlace"
InsertItemDisplay
=
"Bottom"
>
<
SelfHierarchySettings
KeyName
=
"CATEGORY_CDE"
ParentKeyName
=
"PARENT_CDE"
/>
<
CommandItemSettings
ExportToPdfText
=
"Export to PDF"
AddNewRecordText
=
"Add New Category"
></
CommandItemSettings
>
<
Columns
>
<
telerik:GridExpandColumn
FilterControlAltText
=
"Filter ExpandColumn column"
Visible
=
"True"
>
</
telerik:GridExpandColumn
>
<
telerik:GridEditCommandColumn
UniqueName
=
"UpdateColumn"
FilterControlAltText
=
"Filter EditCommandColumn column"
Visible
=
"True"
EditText
=
""
InsertText
=
""
CancelText
=
""
ButtonType
=
"ImageButton"
EditImageUrl
=
"../images/blank.gif"
>
</
telerik:GridEditCommandColumn
>
<
telerik:GridBoundColumn
DataField
=
"Category_Cde"
UniqueName
=
"Category_Cde"
Visible
=
"true"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"Parent_cde"
UniqueName
=
"Parent_cde"
Visible
=
"true"
>
</
telerik:GridBoundColumn
>
</
Columns
>
<
CommandItemSettings
ExportToPdfText
=
"Export to PDF"
></
CommandItemSettings
>
<
RowIndicatorColumn
FilterControlAltText
=
"Filter RowIndicator column"
>
<
HeaderStyle
Width
=
"20px"
></
HeaderStyle
>
</
RowIndicatorColumn
>
<
ExpandCollapseColumn
FilterControlAltText
=
"Filter ExpandColumn column"
Visible
=
"True"
>
<
HeaderStyle
Width
=
"20px"
></
HeaderStyle
>
</
ExpandCollapseColumn
>
<
EditFormSettings
>
<
EditColumn
FilterControlAltText
=
"Filter EditCommandColumn column"
></
EditColumn
>
</
EditFormSettings
>
</
MasterTableView
>
<
ClientSettings
AllowExpandCollapse
=
"true"
/>
<
FilterMenu
EnableImageSprites
=
"False"
></
FilterMenu
>
</
telerik:RadGrid
>
Protected
Sub
RadGrid1_ItemCommand(
ByVal
sender
As
Object
,
ByVal
e
As
Telerik.Web.UI.GridCommandEventArgs)
Handles
RadGrid1.ItemCommand
Dim
itemKey
As
String
'Inactivates non selected hierarchy levels
If
(e.CommandName = RadGrid.ExpandCollapseCommandName)
Then
Dim
currentItem
As
GridDataItem =
DirectCast
(e.Item, GridDataItem)
Dim
currentRowIndex
As
Integer
= currentItem.ItemIndex
Dim
currentCatKey
As
String
= currentItem.GetDataKeyValue(
"CATEGORY_CDE"
).ToString()
Dim
currentParentKey
As
String
= currentItem.GetDataKeyValue(
"PARENT_CDE"
).ToString()
If
(
Not
currentItem.Expanded)
Then
'If an item is expanded then hide the other rows at that level
For
Each
ditem
As
GridDataItem
In
RadGrid1.Items
itemKey = ditem.GetDataKeyValue(
"PARENT_CDE"
).ToString()
If
currentRowIndex <> ditem.ItemIndex
And
currentParentKey = ditem.GetDataKeyValue(
"PARENT_CDE"
).ToString()
Then
'Trying to find the right way to suppress the option to add categories for unopened levels
'RadGrid1.MasterTableView.CommandItemSettings.ShowAddNewRecordButton = False
'RadGrid1.MasterTableView.CommandItemSettings.ShowRefreshButton = False
' RadGrid1.MasterTableView.CommandItemDisplay = GridCommandItemDisplay.None
'RadGrid1.AllowAutomaticInserts = False
'Enables the fields for the row
EnableDisableItem(ditem,
True
)
ditem.Visible = False
Else
'Disables the fields for the row
EnableDisableItem(ditem,
False
)
End
If
Next
Else
For
Each
ditem
As
GridDataItem
In
RadGrid1.Items
itemKey = ditem.GetDataKeyValue(
"PARENT_CDE"
).ToString()
If
currentParentKey = ditem.GetDataKeyValue(
"PARENT_CDE"
).ToString()
Then
ditem.Visible =
True
'Enables fields for row
EnableDisableItem(ditem,
True
)
End
If
Next
End
If
End
If
If
(e.CommandName =
"PerformInsert"
)
Then
e.Canceled =
True
Dim
dgi
As
GridDataInsertItem = TryCast(e.Item, GridDataInsertItem)
updateCategory(
"AddCat"
, dgi)
RadGrid1.EditIndexes.Clear()
RadGrid1.Rebind()
End
If
rbtnSave.Visible =
True
End
Sub
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html
xmlns
=
"http://www.w3.org/1999/xhtml"
>
<
head
runat
=
"server"
>
<
title
>When AutoPostBackOnFilter is on Loading Panel is not modal</
title
>
</
head
>
<
body
>
<
form
id
=
"form1"
runat
=
"server"
>
<
telerik:RadScriptManager
ID
=
"scriptManager"
runat
=
"server"
>
</
telerik:RadScriptManager
>
<
telerik:RadAjaxManager
ID
=
"ajaxManager"
runat
=
"server"
DefaultLoadingPanelID
=
"loading"
>
<
AjaxSettings
>
<
telerik:AjaxSetting
AjaxControlID
=
"grid"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"grid"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
</
AjaxSettings
>
</
telerik:RadAjaxManager
>
<
telerik:RadAjaxLoadingPanel
ID
=
"loading"
runat
=
"server"
Skin
=
"Windows7"
Transparency
=
"1"
>
</
telerik:RadAjaxLoadingPanel
>
<
p
>
The setting of ShowFilterIcon along with AutoPostBackOnFilter for grid columns causes inconsistent
behavior of the loading panel modality.
<
ul
>
<
li
>
Case 1 - Incorrect modal behavior when ShowFilterIcon="false" and AutoPostBackOnFilter="true"
</
li
>
<
li
>
Case 2 - Correct modal behavior when ShowFilterIcon="true" and AutoPostBackOnFilter="true"
</
li
>
</
ul
>
</
p
>
<
p
>
To have time to observe the behavior, long filter times are simulated by Thread.Sleep() - about 5 seconds - in
code behind.
<
br
/>
<
h4
>Steps to reproduce the incorrect behavior:</
h4
>
<
ol
>
<
li
>
Enter filter text in the 'Case 1' column.
</
li
>
<
li
>
Press enter.
</
li
>
<
li
>
Using mouse, click anywhere on the grid. Note that the filter textbox will also recieve focus if clicked.
</
li
>
<
li
>
Observe the loading panel disappears, and after 5 or so seconds, the filter operation finishes successfully.
</
li
>
</
ol
>
<
h4
>Steps to observe the correct behavior:</
h4
>
<
ol
>
<
li
>
Enter filter text in the 'Case 2' column
</
li
>
<
li
>
Click the filter button.
</
li
>
<
li
>
Using mouse, click anywhere on the grid or the filter textbox.
</
li
>
<
li
>
Observe the loading panel is modal and does not disappear until completion of the filter process.
</
li
>
</
ol
>
</
p
>
<
br
/>
<
telerik:RadGrid
ID
=
"grid"
runat
=
"server"
AllowFilteringByColumn
=
"True"
AutoGenerateColumns
=
"False"
AllowPaging
=
"True"
Skin
=
"Windows7"
OnNeedDataSource
=
"grid_NeedDataSource"
>
<
MasterTableView
>
<
Columns
>
<
telerik:GridBoundColumn
DataField
=
"Id"
UniqueName
=
"Id"
AllowFiltering
=
"false"
HeaderText
=
"Id"
/>
<
telerik:GridBoundColumn
DataField
=
"Name"
UniqueName
=
"Name"
ShowFilterIcon
=
"false"
AutoPostBackOnFilter
=
"true"
CurrentFilterFunction
=
"Contains"
HeaderText
=
"Case 1 - Incorrect - Loading panel will not be modal when filtering on this column by pressing the enter key"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"Title"
UniqueName
=
"Title"
ShowFilterIcon
=
"true"
AutoPostBackOnFilter
=
"true"
CurrentFilterFunction
=
"Contains"
HeaderText
=
"Case 2 - Correct - Loading panel will still be modal when filtering on this column by clicking the filter button"
>
</
telerik:GridBoundColumn
>
</
Columns
>
</
MasterTableView
>
</
telerik:RadGrid
>
</
form
>
</
body
>
</
html
>
using
System;
using
System.Linq;
using
System.Collections.Generic;
using
System.Threading;
using
Telerik.Web.UI;
public
partial
class
_Default : System.Web.UI.Page
{
protected
void
Page_Load(
object
sender, EventArgs e)
{
Thread.Sleep(3000);
if
(!
this
.IsPostBack)
{
this
.BuildData();
}
}
protected
void
grid_NeedDataSource(
object
sender, GridNeedDataSourceEventArgs e)
{
this
.grid.DataSource =
this
.Data;
}
private
List<SampleDataItem> Data
{
get
{
return
(List<SampleDataItem>)
this
.ViewState[
"Data"
];
}
set
{
this
.ViewState[
"Data"
] = value;
}
}
private
void
BuildData()
{
var query =
from i
in
Enumerable.Range(1, 10000)
select
new
SampleDataItem()
{
Id = i,
Name = Guid.NewGuid().ToString(),
Title = Guid.NewGuid().ToString()
};
this
.Data = query.ToList();
}
}
using
System;
[Serializable]
public
class
SampleDataItem
{
public
SampleDataItem()
{
}
public
long
Id
{
get
;
set
;
}
public
string
Name
{
get
;
set
;
}
public
string
Title
{
get
;
set
;
}
}