This is a migrated thread and some comments may be shown as answers.

Grid sorting issue

5 Answers 103 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Rohan
Top achievements
Rank 1
Rohan asked on 08 Feb 2011, 07:54 AM
Hi to all,

I have a grid binded with data. The data has some foreign key feilds too. For some F.K fields sorting is working fine and for some its giving this error:

Server Error in '/' Application.

Room is neither a DataColumn nor a DataRelation for table Categories.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ArgumentException: Room is neither a DataColumn nor a DataRelation for table Categories.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[ArgumentException: Room is neither a DataColumn nor a DataRelation for table Categories.]
   System.Data.DataRowView.get_Item(String property) +1789622
   lambda_method(Closure , DataRowView ) +41
   System.Linq.EnumerableSorter`2.ComputeKeys(TElement[] elements, Int32 count) +88
   System.Linq.EnumerableSorter`1.Sort(TElement[] elements, Int32 count) +21
   System.Linq.<GetEnumerator>d__0.MoveNext() +153
   System.Linq.Enumerable.Count(IEnumerable`1 source) +201
   lambda_method(Closure ) +315
   System.Linq.EnumerableExecutor`1.Execute() +94
   System.Linq.EnumerableExecutor`1.ExecuteBoxed() +23
   System.Linq.EnumerableQuery`1.System.Linq.IQueryProvider.Execute(Expression expression) +94
   Telerik.Web.UI.GridDynamicQueryable.Count(IQueryable source) +296
   Telerik.Web.UI.GridDataTableFromEnumerable.FillData35() +4333
   Telerik.Web.UI.GridDataTableFromEnumerable.FillData() +1064
   Telerik.Web.UI.GridResolveEnumerable.Initialize() +58
   Telerik.Web.UI.GridResolveEnumerable.EnsureInitialized() +45
   Telerik.Web.UI.GridResolveEnumerable.get_DataTable() +31
   Telerik.Web.UI.GridEnumerableFromDataView..ctor(GridTableView owner, DataView dataView, Boolean autoGenerateColumns, GridColumnCollection presentColumns, String[] additionalField, Boolean retrieveAllFields) +222
   Telerik.Web.UI.GridDataSourceHelper.CreateGridEnumerable(GridTableView owner, IEnumerable enumerable, Boolean caseSensitive, Boolean autoGenerateColumns, GridColumnCollection presentColumns, String[] additionalField, Boolean retrieveAllFields) +97
   Telerik.Web.UI.GridDataSourceHelper.GetResolvedDataSource(GridTableView owner, Object dataSource, String dataMember, Boolean caseSensitive, Boolean autoGenerateColumns, GridColumnCollection presentColumns, String[] additionalField, Boolean retrieveAllFields) +165
   Telerik.Web.UI.GridTableView.get_ResolvedDataSource() +225
   Telerik.Web.UI.GridTableView.CreateChildControls(IEnumerable dataSource, Boolean useDataSource) +73
   System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data) +66
   System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data) +128
   System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +33
   System.Web.UI.WebControls.DataBoundControl.PerformSelect() +143
   Telerik.Web.UI.GridTableView.PerformSelect() +38
   System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +74
   Telerik.Web.UI.GridTableView.DataBind() +367
   Telerik.Web.UI.GridSortCommandEventArgs.ExecuteCommand(Object source) +318
   Telerik.Web.UI.RadGrid.OnBubbleEvent(Object source, EventArgs e) +200
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
   Telerik.Web.UI.GridItem.OnBubbleEvent(Object source, EventArgs e) +61
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
   Telerik.Web.UI.GridItem.OnBubbleEvent(Object source, EventArgs e) +170
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
   System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +125
   System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) +169
   System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +9
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +176
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5563


Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.1


I dont know what is the problem in it. Here is my code:
<telerik:RadGrid ID="grvUsers" runat="server" Skin="Sunset" GridLines="None" AllowPaging="True"
                    PageSize="20" AllowSorting="True" Width="90%" OnItemCommand="grvUsers_ItemCommand"
                    OnNeedDataSource="grvUsers_NeedDataSource" OnColumnCreated="grvUsers_ColumnCreated">
                    <PagerStyle Mode="NextPrevAndNumeric"></PagerStyle>
                    <ItemStyle Height="30px" />
                    <AlternatingItemStyle Height="30px" />
                    <HeaderStyle Font-Bold="true" />
                    <CommandItemStyle Height="30px" VerticalAlign="Middle" />
                    <MasterTableView DataKeyNames="Id" CommandItemDisplay="Bottom">
                        <Columns>
                            <telerik:GridTemplateColumn HeaderText="Action">
                                <ItemStyle Width="50px" />
                                <ItemTemplate>
                                    <asp:ImageButton ID="lnkEdit" runat="server" CommandName="Modify" AlternateText="Edit"
                                        ToolTip="Edit" ImageUrl="~/Content/Images/Buttons/edit_icon.png" CommandArgument='<%# Eval("Id") %>' />  
                                    <asp:ImageButton ID="lnkDelete" runat="server" AlternateText="Remove" ToolTip="Remove"
                                        ImageUrl="~/Content/Images/Buttons/remove_icon.png" OnClientClick="return confirm('Are you sure you want to delete?')"
                                        CommandName="Delete" CommandArgument='<%# Eval("Id") %>' />
                                </ItemTemplate>
                            </telerik:GridTemplateColumn>
                        </Columns>
                        <CommandItemTemplate>
                            <asp:ImageButton ID="lnkAdd" runat="server" CommandName="Add" ImageUrl="~/Content/Images/Buttons/add_new_user_bttn.png">
                                <%--<img style="border:0px" alt="" src="../Content/Images/AddRecord.GIF" />Add New User--%>
                            </asp:ImageButton>
                        </CommandItemTemplate>
                    </MasterTableView>
                </telerik:RadGrid>

