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

Drag and Drop not refreshing RadGrid on rebind()

3 Answers 142 Views
Grid
This is a migrated thread and some comments may be shown as answers.
brad
Top achievements
Rank 1
brad asked on 31 Jul 2011, 07:52 AM
I have a page with numerous grids for which drag and drop is enabled to reorder items within the grid.  One grid, which I've adapted the code from other working grids, will not refresh the grid on screen even though the codebehind correctly changes the underling data

Below are my *.aspx file and *.vb file -- I've pulled the problematic grid out into it's own file and it persists in misbehaving on its own as well.  I've about exhausted my creative ideas for solving the problem.

Any ideas?

Thanks,


Brad Smith





Imports System.Data.SqlClient
Imports Telerik.Web.UI
Imports dsMeetingDataDatasetTableAdapters
Imports dsMeetingDataDataset
Imports System.Data.Sql
 
Partial Class _admin_frmTest
    Inherits System.Web.UI.Page
    Dim myadapter As New PresentationsTableAdapter
 
 
    Protected Sub PAge_Load() Handles MyBase.Load
         
 
    End Sub
 
    Protected Sub rgInterests_itemcommand(ByVal sender As Object, ByVal e As GridCommandEventArgs)
        'gets grid item
        Dim index As Integer = Convert.ToInt32(e.CommandArgument)
        Dim item As GridDataItem = Me.rgInterests.Items(index)
 
        'gets Session interest ID
        Dim intSessIntID As Integer = Server.HtmlDecode(item("SessionInterestID").Text)
 
        Dim bllSI As New bllSessionsInterests
 
        Select Case e.CommandName
 
            Case "DeleteMe"
                'Me.lblDebug.Text = "Delete Sess Int ID: " & intSessParID
                bllSI.DeleteSessionInterest(intSessIntID)
                Me.rgInterests.DataBind()
 
        End Select
        bllSI = Nothing
 
 
 
    End Sub
 
    Protected Sub rgInterests_itemcreated(ByVal sender As Object, ByVal e As GridItemEventArgs)
        If e.Item.ItemType = GridItemType.AlternatingItem Or e.Item.ItemType = GridItemType.Item Then
            Dim item As GridDataItem
            item = e.Item
            Dim ibtn As ImageButton
 
            'does the delete
            ibtn = item("Delete").FindControl("ibtnDelete")
            ibtn.CommandArgument = e.Item.ItemIndex.ToString()
 
        End If
    End Sub
 
 
 
    Protected Sub rgInterests_itemdatabound(ByVal sender As Object, ByVal e As GridItemEventArgs)
 
        If TypeOf e.Item Is GridDataItem Then
 
            Dim dataItem As GridDataItem = CType(e.Item, GridDataItem)
            Dim button As ImageButton = dataItem("Delete").FindControl("ibtnDelete")
            button.Attributes.Add("onClick", "return confirm('Are you sure you want to remove this interest?');")
 
        End If
 
    End Sub
 
 
 
    Protected Sub rgInterests_RowDrop(ByVal sender As Object, ByVal e As GridDragDropEventArgs)
 
        If e.DestDataItem IsNot Nothing AndAlso e.DestDataItem.OwnerGridID = rgInterests.ClientID Then
            'reorder items in pending grid
            Dim destItem As Integer = e.DestDataItem.GetDataKeyValue("SessionInterestID")
            Dim destIndex As Integer = e.DestDataItem.ItemIndex
            Dim originItem As Integer = e.DraggedItems(0).GetDataKeyValue("SessionInterestID")
            Dim originIndex As Integer = e.DraggedItems(0).ItemIndex
 
            'do move
            Dim intSessionID = lblSessionID.Text
            Dim bllSessionsInterests As New bllSessionsParticipants
 
            'Me.lblDebug.Text = "Move Up for Session Par ID: " & intPresParID & " PresentationID: " & intPresentationID
            DoMove(originItem, destIndex + 1)
            DoMove(destItem, originIndex + 1)
            rgInterests.Rebind()
 
            e.DestDataItem.Selected = True
 
        End If
    End Sub
 
 
 
    Public Sub DoMove(ByVal intIDToMove As Integer, ByVal intOrderFieldValue As Integer)
 
        'loads constring from web.config
        Dim strConString As String = ConfigurationManager.ConnectionStrings("MeetingDataConnectionString").ConnectionString
        Dim conData As New SqlConnection(strConString)
 
        conData.Open()
 
        Dim strSQL As String
        strSQL = "Update Sessions_Interests set SessionInterestPriority=@neworder where SessionInterestID=@SessIntID;"
        Dim objCmd As New SqlCommand(strSQL, conData)
 
        Dim paramNewOrd As New SqlParameter("@neworder", Data.SqlDbType.Int)
        paramNewOrd.Value = intOrderFieldValue
        objCmd.Parameters.Add(paramNewOrd)
 
        Dim paramSessIntID As SqlParameter
        paramSessIntID = New SqlParameter("@SessIntID", Data.SqlDbType.Int)
        paramSessIntID.Value = intIDToMove
        objCmd.Parameters.Add(paramSessIntID)
 
        Response.Write(objCmd.ExecuteNonQuery())
        conData.Close()
        conData.Dispose()
 
        paramNewOrd = Nothing
        paramSessIntID = Nothing
        objCmd = Nothing
 
    End Sub
 
