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

Select First Row on Sort

2 Answers 89 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Bryan Hughes
Top achievements
Rank 1
Bryan Hughes asked on 02 Feb 2013, 12:35 AM
Hello,

I am using a grid to load a dataview similar to your WebMail example.  I can select the first row and load dataview on page load.  I can load dataview on row selection, but I cannot figure out how to load first row on grid sort function.  I have tried using pre render which works, but then row selected command does not work.  On your WebMail example you use the grid as your parameter value for the link data source of the dataview.  I am using a custom dataset from data layer, so cannot use the same way.  How can I get similar functionality?  If I use a sessin variable it never loads new selection, but if I put selected grid value in textbox on client side, then get value I can load dataview except on sort.

Imports System
Imports System.Data
Imports Message
 
Imports Telerik.Web.UI
Partial Class Messages
    Inherits System.Web.UI.Page
    Protected m As New Message
 
 
    Dim isSelected As Boolean
    Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
        If Not IsPostBack Then
            Session("SelectedView") = "Inbox"
            RadGrid1.Rebind()
            SelectFirstGridRow()
            LoadMessage()
        Else
            LoadMessage()
        End If
    End Sub
    Protected Sub RtvMessageslNodeClick(ByVal sender As Object, ByVal e As Telerik.Web.UI.RadTreeNodeEventArgs) Handles RtvMessages.NodeClick
        Select Case e.Node.Text
            Case "Inbox"
                Session("SelectedView") = "Inbox"
                Exit Select
            Case "Sent"
                Session("SelectedView") = "Sent"
                Exit Select
            Case "Agency"
                Session("SelectedView") = "Deleted"
                Exit Select
        End Select
 
        RadGrid1.Rebind()
    End Sub
    Protected Sub RadGrid1_NeedDataSource(ByVal source As Object, ByVal e As Telerik.Web.UI.GridNeedDataSourceEventArgs) Handles RadGrid1.NeedDataSource
        Dim listtype As String '= "Inbox"
        listtype = RtvMessages.SelectedNode.Text
        'testout.Text = listtype
        Select Case listtype
            Case "Sent"
                RadGrid1.MasterTableView.GetColumn("ToUserFullName").Visible = True
                RadGrid1.MasterTableView.GetColumn("FromUserFullName").Visible = False
            Case "Deleted"
                RadGrid1.MasterTableView.GetColumn("FromUserFullName").Visible = True
                RadGrid1.MasterTableView.GetColumn("ToUserFullName").Visible = False
            Case Else
                RadGrid1.MasterTableView.GetColumn("FromUserFullName").Visible = True
                RadGrid1.MasterTableView.GetColumn("ToUserFullName").Visible = False
        End Select
        Dim errors As String = ""
        RadGrid1.DataSource = Message.GetMessageList_outlookformat(Membership.GetUser(User.Identity.Name).ProviderUserKey, listtype, errors)
        'testout.Text = errors
 
    End Sub
    Protected Sub RadGrid1_RowSelected(ByVal source As Object, ByVal e As Telerik.Web.UI.GridNeedDataSourceEventArgs)
        Session("SelectedMessage") = RadGrid1.SelectedValue.ToString
        LoadMessage()
        Dim errors As String = ""
    End Sub
    Sub Checkisnew(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridItemEventArgs) Handles RadGrid1.ItemDataBound
        If TypeOf e.Item Is Telerik.Web.UI.GridDataItem Then
 
            Dim checkrow As DataRowView
            checkrow = e.Item.DataItem
 
            Dim i As New HtmlImage
            i = e.Item.FindControl("mailicon")
            'Dim i2 As New HtmlImage
            'i2 = e.Item.FindControl("replyicon")
 
            If checkrow.Row("IsNew") Then
                i.Src = "images/icon-msg-unread.gif"
            ElseIf checkrow.Row("RepliedTo") Then
                i.Src = "images/icon-msg-reply.gif"
            ElseIf checkrow.Row("Forwarded") Then
                i.Src = "images/icon-msg-forward.gif"
            Else
                i.Src = "images/icon-msg-read.gif"
            End If
 
            'If checkrow.Row("RepliedTo") Then
            '    i2.Src = "images/reply.gif"
            'Else
            '    i2.Src = "images/spacer.gif"
            '    i2.Visible = False
            'End If
 
            'i2 = e.Item.FindControl("forwardicon")
            'If checkrow.Row("Forwarded") Then
            '    i2.Src = "images/forward.gif"
            '    i2.Style.Add("margin-left", "2px")
            'Else
            '    i2.Src = "images/spacer.gif"
            '    i2.Visible = False
            'End If
            Dim dt As DateTime = checkrow("DateCreated")
            e.Item.Cells(7).Text = dt.ToShortDateString & " " & dt.ToShortTimeString
 
        End If
 
 
    End Sub
    Protected Sub RadGrid1_PreRender(ByVal sender As Object, ByVal e As EventArgs) Handles RadGrid1.PreRender
        'If (RadGrid1.MasterTableView.Items.Count > 0) Then
        '    If RadGrid1.SelectedItems.Count = 0 Then
        '        RadGrid1.MasterTableView.Items(0).Selected = True
        '        Session("SelectedMessage") = RadGrid1.SelectedValue.ToString
        '        LoadMessage()
        '    Else
        '        LoadMessage()
        '    End If
        'End If
    End Sub
    Private Sub SelectFirstGridRow()
        Dim firstDataItem As GridDataItem = RadGrid1.Items.OfType(Of GridDataItem).FirstOrDefault()
        If firstDataItem IsNot Nothing Then
            firstDataItem.Selected = True
            If Session("SelectedMessage") Is Nothing Then
                Session("SelectedMessage") = RadGrid1.SelectedValue.ToString
            End If
        End If
 
    End Sub
    Sub Deletemessage(ByVal sender As Object, ByVal e As EventArgs)
        m.Load(RadGrid1.SelectedValue)
        m.MarkForDeletion()
        Dim intpage As Integer
        intpage = RadGrid1.CurrentPageIndex
        RadGrid1.Rebind()
        RadGrid1.CurrentPageIndex = intpage
    End Sub
    Sub LoadMessage()
        Dim messageGuidIn As String
        Dim guidin As Guid
        Dim mv As DetailsView = DetailsView1
        Dim ds As DataSet
        If RadGrid1.Items.Count > 0 Then
            Dim selectedTextBox As RadTextBox = DirectCast(DirectCast(RadToolBar1.FindButtonByCommandName("selectedText"), RadToolBarButton).FindControl("RadTextBox1"), RadTextBox)
            If selectedTextBox.Text = String.Empty Then
                messageGuidIn = RadGrid1.SelectedValue.ToString
            Else
                messageGuidIn = selectedTextBox.Text
            End If
 
 
            guidin = New Guid(messageGuidIn)
            ds = Message.GetMessage(guidin)
            If ds.Tables.Count > 0 Then
                m.Load(guidin)
                If m.IsNew Then
                    m.ChangeIsNew()
                End If
            End If
            mv.DataSource = ds
            mv.DataBind()
        End If
    End Sub
    Protected Sub RadAjaxManager1_AjaxRequest(sender As Object, e As AjaxRequestEventArgs)
        Dim intpage As Integer
 
        intpage = RadGrid1.CurrentPageIndex
        RadGrid1.Rebind()
        RadGrid1.CurrentPageIndex = intpage
        LoadMessage()
 
    End Sub
 
 
