So we have a RadGrid on one of our pages that has some GridBoundColumns and GridTemplateColumns. Over on the left of the screen we have some input that they can fill in and hit submit to do a basic search and bind the info to the grid. The grid renders correctly within the page the first time. However, once the first search is done, the first bound column width is extremely long, which "rams" the rest of the content off to the right and a horizontal scroll bar renders. There is no need for the horizontal scroll bar, the data should fit just fine, and the column should not be so wide!
The OnGridCreated event that is assigned only handles vertical dimensions and is not relevant to the issue.
Using binary version 2012.2.607.0
Page Markup:
The OnGridCreated event that is assigned only handles vertical dimensions and is not relevant to the issue.
Using binary version 2012.2.607.0
Page Markup:
<
asp:Content
ID
=
"Content3"
ContentPlaceHolderID
=
"PageBody"
runat
=
"server"
>
<
telerik:RadAjaxManager
ID
=
"RadAjaxManager1"
runat
=
"server"
EnableHistory
=
"True"
OnAjaxRequest
=
"AccountSearch"
>
<
AjaxSettings
>
<
telerik:AjaxSetting
AjaxControlID
=
"RadAjaxManager1"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"AccountSearchMultiPage"
LoadingPanelID
=
"RadAjaxLoadingPanel1"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"InquiryScriptBlock"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
<
telerik:AjaxSetting
AjaxControlID
=
"InquiryPanelBar"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"AccountSearchMultiPage"
LoadingPanelID
=
"RadAjaxLoadingPanel1"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"InquiryScriptBlock"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
<
telerik:AjaxSetting
AjaxControlID
=
"AccountSearchMultiPage"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"AccountSearchMultiPage"
LoadingPanelID
=
"RadAjaxLoadingPanel1"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"InquiryPanelBar"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"InquiryScriptBlock"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
</
AjaxSettings
>
</
telerik:RadAjaxManager
>
<
telerik:RadAjaxLoadingPanel
ID
=
"RadAjaxLoadingPanel1"
Runat
=
"server"
/>
<
div
class
=
"PageNest"
>
<
telerik:RadSplitter
ID
=
"InquiryPageSplitter"
runat
=
"server"
Orientation
=
"Vertical"
Width
=
"100%"
Height
=
"100%"
OnClientLoaded
=
"ResizeAccountSearchGrid"
OnClientResized
=
"ResizeAccountSearchGrid"
CssClass
=
"MainRadSplitter"
ResizeWithBrowserWindow
=
"true"
>
<
telerik:RadPane
ID
=
"RadPane1"
runat
=
"server"
Width
=
"200"
Height
=
"100%"
Collapsed
=
"false"
>
<
telerik:RadPanelBar
ID
=
"InquiryPanelBar"
runat
=
"server"
CssClass
=
"LeftColumnPanelBar"
OnItemClick
=
"ViewAccountDetails"
OnClientItemClicking
=
"InquiryPanelBarRedirect"
>
<
Items
>
<
telerik:RadPanelItem
Text
=
"Inquiry Options"
PreventCollapse
=
"true"
Expanded
=
"true"
PostBack
=
"false"
Value
=
"InquiryMain"
>
<
Items
>
<
telerik:RadPanelItem
ID
=
"InquiryOptions"
PostBack
=
"false"
Value
=
"InquiryOptions"
>
<
ItemTemplate
>
<
div
style
=
"margin-left: 10px"
>
<
telerik:RadTextBox
ID
=
"AccountNumberTextBox"
runat
=
"server"
EmptyMessage
=
"Account Number"
/>
<
telerik:RadTextBox
ID
=
"NameTextBox"
runat
=
"server"
EmptyMessage
=
"Name"
/>
<
telerik:RadMaskedTextBox
ID
=
"SSNTextBox"
runat
=
"server"
EmptyMessage
=
"SSN"
HideOnBlur
=
"True"
/>
<
telerik:RadMaskedTextBox
ID
=
"PhoneTextBox"
runat
=
"server"
EmptyMessage
=
"Telephone"
HideOnBlur
=
"True"
/>
<
telerik:RadComboBox
ID
=
"CustomComboBox"
runat
=
"server"
EmptyMessage
=
"Custom Search Field"
OnClientSelectedIndexChanged
=
"SetCustomTextBoxFocus"
/>
<
telerik:RadTextBox
ID
=
"CustomTextBox"
runat
=
"server"
EmptyMessage
=
"Choose an option above"
/>
<
telerik:RadButton
ID
=
"SearchButton"
runat
=
"server"
Text
=
"Submit"
OnClick
=
"AccountSearch"
/>
</
div
>
</
ItemTemplate
>
</
telerik:RadPanelItem
>
</
Items
>
</
telerik:RadPanelItem
>
<
telerik:RadPanelItem
Text
=
"Recently Viewed Accounts"
PreventCollapse
=
"true"
Expanded
=
"true"
PostBack
=
"false"
Value
=
"RecentlyViewedMain"
>
<
Items
>
</
Items
>
</
telerik:RadPanelItem
>
<
telerik:RadPanelItem
ID
=
"OnlineActivityReports"
Value
=
"OnlineActivityReports"
Text
=
"Online Activity Reports"
PreventCollapse
=
"true"
Expanded
=
"true"
PostBack
=
"false"
>
<
Items
>
<
telerik:RadPanelItem
Text
=
"Account Payments Reported"
Value
=
"PaymentHistory"
PostBack
=
"false"
/>
<
telerik:RadPanelItem
Text
=
"Account Edit Requests"
Value
=
"EditHistory"
PostBack
=
"false"
/>
<
telerik:RadPanelItem
Text
=
"Account Cancellation Requests"
Value
=
"CancelHistory"
PostBack
=
"false"
/>
<
telerik:RadPanelItem
Text
=
"Populated at Page_Load"
Value
=
"PrecollectActions"
PostBack
=
"false"
/>
</
Items
>
</
telerik:RadPanelItem
>
</
Items
>
</
telerik:RadPanelBar
>
</
telerik:RadPane
>
<
telerik:RadSplitBar
ID
=
"RadSplitBar1"
runat
=
"server"
CollapseMode
=
"Forward"
EnableResize
=
"false"
/>
<
telerik:RadPane
ID
=
"RadPane2"
runat
=
"server"
Height
=
"100%"
Scrolling
=
"None"
>
<
telerik:RadMultiPage
ID
=
"AccountSearchMultiPage"
runat
=
"server"
SelectedIndex
=
"0"
Height
=
"100%"
>
<
telerik:RadPageView
ID
=
"AccountSearchPageView"
runat
=
"server"
Height
=
"100%"
Width
=
"100%"
>
<
div
class
=
"PageViewHeader"
>
<
asp:Label
ID
=
"InquiryLabel"
runat
=
"server"
CssClass
=
"GridLabel"
/>
</
div
>
<
telerik:RadGrid
ID
=
"AccountSearchGrid"
runat
=
"server"
AutoGenerateColumns
=
"false"
ShowFooter
=
"true"
OnItemCommand
=
"AccountSearchGrid_ItemCommand"
ShowHeader
=
"True"
>
<
MasterTableView
DataKeyNames
=
"Id"
ClientDataKeyNames
=
"Id"
TableLayout
=
"Auto"
>
<
ItemStyle
Wrap
=
"false"
/>
<
Columns
>
<
telerik:GridBoundColumn
HeaderText
=
"Agency ID"
DataField
=
"HostID"
UniqueName
=
"HostID"
Aggregate
=
"Count"
FooterStyle-HorizontalAlign
=
"Left"
FooterAggregateFormatString
=
"Showing {0} Matches"
/>
<
telerik:GridBoundColumn
HeaderText
=
"Account ID"
DataField
=
"ClientAccountID"
UniqueName
=
"ClientAccountID"
/>
<
telerik:GridTemplateColumn
HeaderText
=
"Name"
UniqueName
=
"Name"
>
<
ItemTemplate
>
<
asp:LinkButton
runat
=
"server"
CommandName
=
"ShowDetail"
CommandArgument='<%# Eval("ID") %>' Text="<%# DisplayAccountName() %>" />
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridButtonColumn
HeaderText
=
"Packet #"
DataTextField
=
"PacketNumber"
UniqueName
=
"PacketNumber"
ButtonType
=
"LinkButton"
CommandName
=
"ShowPacket"
/>
<
telerik:GridTemplateColumn
HeaderText
=
"Address"
UniqueName
=
"Address"
>
<
ItemTemplate
>
<%# FormatEval("Address1", "{0}<
br
/>") %>
<%# FormatEval("Address2", "{0}<
br
/>") %>
<%# FormatEval("City", "{0}, ")%>
<%# FormatEval("State")%>
<%# FormatEval("Zip") %>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridBoundColumn
HeaderText
=
"Date Assigned"
DataField
=
"DateAssigned"
DataFormatString
=
"{0:d}"
UniqueName
=
"DateAssigned"
FooterStyle-HorizontalAlign
=
"Left"
Aggregate
=
"Max"
DataType
=
"DateTime"
FooterAggregateFormatString
=
"Most Recent: {0:d}"
/>
<
telerik:GridNumericColumn
HeaderText
=
"Principal"
DataField
=
"AmountAssigned"
DataFormatString
=
"{0:C}"
UniqueName
=
"AmountAssigned"
HeaderStyle-HorizontalAlign
=
"Right"
ItemStyle-HorizontalAlign
=
"Right"
Aggregate
=
"Sum"
/>
<
telerik:GridNumericColumn
HeaderText
=
"Balance"
DataField
=
"CurrBalance"
DataFormatString
=
"{0:C}"
UniqueName
=
"CurrBalance"
HeaderStyle-HorizontalAlign
=
"Right"
ItemStyle-HorizontalAlign
=
"Right"
Aggregate
=
"Sum"
/>
</
Columns
>
<
FooterStyle
HorizontalAlign
=
"Right"
/>
</
MasterTableView
>
<
ClientSettings
>
<
Scrolling
AllowScroll
=
"true"
UseStaticHeaders
=
"true"
Scrollheight
=
"100%"
/>
<
ClientEvents
OnGridCreated
=
"ResizeAccountSearchGrid"
/>
</
ClientSettings
>
</
telerik:RadGrid
>
</
telerik:RadPageView
>
<
telerik:RadPageView
ID
=
"AccountDetailPageView"
runat
=
"server"
>
<
caw:AccountDetail
ID
=
"AccountDetailControl"
runat
=
"server"
OnAccountLoaded
=
"UpdateRecentlyViewedList"
/>
</
telerik:RadPageView
>
</
telerik:RadMultiPage
>
</
telerik:RadPane
>
</
telerik:RadSplitter
>
</
div
>
<
telerik:RadScriptBlock
ID
=
"InquiryScriptBlock"
runat
=
"server"
>
<
script
type
=
"text/javascript"
>
function InquiryPanelBarRedirect(sender, args) {
var value = args.get_item().get_value();
if (value == "PaymentHistory") {
<%= Navigator.OnlineActivity(OnlineActivityType.PaymentHistory, Configuration[Vars.PrecollectName]).ToEventScript() %>
}
if (value == "EditHistory") {
<%= Navigator.OnlineActivity(OnlineActivityType.EditHistory, Configuration[Vars.PrecollectName]).ToEventScript() %>
}
if (value == "CancelHistory") {
<%= Navigator.OnlineActivity(OnlineActivityType.CancelHistory, Configuration[Vars.PrecollectName]).ToEventScript() %>
}
if (value == "PrecollectActions") {
<%= Navigator.OnlineActivity(OnlineActivityType.PrecollectActions, Configuration[Vars.PrecollectName]).ToEventScript() %>
}
}
function SetCustomTextBoxFocus(sender, args) {
$('#<%= InquiryOptions.FindControl("CustomTextBox").ClientID %>').focus();
}
function ResizeAccountSearchGrid(sender, args) {
ResizeGrid($find("<%= AccountSearchGrid.ClientID %>"));
}
</
script
>
</
telerik:RadScriptBlock
>
</
asp:Content
>
protected
void
AccountSearch(
object
sender, EventArgs eventArgs)
{
//reset the grid to the default list of columns - removing any extras added by the Custom search box
var defaultColumns =
new
List<
string
> {
"Name"
,
"HostID"
,
"ClientAccountID"
,
"PacketNumber"
,
"Address"
,
"AmountAssigned"
,
"CurrBalance"
,
"DateAssigned"
,
"ViewDetailsLink"
};
defaultColumns.AddRange(Configuration[Vars.InquirySearchSummaryAdditionalFields].ToString().Split(
new
[] {
", "
}, StringSplitOptions.RemoveEmptyEntries));
var columnsToRemove = AccountSearchGrid.Columns.Cast<GridColumn>().Where(column => !defaultColumns.Contains(column.UniqueName)).ToList();
foreach
(var column
in
columnsToRemove)
AccountSearchGrid.Columns.Remove(column);
var searchParameters =
new
Dictionary<IList<AccountField>,
string
>();
var inquiryBar = InquiryPanelBar.FindItemByValue(
"InquiryOptions"
);
//iterate all RadControls within the InquiryOptions panel bar item
foreach
(var control
in
inquiryBar.Controls)
{
//make sure the control is a RadInput
var input = control
as
RadInputControl;
if
(input ==
null
)
continue
;
var id = input.ID;
//if the control uniqueId starts with the word Custom, skip until later
if
(id.StartsWith(
"Custom"
))
continue
;
//verify the input has a value
var value = input.Text.Trim();
if
(String.IsNullOrEmpty(value))
continue
;
//get the search group from the Id of the input. eg. NameTextBox ID value equals InquiryNameSearchFields - a Configuration Variable from database
var searchGroup = String.Format(
"Inquiry{0}SearchFields"
, id.Replace(
"TextBox"
, String.Empty));
//the searchGroup is a comma space separated list of database column names to search with this input
var fieldNames = Configuration[searchGroup].ToString().Split(
new
[] {
", "
}, StringSplitOptions.RemoveEmptyEntries);
//get the AccountField objects from the field names, will automatically be trimmed by the client field permissions
var fields = User.ParentCawClient.AccountFields.Where(field => fieldNames.Contains(field.ColumnName)).ToList();
//if we are searching using a masked input we want to use the literals
var radMaskedTextBox = control
as
RadMaskedTextBox;
if
(radMaskedTextBox !=
null
) value = radMaskedTextBox.TextWithLiterals.Trim();
//add the field list and the value to the search parameters
searchParameters.Add(fields, value);
}
//check the custom search box
var custom = ((RadTextBox)InquiryOptions.FindControl(
"CustomTextBox"
)).Text;
var combo = (RadComboBox)InquiryOptions.FindControl(
"CustomComboBox"
);
//using Text property here since the SelectedText and SelectedValue come back as empty strings for some reason
var selected = combo.Text;
if
(!String.IsNullOrEmpty(custom) && !String.IsNullOrEmpty(selected))
{
var customField = User.ParentCawClient.AccountFields.Single(fld => fld.DisplayName == selected);
searchParameters.Add(
new
List<AccountField> { customField }, custom);
var column =
new
GridBoundColumn();
AccountSearchGrid.Columns.Add(column);
column.HeaderText = customField.DisplayName;
column.DataField = customField.ColumnName;
column.UniqueName = customField.ColumnName;
}
InquiryLabel.Text = @
"Inquiry results"
;
//send the dictionary to the account search for handling, bind the results to the searchgrid
AccountSearchGrid.DataSource = _accountService.AccountInquiry(searchParameters);
AccountSearchGrid.Rebind();
InquiryPanelBar.ClearSelectedItems();
//if only one result was found take the user directly to the detail screen.
if
(AccountSearchGrid.Items.Count == 1)
{
var row = AccountSearchGrid.Items[0];
var id =
int
.Parse(row.GetDataKeyValue(
"Id"
).ToString());
ViewAccountDetails(id, custom);
}
else
AccountSearchMultiPage.SelectedIndex = AccountSearchPageView.Index;
}