I have an autogenerated radgrid and detail table. I am resizeToFit() the columns in both the mastertableview, and the detailtable. (see javascript block). I am colorizing cell backcolors based upon the cell value.
When a user clicks a row, or clicks the expand/collapse image, the PartnerID is then stored in the Session Data, to retrieve the respective data from the db. The PartnerID's in the parent table, match those in the DetailTable.
Everything works as expected, however I am only able to expand one row when the page has finished loading. It does not matter which row it is. I can expand that row once, and then collapse that row once. After that I am unable to expand any other row in the parent table. Clicking on the other expand icons triggers a postback, but nothing is changed. I have tried expanding a row, and then attempting to expand a second row, but that does not work either.
I have verified that the datasource is retrieving new data based on the session variable. I have tried using the selected value for RadGrid1 on my datasource, and that works fine. But the behavior is the same.
The data to populate the parent table, looks like this. It comes from SqlDataSourcePartnerOverview
|PartnerID|PartnerName|num_patients|avg_answer|Q1|Q2|Q3|
|int|string|int|double|double|double|double|
The data to populate the detail table, looks like this. It comes from SqlDataSourcePartnerQuestionDetails
|PartnerID|QuestionNumber|Question|num_patients|num_responses|avg_answer|
|int|int|string|int|int|double|
I have a second radgrid that is populated based on the Session["PartnerID"], but that works fine, so I haven't included it's source.
<
telerik:RadAjaxManager
ID
=
"RadAjaxManager1"
runat
=
"server"
>
<
AjaxSettings
>
<
telerik:AjaxSetting
AjaxControlID
=
"RadGrid1"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"RadGrid1"
></
telerik:AjaxUpdatedControl
>
<
telerik:AjaxUpdatedControl
ControlID
=
"RadGrid2"
LoadingPanelID
=
"RadAjaxLoadingPanel1"
></
telerik:AjaxUpdatedControl
>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
<
telerik:AjaxSetting
AjaxControlID
=
"RadGrid2"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"RadGrid2"
></
telerik:AjaxUpdatedControl
>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
</
AjaxSettings
>
</
telerik:RadAjaxManager
>
<
telerik:RadAjaxLoadingPanel
ID
=
"RadAjaxLoadingPanel1"
runat
=
"server"
Skin
=
"Metro"
Transparency
=
"75"
/>
<
telerik:RadCodeBlock
ID
=
"RadCodeBlock1"
runat
=
"server"
>
<
script
type
=
"text/javascript"
>
function gridCreated(sender, args) {
var columns = sender.get_masterTableView().get_columns();
for (var i = 0; i <
columns.length
; i++) {
columns[i].resizeToFit(false, true);
}
}
function detailCreated(sender, eventArgs) {
var
detailTables
=
sender
.get_detailTables();
//iterates over all detail tables in gridview
for (var
i
=
0
; i < detailTables.length; i++) {
var
detailColumns
=
detailTables
[i].get_columns();
//iterates over each column in detail table
for (var
j
=
0
; j < detailColumns.length; j++) {
detailColumns[j].resizeToFit(false, true);
}
}
}
</script>
</
telerik:RadCodeBlock
>
<
br
/>
<
br
/>
<
h3
>Partner Overview:</
h3
>
<
div
id
=
"partnerGridDiv"
>
<
telerik:RadGrid
runat
=
"server"
ID
=
"RadGrid1"
Skin
=
"Metro"
BorderStyle
=
"Solid"
AllowSorting
=
"True"
DataSourceID
=
"SqlDataSourcePartnerOverview"
OnItemCommand
=
"RadGrid_ItemCommand"
AutoGenerateColumns
=
"true"
OnColumnCreated
=
"RadGrid_ColumnCreated"
OnItemDataBound
=
"RadGrid_ItemDataBound"
EnableHeaderContextMenu
=
"true"
ShowFooter
=
"true"
ViewStateMode
=
"Enabled"
MasterTableView-HierarchyLoadMode
=
"ServerOnDemand"
>
<
ClientSettings
AllowKeyboardNavigation
=
"true"
EnablePostBackOnRowClick
=
"true"
>
<
Selecting
AllowRowSelect
=
"true"
></
Selecting
>
<
Resizing
ResizeGridOnColumnResize
=
"true"
AllowColumnResize
=
"true"
AllowResizeToFit
=
"True"
/>
<
Scrolling
AllowScroll
=
"false"
UseStaticHeaders
=
"false"
/>
<
ClientEvents
OnGridCreated
=
"gridCreated"
OnTableCreated
=
"detailCreated"
/>
</
ClientSettings
>
<
HeaderStyle
BackColor
=
"#42608D"
ForeColor
=
"White"
HorizontalAlign
=
"Left"
/>
<
ItemStyle
HorizontalAlign
=
"Left"
/>
<
MasterTableView
TableLayout
=
"fixed"
NoMasterRecordsText
=
"No records found"
DataKeyNames
=
"PartnerID"
DataSourceID
=
"SqlDataSourcePartnerOverview"
>
<
DetailTables
>
<
telerik:GridTableView
Width
=
"75%"
AutoGenerateColumns
=
"true"
Name
=
"PartnerDetailTable"
runat
=
"server"
DataSourceID
=
"SqlDataSourcePartnerQuestionDetails"
DataKeyNames
=
"PartnerID"
ShowFooter
=
"true"
>
<
ParentTableRelation
>
<
telerik:GridRelationFields
DetailKeyField
=
"PartnerID"
MasterKeyField
=
"PartnerID"
/>
</
ParentTableRelation
>
<
Columns
>
<%--<
telerik:GridBoundColumn
DataField
=
"QuestionNumber"
DataType
=
"System.Int32"
HeaderText
=
"Question Number"
SortExpression
=
"QuestionNumber"
UniqueName
=
"QuestionNumber"
HeaderStyle-Width
=
"10%"
/>
<
telerik:GridBoundColumn
DataField
=
"Question"
Aggregate
=
"Count"
HeaderText
=
"Question"
FooterStyle-HorizontalAlign
=
"Left"
SortExpression
=
"PartnerName"
UniqueName
=
"PartnerName"
/>
<
telerik:GridBoundColumn
DataField
=
"num_patients"
DataFormatString
=
"{0:n0}"
Aggregate
=
"Sum"
FooterAggregateFormatString
=
"Total: {0:n0}"
FooterStyle-HorizontalAlign
=
"Left"
HeaderStyle-Width
=
"10%"
DataType
=
"System.Int32"
HeaderText
=
"# of Patients"
ReadOnly
=
"True"
SortExpression
=
"num_patients"
UniqueName
=
"num_patients"
/>
<
telerik:GridBoundColumn
DataField
=
"num_responses"
DataFormatString
=
"{0:n0}"
Aggregate
=
"Sum"
FooterAggregateFormatString
=
"Total: {0:n0}"
FooterStyle-HorizontalAlign
=
"Left"
HeaderStyle-Width
=
"10%"
DataType
=
"System.Int32"
HeaderText
=
"# of Responses"
ReadOnly
=
"True"
SortExpression
=
"num_responses"
UniqueName
=
"num_responses"
/>
<
telerik:GridBoundColumn
DataField
=
"avg_answer"
DataFormatString
=
"{0:P0}"
DataType
=
"System.Double"
FilterControlAltText
=
"Filter avg_answer column"
HeaderText
=
"Average Response"
ReadOnly
=
"True"
SortExpression
=
"avg_answer"
UniqueName
=
"avg_answer"
/>--%>
</
Columns
>
</
telerik:GridTableView
>
</
DetailTables
>
</
MasterTableView
>
</
telerik:RadGrid
>
</
div
>
<
asp:SqlDataSource
ID
=
"SqlDataSourcePartnerOverview"
runat
=
"server"
ConnectionString="<%$ ConnectionStrings:mdpSupportServices %>" SelectCommand="rpt_SurveyData_Partner_Overview" SelectCommandType="StoredProcedure">
<
SelectParameters
>
<
asp:ControlParameter
ControlID
=
"RadDatePickerStartDate"
PropertyName
=
"SelectedDate"
Name
=
"startDate"
Type
=
"DateTime"
></
asp:ControlParameter
>
<
asp:ControlParameter
ControlID
=
"RadDatePickerEndDate"
PropertyName
=
"SelectedDate"
Name
=
"endDate"
Type
=
"DateTime"
></
asp:ControlParameter
>
</
SelectParameters
>
</
asp:SqlDataSource
>
<
asp:SqlDataSource
ID
=
"SqlDataSourcePartnerQuestionDetails"
runat
=
"server"
ConnectionString="<%$ ConnectionStrings:mdpSupportServices %>" SelectCommand="rpt_SurveyData_Partner_Question_Details" SelectCommandType="StoredProcedure">
<
SelectParameters
>
<
asp:SessionParameter
Name
=
"PartnerID"
SessionField
=
"PartnerID"
Type
=
"Int64"
/>
<
asp:ControlParameter
ControlID
=
"RadDatePickerStartDate"
Name
=
"StartDate"
PropertyName
=
"SelectedDate"
Type
=
"DateTime"
/>
<
asp:ControlParameter
ControlID
=
"RadDatePickerEndDate"
Name
=
"EndDate"
PropertyName
=
"SelectedDate"
Type
=
"DateTime"
/>
</
SelectParameters
>
</
asp:SqlDataSource
>
here is my code behind
protected
void
Page_Load(
object
sender, EventArgs e)
{
mdpBaseComponent.PageTitle =
"Solution Reach Survey Report"
;
mdpBaseComponent.PageSubTitle =
"mdpSupportServices/SolutionReach_SurveyReport"
;
if
(!IsPostBack)
{
this
.RadDatePickerStartDate.SelectedDate = DateTime.Now.AddMonths(-1);
this
.RadDatePickerEndDate.SelectedDate = DateTime.Now;
Session.Clear();
}
else
{
//postback!!!
}
}
protected
void
RadGrid_ItemCommand(
object
sender, GridCommandEventArgs e)
{
if
(e.Item
is
GridDataItem)
{
GridDataItem item = (GridDataItem)e.Item;
if
(item.OwnerGridID ==
"RadGrid1"
)
{
Session[
"PartnerID"
] = item[
"PartnerID"
].Text;
}
if
(e.CommandName ==
"RowClick"
)
{
//do nothing
}
else
if
(e.CommandName == Telerik.Web.UI.RadGrid.ExpandCollapseCommandName)
{
item.Selected =
true
;
}
}
}
protected
void
RadGrid_ColumnCreated(
object
sender, GridColumnCreatedEventArgs e)
{
if
(e.Column
is
GridBoundColumn)
{
GridBoundColumn gbc = ((GridBoundColumn)e.Column);
int
n;
if
(gbc.HeaderText ==
"Partner ID"
)
{
gbc.Display =
false
;
}
else
if
(gbc.HeaderText ==
"Venue ID"
)
{
gbc.Display =
false
;
}
else
if
(gbc.HeaderText ==
"Partner Name"
)
{
gbc.HeaderText =
"Partner"
;
}
else
if
(gbc.HeaderText ==
"Venue Name"
)
{
gbc.HeaderText =
"Venue"
;
}
else
if
(gbc.HeaderText ==
"num_patients"
)
{
gbc.HeaderText =
"Patients"
;
gbc.DataFormatString =
"{0:n0}"
;
gbc.FooterStyle.HorizontalAlign = System.Web.UI.WebControls.HorizontalAlign.Left;
gbc.FooterAggregateFormatString =
"{0:n0}"
;
gbc.FooterStyle.Wrap =
false
;
gbc.Aggregate = Telerik.Web.UI.GridAggregateFunction.Sum;
}
else
if
(gbc.HeaderText ==
"num_responses"
)
{
gbc.HeaderText =
"Responses"
;
gbc.DataFormatString =
"{0:n0}"
;
gbc.FooterStyle.HorizontalAlign = System.Web.UI.WebControls.HorizontalAlign.Left;
gbc.FooterAggregateFormatString =
"{0:n0}"
;
gbc.FooterStyle.Wrap =
false
;
gbc.Aggregate = Telerik.Web.UI.GridAggregateFunction.Sum;
}
else
if
(gbc.HeaderText ==
"avg_answer"
)
{
gbc.HeaderText =
"Avg"
;
gbc.FooterStyle.HorizontalAlign = System.Web.UI.WebControls.HorizontalAlign.Left;
gbc.DataType =
typeof
(
double
);
gbc.DataFormatString =
"{0:P1}"
;
gbc.FooterAggregateFormatString =
"{0:P1}"
;
gbc.FooterStyle.Wrap =
false
;
gbc.Aggregate = Telerik.Web.UI.GridAggregateFunction.Avg;
}
else
if
(gbc.HeaderText[0] ==
'Q'
&&
int
.TryParse(gbc.HeaderText.Substring(1,gbc.HeaderText.Length-1),
out
n))
{
//if first letter is Q, and rest of string is integer
// Q1,Q2,Q3 etc...
gbc.FooterStyle.HorizontalAlign = System.Web.UI.WebControls.HorizontalAlign.Left;
gbc.DataType =
typeof
(
double
);
gbc.DataFormatString =
"{0:P1}"
;
gbc.FooterAggregateFormatString =
"{0:P1}"
;
gbc.FooterStyle.Wrap =
false
;
gbc.Aggregate = Telerik.Web.UI.GridAggregateFunction.Avg;
}
}
}
public
Color cellColor(
double
val, Color currentColor)
{
Color red = ColorTranslator.FromHtml(
"#F26C72"
);
Color green = ColorTranslator.FromHtml(
"#64C23E"
);
Color yellow = ColorTranslator.FromHtml(
"#DFCA3F"
);
Color lightGreen = ColorTranslator.FromHtml(
"#BEFFBE"
);
if
(val >= .85)
return
currentColor;
else
if
(val >= .70)
return
yellow;
else
return
red;
}
protected
void
RadGrid_ItemDataBound(
object
sender, GridItemEventArgs e)
{
if
(e.Item
is
GridDataItem)
{
GridDataItem item = (GridDataItem)e.Item;
foreach
(GridColumn col
in
item.OwnerTableView.AutoGeneratedColumns)
{
if
(col.DataType ==
typeof
(
double
))
{
double
value;
if
(
double
.TryParse(DataBinder.Eval(item.DataItem, col.UniqueName).ToString(),
out
value))
{
item[col.UniqueName].BackColor = cellColor(value, item[col.UniqueName].BackColor);
}
}
}
}
}