End Class










<%@ Page Language="VB" AutoEventWireup="false" CodeFile="frmTest.aspx.vb" Inherits="_admin_frmTest" %>
 
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head id="Head1" runat="server">
    <meta http-equiv="X-UA-Compatible" content="IE=8" />
    <title>Session form</title>
</head>
<telerik:RadCodeBlock ID="RadCodeBlock1" runat="server">
    <script type="text/javascript">
        function onInterestRowDropping(sender, args) {
            if (sender.get_id() == "<%=rgInterests.ClientID %>") {
                var node = args.get_destinationHtmlElement();
                if (!isChildOf('<%=rgInterests.ClientID %>', node) && !isChildOf('<%=rgInterests.ClientID %>', node)) {
                    args.set_cancel(true);
                }
            }
        }
 
        function isChildOf(parentId, element) {
            while (element) {
                if (element.id && element.id.indexOf(parentId) > -1) {
                    return true;
                }
                element = element.parentNode;
            }
            return false;
        }
    </script>
</telerik:RadCodeBlock>
<body class='darkforeclass'>
    <form id="form2" runat="server">
    <telerik:RadScriptManager ID="RadScriptManager1" runat="server">
    </telerik:RadScriptManager>
    <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server" EnableAJAX='True' >
        <AjaxSettings>
            <telerik:AjaxSetting AjaxControlID="rgInterests">
                <UpdatedControls>
                    <telerik:AjaxUpdatedControl ControlID="rgInterests" />
                </UpdatedControls>
            </telerik:AjaxSetting>
        </AjaxSettings>
    </telerik:RadAjaxManager>
    <telerik:RadGrid ID="rgInterests" runat="server" DataSourceID="sqlDSInterests" GridLines="None"
        OnItemCommand="rgInterests_itemcommand" OnItemCreated="rgInterests_itemcreated"
        AllowPaging='True' OnItemDataBound="rgInterests_itemdatabound" OnRowDrop="rgInterests_RowDrop"
        PagerStyle-AlwaysVisible="False" PageSize='4' Skin="Simple" Width="625px" Height='150px'
        AutoGenerateColumns="False">
        <ClientSettings AllowRowsDragDrop="True">
            <Selecting AllowRowSelect="True" EnableDragToSelectRows="False" />
            <ClientEvents OnRowDropping="onInterestRowDropping" />
        </ClientSettings>
        <PagerStyle Mode="NextPrevAndNumeric" />
        <MasterTableView DataKeyNames="SessionInterestID" Width="100%" GridLines="None">
            <NoRecordsTemplate>
                No Interests listed.</NoRecordsTemplate>
            <Columns>
                <telerik:GridBoundColumn DataField="SessionInterestID" DataType="System.Int32" HeaderText="SessionInterestID"
                    ReadOnly="True" SortExpression="SessionInterestID" UniqueName="SessionInterestID"
                    Visible='False'>
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn DataField="InterestID" DataType="System.Int32" HeaderText="InterestID"
                    SortExpression="InterestID" UniqueName="InterestID" Visible='False'>
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn DataField="SessionInterestPriority" DataType="System.Int32"
                    HeaderText="#" SortExpression="SessionInterestPriority" UniqueName="SessionInterestPriority"
                    Visible='True'>
                    <ItemStyle Width='20px' />
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn DataField="SessionID" DataType="System.Int32" HeaderText="SessionID"
                    SortExpression="SessionID" UniqueName="SessionID" Visible='False'>
                </telerik:GridBoundColumn>
                <telerik:GridTemplateColumn HeaderText="Interest" SortExpression="Interest" UniqueName="Interest">
                    <ItemTemplate>
                        <asp:Label ID="lblInterest" runat="server" CssClass='tinylinkclass'><%#Eval("Interest") %></asp:Label>
                    </ItemTemplate>
                    <HeaderStyle Width='550px' />
                    <ItemStyle HorizontalAlign='left' Width='550px' />
                    <FooterStyle Width="550px" />
                </telerik:GridTemplateColumn>
                <telerik:GridTemplateColumn UniqueName='Delete'>
                    <ItemTemplate>
                        <asp:ImageButton ID='ibtnDelete' runat='server' CommandName='DeleteMe' ImageUrl='images/trash.gif' /></td>
                    </ItemTemplate>
                </telerik:GridTemplateColumn>
            </Columns>
        </MasterTableView>
        <FilterMenu EnableTheming="True" Skin="Hay">
            <CollapseAnimation Duration="200" Type="OutQuint" />
        </FilterMenu>
    </telerik:RadGrid>
    <div class="buttonbarclass">
        <asp:LinkButton ID="btnAddSessionInterest" runat="server" CommandName="AddSessionInterest"
            CssClass="noultinylinkclass"><img style="border:0px;vertical-align:middle;" alt="" src="images/add16.png" />  Add Session Keyword</asp:LinkButton>
          
    </div>
    <telerik:RadWindow ID="rwSessionInterest" runat="server" Behaviors="Close, Move"
        Height="400px" Left="250px" Modal="true" NavigateUrl="" OffsetElementID="rwSessionInterest"
        OpenerElementID="<%#btnAddSessionInterest.clientid%>" ReloadOnShow="True" Title="New Session KW"
        Width="650px">
    </telerik:RadWindow>
    <asp:Label runat='server' ID='lblSessionID' Text='567'></asp:Label>
    <asp:TextBox ID="tbOrganizationName" runat="server" Visible="False"></asp:TextBox>
    <asp:TextBox ID="tbOrganizerID" runat="server" Visible="False"></asp:TextBox>
    <asp:Label runat='server' ID='lblSubmitterID' Visible='false'></asp:Label>
    <asp:SqlDataSource ID='sqldsInterests' runat='server' ConnectionString="<%$ ConnectionStrings:MeetingDataConnectionString %>"
        SelectCommand="SELECT Sessions_Interests.SessionInterestID, Sessions_Interests.SessionID, Sessions_Interests.InterestID, Sessions_Interests.SessionInterestPriority, b.interest FROM Sessions_Interests INNER JOIN Interests AS b ON Sessions_Interests.InterestID = b.InterestID WHERE Sessions_Interests.SessionID=@MySessionID ORDER BY Sessions_Interests.SessionInterestPriority">
        <SelectParameters>
            <asp:ControlParameter ControlID="lblSessionID" Name="MySessionID" PropertyName="Text" />
        </SelectParameters>
    </asp:SqlDataSource>
    </form>
