Can We User LINQ work on GridView's GridViewRowCollection?

6 posts, 1 answers
  1. Hector
    Hector avatar
    25 posts
    Member since:
    Jul 2011

    Posted 10 Aug 2011 Link to this post

    I wanted to see if I can use LINQ on RADGridView's GridViewRowCollection (Telerik.Wincontrols.UI.GridViewRowCollection).

    So I tried the following VB.NET code and got an error:

    Dim lockedRows = _
        From row In Me.dgTotalCosts.Rows _
        Where row.Cells("colLocked").Value = True
        Select New With {.Code = row.Cells("colCode").Value, _
                         .Description = row.Cells("colDesc").Value}

    ... when I then tried to check the value of lockedRows.Count. So i tried changing it around a little bit to:

    Dim lockedRows As IEnumerable(Of Telerik.WinControls.UI.GridViewRowInfo) = _
        From row As Telerik.WinControls.UI.GridViewRowInfo In Me.dgTotalCosts.Rows _
        Where row.Cells("colLocked").Value = True
        Select New With {.Code = row.Cells("colCode").Value, _
                         .Description = row.Cells("colDesc").Value}

    But then got the following error (which I've somewhat abbreviated for briefness):

    Unable to cast object of type 'WhereSelectEnumerableIterator'2[Telerik.WinControls.UI.GridViewRowInfo, VB$AnonymousType_0'6
    [System.Object, ...]]' to type 'System.Collections.Generic.IEnumerable'1[Telerik.WinControls.UI.GridViewRowInfo]'.

    So, the first question is, can I use LINQ on GridView's GridViewRowCollection. Secondly, if so, how (can you show me using my example code, above, where I'm trying to pull out the locked rows from a GridView (

    Telerik.WinControls.UI.

     

    RadGridView

     

    )?

    Thanks in advance for your help from a LINQ and RADGridView Newbie.
  2. Svett
    Admin
    Svett avatar
    728 posts

    Posted 11 Aug 2011 Link to this post

    Hello Hector,

    You can use LINQ with a GridViewRowCollection instance. Here is a sample code snippet:

    Dim lockedRows = From row In Me.radGridView1.Rows Where Object.Equals(row.Cells("ID").Value, 1)New With { _
        Key .Code = row.Cells("Name").Value, _
        Key .Description = row.Cells("Description").Value _
    }

    Greetings,
    Svett
    the Telerik team

    Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get now >>

  3. Hector
    Hector avatar
    25 posts
    Member since:
    Jul 2011

    Posted 11 Aug 2011 Link to this post

    Svett,

    thanks for your prompt reply. Did you mistakenly forget the 'Select' before the 'New With'? Also, remember now, I'm pretty new to Linq, especially Linq using VB.NET (unfortunately the language I must use at the present), so forgive me for what may be fundamental or elementary questions, but what is the purpose of the 'Key' in the object initializer? Is it specific to VB.NET?

    More importantly, though, let's assume I get the above to work. How would I then iterate through the results?

    I tried the following code:

    Dim lockedRows = _
        From row In Me.dgTotalCosts.Rows _
        Where Object.Equals(row.Cells("colLock").Value, True) _
        Select New With {Key .Code = row.Cells("colTotalCode").Value, _
                         Key .Description = row.Cells("colTotCostDesc").Value}

    . . . then:

    For Each gvr As tlrk.GridViewRowInfo In lockedRows
        Dim sCode As String = gvr.Cells("colTotCostDesc").Value
        Dim sDescription As String = gvr.Cells("colTotCostDesc").Value
        MessageBox.Show("UsingLINQ    " & vbCrLf & _
                        "  Code: " & sCode & vbCrLf & _
                        "  sDescription: " & sDescription)
    Next

    . . . and got the following error:

    Exception: Unable to cast object of type 'VB$AnonymousType_0'6(Of Obect, ...)' to type 'Telerik.WinControls.UI.GridViewRowInfo'.


  4. Answer
    Svett
    Admin
    Svett avatar
    728 posts

    Posted 15 Aug 2011 Link to this post

    Hello Hector,

    I am enclosing a sample project that demonstrates how you can use the GridViewRowCollection with LINQ.

    Regards,
    Svett
    the Telerik team

    Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get now >>

  5. Hector
    Hector avatar
    25 posts
    Member since:
    Jul 2011

    Posted 15 Aug 2011 Link to this post

    Svett,

    thanks, the sample project brought me to the solution. However, I'd like to point out that I tried the following For Each loop:

     

    For Each gvr In lockedRows
        MessageBox.Show("UsingLINQ    " & vbCrLf & _
                        "  Code: " & gvr.Code & vbCrLf & _
                        "  Description: " & gvr.Code)
    Next

    . . . but got compilation error:

    'gvr' is not declared. It may be inaccessible due to its protection level.
    - Generate method stub for 'gvr' in 'Namespace.ClassName'
    - Generate property stub for 'gvr' in 'Namespace.ClassName'
    - Generate field for 'gvr' in 'Namespace.ClassName'

    So I changed it to:

     

    For Each gvr As Object In lockedRows
        MessageBox.Show("UsingLINQ    " & vbCrLf & _
                        "  Code: " & gvr.Code & vbCrLf & _
                        "  Description: " & gvr.Code)
    Next

    . . . and it worked. Note, the addition of 'As Object'.

    For those following the thread and wanting to see the full code that populated the lockedRows LINQ expression variable along with the For Each processing loop, here it is:

    Dim lockedRows = _
    From row In Me.RadGridView1.Rows _
    Where Object.Equals(row.Cells("colIsLocked").Value, True) _
    Select New With {.Code = row.Cells("colCode").Value, _
                .Description = row.Cells("colDesc").Value}
    For Each gvr As Object In lockedRows
        MessageBox.Show("UsingLINQ Debugging   " & vbCrLf & _
                        "  Code: " & gvr.Code & vbCrLf & _
                        "  Description: " & gvr.Description)
    Next

    The thing I'd like to add, I guess, is that in the For Each loop, the elements being iterated are not of the type GridViewRowInfo, and instead are of the anonymous type created in the 'Select' query operator.

    Regards,

    Hector (LINQ and Rad WinForms controls newbie)

  6. Svett
    Admin
    Svett avatar
    728 posts

    Posted 16 Aug 2011 Link to this post

    Hello Hector,

    I am glad to hear that the supplied project helped you to understand how to use LINQ with GridViewRowCollection.

    Feel free to write back if you have other questions.

    Best wishes,
    Svett
    the Telerik team

    Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get now >>

Back to Top