using linq vs tableAdapters for hierarchical relationships

5 posts, 0 answers
  1. Joe
    Joe avatar
    52 posts
    Member since:
    Feb 2012

    Posted 05 Jan 2018 Link to this post

    Hello --

    I am using the following to populate a datagrid and to setup hierarchical relationships for a parent/child grid:

     

    private void radButton1_Click(object sender, EventArgs e)
            {
     
                FlexEDIEntities db = new FlexEDIEntities();
     
                var gridData = (from d in db.billing_transactions
                                where d.status == 1
                                select new
                                {
                                    d.Id,
                                    d.stop_details.con_name,
                                    d.stop_details.con_address1,
                                    d.stop_details.con_city,
                                    d.weight_billed,
                                    d.base_amount,
                                   count =  d.billing_transaction_accessorial_charge.Count
                                }).ToList();
     
     
                main_grid.DataSource = gridData;
                if (this.main_grid.Relations.Count == 0) // does not exist yet
                {
                    
                GridViewRelation relation = new GridViewRelation(this.main_grid.MasterTemplate);
                relation.ChildTemplate = accessorial_template;
                relation.RelationName = "TransToCharges";
                relation.ParentColumnNames.Add("Id");
                relation.ChildColumnNames.Add("billing_transaction_id");
                this.main_grid.Relations.Add(relation);
     
                }
            }

     

    I have a lot of these to do in this project so I am trying to not have to have a bunch of extra data sources in the project.

    It is not necessary that the datagrid update the underlying data source as edits will be handled by dedicated screens.
    Can I set up the child data source using a linq query, either by modifying the one above or having a second one that is dedicated for the child relationship?

     

    Thank you --

     

    Joe

  2. Hristo
    Admin
    Hristo avatar
    1494 posts

    Posted 08 Jan 2018 Link to this post

    Hi Joe,

    Thank you for writing.

    You should be able to use LINQ and perform queries on your data source and then bind the grid to the returned data. Please note, however, that if you return anonymous objects as in the shared code snippet you would not be able to edit the grid. The standard .NET DataGridView control behaves the same way.

    In order to have a fully functional grid, I can suggest performing the LINQ queries and to return a type from them. You can check the following resources:
    Additionally, you can also check the following documentation article demonstrating how Entity Framework can be used with the grid: https://docs.telerik.com/devtools/winforms/gridview/populating-with-data/binding-to-entityframework-using-database-first-approach.

    I hope this helps. Let me know if you need further assistance.

    Regards,
    Hristo
    Progress Telerik
    Try our brand new, jQuery-free Angular components built from ground-up which deliver the business app essential building blocks - a grid component, data visualization (charts) and form elements.
  3. Joe
    Joe avatar
    52 posts
    Member since:
    Feb 2012

    Posted 08 Jan 2018 in reply to Hristo Link to this post

    Thank you,

     

    I will work through the example and give it a try.

    I have no problem bind data from a linq query to a datatable, just setting up the parent/child.

    I appreciate the point in the right direction and will up date this post later.

     

    --Joe

  4. Joe
    Joe avatar
    52 posts
    Member since:
    Feb 2012

    Posted 08 Jan 2018 in reply to Joe Link to this post

    OK...not quite.

    Following the example assumes that I want to load the entire table.

    What I am trying to do is first have a linq query that returns a subset of the table.

    Then add the relationship and childtemplate *without* having to add a new datasource.

    Here is the complete code that is working, but using a datasource called flexEDIDataSetBindingSource:

     

    transactions_grid.DataSource = gridData;
    //setup the accessorial charges template for the child table
    GridViewTemplate accessorial_template = new GridViewTemplate();
    accessorial_template.AllowAddNewRow = false;
    accessorial_template.Columns.Add(new GridViewTextBoxColumn("description"));
    accessorial_template.Columns.Add(new GridViewTextBoxColumn("amount"));
    accessorial_template.DataSource = flexEDIDataSetBindingSource;
    accessorial_template.Caption = "Accessorial Charges";
     
    GridViewTextBoxColumn transIDcolumn = new GridViewTextBoxColumn("billing_transaction_id");
    transIDcolumn.IsVisible = false;
    accessorial_template.Columns.Add(transIDcolumn);
     
    accessorial_template.BestFitColumns();
     
    transactions_grid.MasterTemplate.Templates.Add(accessorial_template);
     
    if (this.transactions_grid.Relations.Count == 0) // does not exist yet
    {
     
        GridViewRelation relation = new GridViewRelation(this.transactions_grid.MasterTemplate);
        relation.ChildTemplate = accessorial_template;
        relation.RelationName = "TransToCharges";
        relation.ParentColumnNames.Add("Id");
        relation.ChildColumnNames.Add("billing_transaction_id");
        this.transactions_grid.Relations.Add(relation);
     
    }

     

  5. Hristo
    Admin
    Hristo avatar
    1494 posts

    Posted 09 Jan 2018 Link to this post

    Hello Joe,

    Thank you for writing back.

    You can set up the templates and add the relations independently to the data source. However, when you set the data source to the grid or the templates you will need to use a collection returned by your query. As I said before, just check that you are not returning anonymous types to fill the collections used to data bind the control.

    I hope this helps. Let me know if you have other questions.

    Regards,
    Hristo
    Progress Telerik
    Try our brand new, jQuery-free Angular components built from ground-up which deliver the business app essential building blocks - a grid component, data visualization (charts) and form elements.
Back to Top