</body>
</html>

3 Answers, 1 is accepted

Sort by
0
Tsvetina
Telerik team
answered on 04 Aug 2011, 12:10 PM
Hi Brad,

I could not spot out any obvious mistakes in your code. Have you tried temporarily turning AJAX off to see whether any exceptions are not covered by it? Also, have you confirmed that the SqlDataSource control used to fill the grid has refreshed its data when the grid is rebound?

Greetings,
Tsvetina
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
brad
Top achievements
Rank 1
answered on 05 Aug 2011, 02:41 PM
Thanks for the suggestions.  It works fine with Ajax turned off in my test page.  When I exempt that control from Ajax in the full page in my app, it does not work -- I can't afford to to turn off Ajax entirely there.

As to the other suggestion, I'm not sure how to check if the sqldatasource updates in isolation from the grid.

Brad
0
Tsvetina
Telerik team
answered on 10 Aug 2011, 04:17 PM
Hello Brad,

You could directly look into the database through SQL Server Management Studio and see whether the new order of items is applied to the table. If so, then we could try replicating the issue with a different database. If the table has not been updated, check if everything goes fine in your DoMove method.

All the best,
Tsvetina
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
brad
Top achievements
Rank 1
Answers by
Tsvetina
Telerik team
brad
Top achievements
Rank 1
Share this question
or