I have a grid that was working fine, but I wanted to add a detail table to it. When I did, it stopped working. It's saying that it can't find a column that I am 100% sure exists. I'm using an ObjectDataSource that returns an IList to bind the detail table with. Is there something I'm missing?
I keep getting Cannot Find Column [MOID]. The stack trace looks like this:
Thanks,
Aaron
<%@ Page Title="" Language="C#" MasterPageFile="~/AppMasterPage.master" AutoEventWireup="true" CodeFile="Research.aspx.cs" Inherits="MoneyOrder_Research" %>
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
<
asp:Content
ID
=
"Content1"
ContentPlaceHolderID
=
"head"
Runat
=
"Server"
>
</
asp:Content
>
<
asp:Content
ID
=
"Content2"
ContentPlaceHolderID
=
"ContentPlaceHolder2"
Runat
=
"Server"
>
<
center
>
<
table
>
<
tr
>
<
td
style
=
"color:Blue;font-size:large"
><
strong
>Money Order Research</
strong
><
br
/></
td
>
</
tr
>
<
tr
>
<
td
><
asp:Label
ID
=
"errorLabel"
runat
=
"server"
Font-Bold
=
"True"
Font-Size
=
"Large"
Font-Underline
=
"True"
ForeColor
=
"#990000"
></
asp:Label
><
br
/></
td
>
</
tr
>
</
table
>
</
center
>
</
asp:Content
>
<
asp:Content
ID
=
"Content3"
ContentPlaceHolderID
=
"ContentPlaceHolder1"
Runat
=
"Server"
>
<
telerik:RadScriptManager
ID
=
"RadScriptManager1"
runat
=
"server"
>
</
telerik:RadScriptManager
>
<
telerik:RadAjaxManager
ID
=
"RadAjaxManager1"
runat
=
"server"
>
<
AjaxSettings
>
<
telerik:AjaxSetting
AjaxControlID
=
"moGrid"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"moGrid"
LoadingPanelID
=
"RadAjaxLoadingPanel1"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
</
AjaxSettings
>
</
telerik:RadAjaxManager
>
<
telerik:RadAjaxLoadingPanel
ID
=
"RadAjaxLoadingPanel1"
runat
=
"server"
Skin
=
"WebBlue"
/>
<
telerik:RadGrid
ID
=
"moGrid"
runat
=
"server"
OnNeedDataSource
=
"moGrid_NeedDataSource"
ShowStatusBar
=
"true"
AllowFilteringByColumn
=
"true"
ShowFooter
=
"true"
AutoGenerateColumns
=
"False"
PageSize
=
"15"
AllowSorting
=
"True"
AllowPaging
=
"True"
GridLines
=
"Vertical"
ShowHeader
=
"true"
ShowGroupPanel
=
"true"
Skin
=
"WebBlue"
AlternatingItemStyle-HorizontalAlign
=
"Center"
ItemStyle-HorizontalAlign
=
"Center"
HeaderStyle-HorizontalAlign
=
"Center"
FilterItemStyle-HorizontalAlign
=
"Center"
GroupingSettings-CaseSensitive
=
"false"
>
<
ClientSettings
AllowDragToGroup
=
"True"
>
</
ClientSettings
>
<
MasterTableView
DataKeyNames
=
"ID,Location"
HierarchyLoadMode
=
"Client"
>
<
DetailTables
>
<
telerik:GridTableView
Name
=
"histTable"
DataKeyNames
=
"ID,Location,MOID,MOLoc"
DataSourceID
=
"histSource"
AutoGenerateColumns
=
"true"
>
<
ParentTableRelation
>
<
telerik:GridRelationFields
DetailKeyField
=
"MOID"
MasterKeyField
=
"ID"
/>
<
telerik:GridRelationFields
DetailKeyField
=
"MOLoc"
MasterKeyField
=
"Location"
/>
</
ParentTableRelation
>
</
telerik:GridTableView
>
</
DetailTables
>
<
SortExpressions
>
<
telerik:GridSortExpression
FieldName
=
"DateAdd"
SortOrder
=
"Descending"
/>
</
SortExpressions
>
<
Columns
>
<
telerik:GridBoundColumn
SortExpression
=
"ID"
HeaderText
=
"ID"
HeaderButtonType
=
"TextButton"
FilterDelay
=
"8000"
CurrentFilterFunction
=
"EqualTo"
Aggregate
=
"Count"
DataField
=
"ID"
UniqueName
=
"MO_ID"
AutoPostBackOnFilter
=
"false"
ShowFilterIcon
=
"false"
AllowFiltering
=
"true"
></
telerik:GridBoundColumn
>
<
telerik:GridTemplateColumn
SortExpression
=
"Location"
HeaderText
=
"Location"
HeaderButtonType
=
"TextButton"
FilterDelay
=
"8000"
CurrentFilterFunction
=
"EqualTo"
DataField
=
"Location"
UniqueName
=
"MO_Location"
GroupByExpression
=
"Location Group By Location"
AutoPostBackOnFilter
=
"false"
ShowFilterIcon
=
"false"
AllowFiltering
=
"true"
>
<
ItemTemplate
>
<
asp:Label
ID
=
"MOLocationLbl"
runat
=
"server"
Text='<%# Eval("Location") %>'></
asp:Label
>
</
ItemTemplate
>
<
FilterTemplate
>
<
telerik:RadComboBox
ID
=
"locBox"
runat
=
"server"
DataSourceID
=
"locationSource"
AppendDataBoundItems
=
"true"
Width
=
"90px"
SelectedValue='<%# ((GridItem)Container).OwnerTableView.GetColumn("MO_Location").CurrentFilterValue %>'
OnClientSelectedIndexChanged="SelectedLocIndexChanged" >
<
Items
>
<
telerik:RadComboBoxItem
runat
=
"server"
Text
=
"All Locations"
Value
=
""
/>
</
Items
>
</
telerik:RadComboBox
>
<
telerik:RadScriptBlock
ID
=
"locFilterScript"
runat
=
"server"
>
<
script
type
=
"text/javascript"
>
function SelectedLocIndexChanged(sendrer, args) {
var tableView = $find("<%# ((GridItem)Container).OwnerTableView.ClientID %>");
tableView.filter("MO_Location", args.get_item().get_value(), "EqualTo");
}
</
script
>
</
telerik:RadScriptBlock
>
</
FilterTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridBoundColumn
SortExpression
=
"ACROrder"
HeaderText
=
"Order #"
HeaderButtonType
=
"TextButton"
FilterDelay
=
"8000"
CurrentFilterFunction
=
"EqualTo"
DataField
=
"ACROrder"
UniqueName
=
"MO_ACROrder"
AutoPostBackOnFilter
=
"false"
ShowFilterIcon
=
"false"
AllowFiltering
=
"true"
></
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
SortExpression
=
"Amount"
HeaderText
=
"Amount"
HeaderButtonType
=
"TextButton"
FilterDelay
=
"8000"
DataField
=
"Amount"
Aggregate
=
"Sum"
UniqueName
=
"MO_Amount"
AutoPostBackOnFilter
=
"false"
ShowFilterIcon
=
"true"
AllowFiltering
=
"true"
DataFormatString
=
"{0:C}"
></
telerik:GridBoundColumn
>
<
telerik:GridTemplateColumn
SortExpression
=
"Status"
HeaderText
=
"Status"
GroupByExpression
=
"Status Group By Status"
HeaderButtonType
=
"TextButton"
FilterDelay
=
"8000"
CurrentFilterFunction
=
"EqualTo"
DataField
=
"Status"
UniqueName
=
"MO_Status"
AutoPostBackOnFilter
=
"false"
ShowFilterIcon
=
"false"
AllowFiltering
=
"true"
>
<
ItemTemplate
>
<
asp:Label
ID
=
"MOStatusLabel"
runat
=
"server"
Text='<%# Eval("StatusText") %>'></
asp:Label
>
</
ItemTemplate
>
<
FilterTemplate
>
<
telerik:RadComboBox
ID
=
"statusFilter"
runat
=
"server"
DataSourceID
=
"statusSource"
DataTextField
=
"Text"
DataValueField
=
"Value"
Width
=
"90px"
AppendDataBoundItems
=
"true"
SelectedValue='<%# ((GridItem)Container).OwnerTableView.GetColumn("MO_Status").CurrentFilterValue %>'
OnClientSelectedIndexChanged="SelectedStatusIndexChanged">
<
Items
>
<
telerik:RadComboBoxItem
runat
=
"server"
Text
=
"All Statuses"
Value
=
""
/>
</
Items
>
</
telerik:RadComboBox
>
<
telerik:RadScriptBlock
ID
=
"filterStatusScriptBlock"
runat
=
"server"
>
<
script
type
=
"text/javascript"
>
function SelectedStatusIndexChanged(sender, args) {
var tableView = $find("<%# ((GridItem)Container).OwnerTableView.ClientID %>");
tableView.filter("MO_Status", args.get_item().get_value(), "EqualTo");
}
</
script
>
</
telerik:RadScriptBlock
>
</
FilterTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
SortExpression
=
"SuspActivityFlag"
GroupByExpression
=
"SuspActivityFlag Group By SuspActivityFlag"
HeaderText
=
"Suspicous"
HeaderButtonType
=
"TextButton"
FilterDelay
=
"8000"
CurrentFilterFunction
=
"EqualTo"
DataField
=
"SuspActivityFlag"
UniqueName
=
"MO_SuspActivityFlag"
AutoPostBackOnFilter
=
"false"
ShowFilterIcon
=
"false"
AllowFiltering
=
"false"
>
<
ItemTemplate
>
<
asp:LinkButton
ID
=
"MOSuspActlbl"
runat
=
"server"
Text='<%# Eval("SuspActivityFlag").ToString() == "Y" ? "Yes" : "No" %>'
ForeColor='<%# Eval("SuspActivityFlag").ToString() == "Y" ? System.Drawing.Color.Maroon : System.Drawing.Color.Black %>' URL='<%# Eval("suspLink") %>' OnClientClick="PopUp(this.URL);"></
asp:LinkButton
>
<
telerik:RadScriptBlock
ID
=
"popupScript"
runat
=
"server"
>
<
script
type
=
"text/javascript"
>
function PopUp(URL) {
if (URL != '') {
day = new Date();
id = day.getTime();
window.open(URL, id, 'toolbar=1,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width=850,height=700,left = 62,top = 15')
}
}
</
script
>
</
telerik:RadScriptBlock
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
SortExpression
=
"LogID"
HeaderText
=
"Log ID"
GroupByExpression
=
"LogID Group By LogID"
HeaderButtonType
=
"TextButton"
FilterDelay
=
"8000"
CurrentFilterFunction
=
"EqualTo"
DataField
=
"LogID"
UniqueName
=
"MO_LogID"
AutoPostBackOnFilter
=
"false"
ShowFilterIcon
=
"true"
AllowFiltering
=
"true"
>
<
ItemTemplate
>
<
asp:LinkButton
ID
=
"logLink"
runat
=
"server"
Text='<%# Convert.ToInt32(Eval("LogID")) == -1 ? "N/A" : Eval("LogID") %>'
URL='<%# Eval("LogLink") %>' OnClientClick="PopUp(this.URL);"></
asp:LinkButton
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridBoundColumn
SortExpression
=
"UserName"
HeaderText
=
"User"
HeaderButtonType
=
"TextButton"
FilterDelay
=
"8000"
CurrentFilterFunction
=
"Contains"
DataField
=
"UserName"
UniqueName
=
"MO_UserName"
AutoPostBackOnFilter
=
"false"
ShowFilterIcon
=
"false"
AllowFiltering
=
"true"
></
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
SortExpression
=
"DateAdd"
HeaderText
=
"Date"
HeaderButtonType
=
"TextButton"
FilterDelay
=
"8000"
DataField
=
"DateAdd"
UniqueName
=
"MO_DateAdd"
AutoPostBackOnFilter
=
"false"
ShowFilterIcon
=
"true"
AllowFiltering
=
"true"
DataFormatString
=
"{0:MM/dd/yyyy hh:mm tt}"
></
telerik:GridBoundColumn
>
</
Columns
>
</
MasterTableView
>
</
telerik:RadGrid
>
<
asp:ObjectDataSource
ID
=
"statusSource"
runat
=
"server"
SelectMethod
=
"GetStatuses"
TypeName
=
"MO.Business.Defaults"
>
</
asp:ObjectDataSource
>
<
asp:ObjectDataSource
ID
=
"locationSource"
runat
=
"server"
SelectMethod
=
"GetLocations"
TypeName
=
"MO.Business.Defaults"
>
</
asp:ObjectDataSource
>
<
asp:ObjectDataSource
ID
=
"histSource"
runat
=
"server"
SelectMethod
=
"GetHistory"
TypeName
=
"MO.Business.Research"
></
asp:ObjectDataSource
>
</
asp:Content
>
<
asp:Content
ID
=
"Content4"
ContentPlaceHolderID
=
"ContentPlaceHolder3"
Runat
=
"Server"
>
</
asp:Content
>
I keep getting Cannot Find Column [MOID]. The stack trace looks like this:
[EvaluateException: Cannot find column [MOID].]
System.Data.NameNode.Bind(DataTable table, List`1 list) +1173813
System.Data.BinaryNode.Bind(DataTable table, List`1 list) +31
System.Data.UnaryNode.Bind(DataTable table, List`1 list) +29
System.Data.BinaryNode.Bind(DataTable table, List`1 list) +31
System.Data.UnaryNode.Bind(DataTable table, List`1 list) +29
System.Data.DataExpression.Bind(DataTable table) +59
System.Data.DataExpression..ctor(DataTable table, String expression, Type type) +4833511
System.Data.DataView.set_RowFilter(String value) +153
System.Data.LinqDataView.set_RowFilter(String value) +53
Telerik.Web.UI.GridEnumerableFromDataView.PerformTransformation() +405
Telerik.Web.UI.GridEnumerableFromDataView.TransformEnumerable() +21
Thanks,
Aaron