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() +21Thanks,
Aaron