code behind:
protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                BindData();
            }
        }
 
        private void BindData()
        {
            DataTable Users;
 
            using (UsersServiceClient s = new UsersServiceClient())
            {
                Users = s.GetUserTable();
            }
            grvUsers.DataSource = Users;
            grvUsers.DataBind();
        }
        protected void grvUsers_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
        {
            DataTable Users;
 
            using (UsersServiceClient s = new UsersServiceClient())
            {
                Users = s.GetUserTable();
            }
            grvUsers.DataSource = Users;
        }
 
        protected void grvUsers_ColumnCreated(object sender, GridColumnCreatedEventArgs e)
        {
            if (e.Column.UniqueName == "id")
            {
                e.Column.Visible = false;
            }
        }

Please assist me....

thanks Rohan

5 Answers, 1 is accepted

Sort by
0
Rohan
Top achievements
Rank 1
answered on 09 Feb 2011, 06:58 AM
Hi,

Still no replies. Please assist me on this.


Thanks
Rohan
0
Pavlina
Telerik team
answered on 09 Feb 2011, 10:03 AM
Hello Rohan,

I went through your code and noticed that you are using simple data binding technique. Note that advanced features like sorting, paging, filtering etc. are not supported with simple data-binding calling DataBind(). Therefore, I recommend that you use advanced binding through the NeedDataSource event or data source control as demonstrated in the help link below and see if the problem still persists:
Advanced Data Binding

Greetings,
Pavlina
the Telerik team
Browse the vast support resources we have to jump start your development with RadControls for ASP.NET AJAX. See how to integrate our AJAX controls seamlessly in SharePoint 2007/2010 visiting our common SharePoint portal.
0
Rohan
Top achievements
Rank 1
answered on 10 Feb 2011, 08:38 AM
Hi,

Thanks for replying. I used advanced data binding. Still the problem persists. I did like this:
private void BindData()
        {
            DataTable Users;
 
            string selectedBuilding = cmbBuilding.SelectedItem.Text;
 
            using (UsersServiceClient s = new UsersServiceClient())
            {
                if (selectedBuilding == "Select Building")
                {
                    Users = s.GetUserTable();
                }
                else
                {
                    Users = s.GetUserFieldsBuBuilding(int.Parse(cmbBuilding.SelectedValue));
                }
            }
            grvUsers.DataSource = Users;
        }
protected void grvUsers_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
        {
            BindData();
        }

please correct me if I am wrong...

thanks
Rohan
0
Rohan
Top achievements
Rank 1
answered on 10 Feb 2011, 08:49 AM
Hi,

Now I used it like this, more closer to advanced data binding:
private DataTable BindData()
        {
            DataTable Users;
 
            string selectedBuilding = cmbBuilding.SelectedItem.Text;
 
            using (UsersServiceClient s = new UsersServiceClient())
            {
                if (selectedBuilding == "Select Building")
                {
                    Users = s.GetUserTable();
                }
                else
                {
                    Users = s.GetUserFieldsBuBuilding(int.Parse(cmbBuilding.SelectedValue));
                }
            }
            return Users;
        }
protected void grvUsers_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
        {
            grvUsers.DataSource = BindData();
        }
 
        protected void grvUsers_ColumnCreated(object sender, GridColumnCreatedEventArgs e)
        {
            if (e.Column.UniqueName == "id")
            {
                e.Column.Visible = false;
            }
        }
 
        protected void cmbBuilding_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)
        {
            grvUsers.Rebind();
        }
Please correct me if I am wrong..

Thanks
Rohan
0
Pavlina
Telerik team
answered on 10 Feb 2011, 04:28 PM
Hi Rohan,

I reviewed the provided code, and it looks correct. At this point to properly assist you, I would suggest that you open a formal support ticket and send us a small working project, which demonstrates the problem you are facing. We will debug it locally, and provide a solution.

Greetings,
Pavlina
the Telerik team
Browse the vast support resources we have to jump start your development with RadControls for ASP.NET AJAX. See how to integrate our AJAX controls seamlessly in SharePoint 2007/2010 visiting our common SharePoint portal.
Tags
Grid
Asked by
Rohan
Top achievements
Rank 1
Answers by
Rohan
Top achievements
Rank 1
Pavlina
Telerik team
Share this question
or