End Class

2 Answers, 1 is accepted

Sort by
0
Kostadin
Telerik team
answered on 06 Feb 2013, 04:43 PM
Hello Bryan,

If you want to select the first row after you perform sorting you have to do it on PreRender event handler like you are doing. I check out your code and the approach looks right. I am not completely sure what do you mean by "selected command does not work.". Could you please provide us with a runnable sample where the issue could be observed in order to investigate it further on our side?

Greetings,
Kostadin
the Telerik team
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now.
0
Bryan Hughes
Top achievements
Rank 1
answered on 06 Feb 2013, 08:43 PM
I figured it out.  It was my order of operations.  I added in the SelectedIndexChanged to update session variable, removed the LoadMessage on PostBack, then made prerender coomands functional.  It works great.  On First page load it selects first row and loads dataview.  On Row select it loads dataview of selected row.  On sort it selects first row then loads dataview.

Imports System
Imports System.Data
Imports Message
 
Imports Telerik.Web.UI
Partial Class Messages
    Inherits System.Web.UI.Page
    Protected m As New Message
 
 
    Dim isSelected As Boolean
    Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
        If Not IsPostBack Then
            Session("SelectedView") = "Inbox"
            RadGrid1.Rebind()
            SelectFirstGridRow()
            LoadMessage()
        End If
    End Sub
    Protected Sub RtvMessageslNodeClick(ByVal sender As Object, ByVal e As Telerik.Web.UI.RadTreeNodeEventArgs) Handles RtvMessages.NodeClick
        Select Case e.Node.Text
            Case "Inbox"
                Session("SelectedView") = "Inbox"
                Exit Select
            Case "Sent"
                Session("SelectedView") = "Sent"
                Exit Select
            Case "Agency"
                Session("SelectedView") = "Deleted"
                Exit Select
        End Select
 
        RadGrid1.Rebind()
    End Sub
    Protected Sub RadGrid1_NeedDataSource(ByVal source As Object, ByVal e As Telerik.Web.UI.GridNeedDataSourceEventArgs) Handles RadGrid1.NeedDataSource
        Dim listtype As String '= "Inbox"
        listtype = RtvMessages.SelectedNode.Text
        'testout.Text = listtype
        Select Case listtype
            Case "Sent"
                RadGrid1.MasterTableView.GetColumn("ToUserFullName").Visible = True
                RadGrid1.MasterTableView.GetColumn("FromUserFullName").Visible = False
            Case "Deleted"
                RadGrid1.MasterTableView.GetColumn("FromUserFullName").Visible = True
                RadGrid1.MasterTableView.GetColumn("ToUserFullName").Visible = False
            Case Else
                RadGrid1.MasterTableView.GetColumn("FromUserFullName").Visible = True
                RadGrid1.MasterTableView.GetColumn("ToUserFullName").Visible = False
        End Select
        Dim errors As String = ""
        RadGrid1.DataSource = Message.GetMessageList_outlookformat(Membership.GetUser(User.Identity.Name).ProviderUserKey, listtype, errors)
        'testout.Text = errors
 
    End Sub
    Sub Checkisnew(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridItemEventArgs) Handles RadGrid1.ItemDataBound
        If TypeOf e.Item Is Telerik.Web.UI.GridDataItem Then
 
            Dim checkrow As DataRowView
            checkrow = e.Item.DataItem
 
            Dim i As New HtmlImage
            i = e.Item.FindControl("mailicon")
            'Dim i2 As New HtmlImage
            'i2 = e.Item.FindControl("replyicon")
 
            If checkrow.Row("IsNew") Then
                i.Src = "images/icon-msg-unread.gif"
            ElseIf checkrow.Row("RepliedTo") Then
                i.Src = "images/icon-msg-reply.gif"
            ElseIf checkrow.Row("Forwarded") Then
                i.Src = "images/icon-msg-forward.gif"
            Else
                i.Src = "images/icon-msg-read.gif"
            End If
 
            'If checkrow.Row("RepliedTo") Then
            '    i2.Src = "images/reply.gif"
            'Else
            '    i2.Src = "images/spacer.gif"
            '    i2.Visible = False
            'End If
 
            'i2 = e.Item.FindControl("forwardicon")
            'If checkrow.Row("Forwarded") Then
            '    i2.Src = "images/forward.gif"
            '    i2.Style.Add("margin-left", "2px")
            'Else
            '    i2.Src = "images/spacer.gif"
            '    i2.Visible = False
            'End If
            Dim dt As DateTime = checkrow("DateCreated")
            e.Item.Cells(7).Text = dt.ToShortDateString & " " & dt.ToShortTimeString
 
        End If
 
 
    End Sub
    Protected Sub RadGrid1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles RadGrid1.SelectedIndexChanged
        Session("SelectedMessage") = RadGrid1.SelectedValue.ToString
    End Sub
    Protected Sub RadGrid1_PreRender(ByVal sender As Object, ByVal e As EventArgs) Handles RadGrid1.PreRender
        If (RadGrid1.MasterTableView.Items.Count > 0) Then
            If RadGrid1.SelectedItems.Count = 0 Then
                RadGrid1.MasterTableView.Items(0).Selected = True
                Session("SelectedMessage") = RadGrid1.SelectedValue.ToString
                LoadMessage()
            Else
                LoadMessage()
            End If
        End If
    End Sub
    Private Sub SelectFirstGridRow()
        Dim firstDataItem As GridDataItem = RadGrid1.Items.OfType(Of GridDataItem).FirstOrDefault()
        If firstDataItem IsNot Nothing Then
            firstDataItem.Selected = True
            If Session("SelectedMessage") Is Nothing Then
                Session("SelectedMessage") = RadGrid1.SelectedValue.ToString
            End If
        End If
 
    End Sub
    Sub Deletemessage(ByVal sender As Object, ByVal e As EventArgs)
        m.Load(RadGrid1.SelectedValue)
        m.MarkForDeletion()
        Dim intpage As Integer
        intpage = RadGrid1.CurrentPageIndex
        RadGrid1.Rebind()
        RadGrid1.CurrentPageIndex = intpage
    End Sub
    Sub LoadMessage()
        Dim messageGuidIn As String
        Dim guidin As Guid
        Dim mv As DetailsView = DetailsView1
        Dim ds As DataSet
        If RadGrid1.Items.Count > 0 Then
            If Session("SelectedMessage") Is Nothing Then
                messageGuidIn = RadGrid1.SelectedValue.ToString
            Else
                messageGuidIn = Session("SelectedMessage").ToString
            End If
 
 
            guidin = New Guid(messageGuidIn)
            ds = Message.GetMessage(guidin)
            If ds.Tables.Count > 0 Then
                m.Load(guidin)
                If m.IsNew Then
                    m.ChangeIsNew()
                End If
            End If
            mv.DataSource = ds
            mv.DataBind()
        End If
    End Sub
    Protected Sub RadAjaxManager1_AjaxRequest(sender As Object, e As AjaxRequestEventArgs)
        Dim intpage As Integer
 
        intpage = RadGrid1.CurrentPageIndex
        RadGrid1.Rebind()
        RadGrid1.CurrentPageIndex = intpage
        LoadMessage()
 
    End Sub
 
 
End Class
Tags
Grid
Asked by
Bryan Hughes
Top achievements
Rank 1
Answers by
Kostadin
Telerik team
Bryan Hughes
Top achievements
Rank 1
Share this question
or