Grid will not show newly added items after dynamic rebind.

0 Answers 75 Views
Grid
Fred
Top achievements
Rank 2
Iron
Iron
Fred asked on 23 Oct 2023, 03:06 PM

I have RadGid using dynamic data binding to an SQL dataset. I'm also inserting items using a PostBack call from JavaScript.  The newly added items do not show on the grid after the rebind call. Paging and editing also no longer works without hiving refreshing the entire page.

Any help would be greatly appreciated. 

Grid Markup

 <telerik:RadAjaxLoadingPanel ID="rvpLoadingPanel" runat="server"></telerik:RadAjaxLoadingPanel>
                                    <telerik:RadAjaxPanel ID="rvpPanel" runat="server" LoadingPanelID="rvpLoadingPanel" ShowLoadingPanelForPostBackControls="true">
                                        <telerik:RadGrid ID="grdReviewPanel" runat="server" AutoGenerateColumns="false" CssClass="Gridheight4" Width="100%" AllowPaging="true" PagerStyle-AlwaysVisible="false" PageSize="4" Skin="Telerik">
                                            <ClientSettings>
                                                <Scrolling AllowScroll="true" UseStaticHeaders="true" />
                                            </ClientSettings>
                                            <MasterTableView DataKeyNames="Panel_Member_ID" CommandItemDisplay="Top" EditMode="InPlace" AllowAutomaticUpdates="false" AllowAutomaticInserts="false" CommandItemSettings-ShowRefreshButton="true" HeaderStyle-Font-Size="8pt" HeaderStyle-Font-Bold="true" ItemStyle-Font-Size="8pt">
                                                <CommandItemTemplate>
                                                    <asp:LinkButton ID="btnNew" runat="server" CssClass="w3-btn w3-flat-midnight-blue w3-small w3-round" OnClientClick="btnNew_OnClick(); return false" ToolTip="Add new review panel members.."><i class="fa-solid fa-user-plus"></i> New</asp:LinkButton>
                                                    <asp:LinkButton ID="btnGridReFresh" runat="server" CssClass="w3-btn w3-flat-midnight-blue w3-small w3-round w3-right" OnClientClick="RfeshtlGrid(); return false"><i class="fa-solid fa-refresh"></i> Refresh</asp:LinkButton>
                                                </CommandItemTemplate>
                                                <Columns>
                                                     <telerik:GridEditCommandColumn HeaderText="Edit" HeaderStyle-Width="65px"></telerik:GridEditCommandColumn>
                                                    <telerik:GridBoundColumn DataField="Panel_Member_ID" UniqueName="Panel_Member_ID" Display="false" ForceExtractValue="Always" DataType="System.String"></telerik:GridBoundColumn>
                                                    <telerik:GridBinaryImageColumn DataField="Employee_Photo" UniqueName="Employee_Photo" ImageAlign="Middle" ImageHeight="30px" ImageWidth="30px" HeaderText="Panel Member" ReadOnly="true"></telerik:GridBinaryImageColumn>
                                                    <telerik:GridBoundColumn DataField="Reviewer_Name" UniqueName="Reviewer_Name" HeaderText="Name" DataType="System.String" ReadOnly="true" ItemStyle-Font-Size="7pt"></telerik:GridBoundColumn>
                                                    <telerik:GridBoundColumn DataField="Title" UniqueName="Title" HeaderText="Title" DataType="System.String" ItemStyle-Font-Size="7pt" ItemStyle-CssClass="maximize"></telerik:GridBoundColumn>
                                                    <telerik:GridCheckBoxColumn DataField="Minutes_Member" UniqueName="Minutes_Member" HeaderText="Minutes Member" DataType="System.Boolean" HeaderStyle-Width="65px"></telerik:GridCheckBoxColumn>
                                                    <telerik:GridNumericColumn DataField="List_Order" UniqueName="List_Order" HeaderText="Display Order" DataType="System.Int32" ItemStyle-Font-Size="7pt"></telerik:GridNumericColumn>
                                                    <telerik:GridClientDeleteColumn ButtonCssClass="w3-flat-midnight-blue" ButtonType="FontIconButton" CommandName="Delete" UniqueName="Delete" HeaderStyle-Width="60px" ConfirmDialogType="RadWindow" ConfirmText="Are you sure you want to delete this item?" ConfirmTitle="Delete"></telerik:GridClientDeleteColumn>
                                                </Columns>
                                            </MasterTableView>
                                        </telerik:RadGrid>
                                    </telerik:RadAjaxPanel>

Client Scripts

 <script type="text/javascript">
  //<![CDATA[

  function btnNew_OnClick() {
  //This function displays the dropdown container for selecting 
  // and listing dropdown selections to be added to the grid.
   var pmcontainer = document.querySelector("#newpm");
   pmcontainer.style.display = 'block';
   }
   function RefreshGrid() {
       __doPostBack("<%=rvpPanel.ClientID%>", " ");
    }
    function btnAdd_onClick() {
     //Calls the SQL insert statment.
       var dataList = $find("<%=lstReviewers.ClientID%>");
       var rowcount = dataList._virtualItemCount;
       if (rowcount > 0) {
       PageMethods.AddReviewMembers(itemsAdded, itemsFailed);
     }
     function itemsAdded(response) {
     	//Calls postback method add items and refresh the grid.
     	__doPostBack("<%=rvpPanel.ClientID%>", "Insert");
     	var pmcontainer = document.querySelector("#newpm");
     	pmcontainer.style.display = 'none';
     }
     function itemsFailed(error) {
     	var message = error.get_message();
      	swal.fire({
                  title: 'ERROR!',
                  text: message,
                  icon: 'error'
                });
            }
      }

    //]]>
  </script>

Code Behind


 Private Sub AppealSettings_Load(sender As Object, e As EventArgs) Handles Me.Load
	If Not IsPostBack Then
            ClearReviewerInfo()
            RefreshReviewerList()
        Else
            Dim ctrlName As String = Page.Request.Params.[Get]("__EVENTTARGET")
            If ctrlName.Contains("listRvPanel") Then
                'Listview Panel.. 
                Dim strparameter As String = Page.Request("__EVENTARGUMENT")
                If strparameter = "Delete" Then
                    ClearReviewerInfo()
                Else
                    GetPanelMemberInfo(strparameter)
                End If
            ElseIf ctrlName.Contains("rvpPanel") Then
                'Grid Panel
                Dim insertParam As String = Page.Request("__EVENTARGUMENT")
                If insertParam = "Insert" Then
                    AddNewPanelMembers()
                Else
                    grdReviewPanel.Rebind()
                End If

            End If
        End If

End Sub
    Private Sub grdReviewPanel_NeedDataSource(Sender As Object, e As GridNeedDataSourceEventArgs) Handles grdReviewPanel.NeedDataSource
        grdReviewPanel.DataSource = ReviewPanelData()
End Sub

 Private Function ReviewPanelData(Optional ByVal Command As String = "", Optional ByVal strPanelMemberID As String = "",
                   Optional ByVal strTitle As String = "", Optional ByVal blnMinutesMem As Boolean = False, Optional ByVal intOrder As Integer = Nothing) As DataTable

        Dim strConn As String = ConfigurationManager.ConnectionStrings("UMDB").ToString
        Dim strSQL As String = ""
        Dim dt As DataTable = Nothing

        Try
            Select Case Command
                Case PerformInsertCommandName
                    strSQL = "EXEC dbo.usp_ins_tbl_Review_Panel_Members @Panel_Member_ID = " & SQL_Prepare_String(strPanelMemberID)
                    strSQL &= ", @Title = " & SQL_Prepare_String(strTitle)
                    strSQL &= ", @Minites_Member = " & SQL_Prepare_Boolean(blnMinutesMem)
                    strSQL &= ", @List_Order = " & SQL_Prepare_Number(intOrder)
                    ExecuteSQL(strSQL, strConn)
                    Return dt
                Case UpdateCommandName
                    strSQL = "EXEC dbo.usp_upd_tbl_Review_Panel_Members @Panel_Member_ID = " & SQL_Prepare_String(strPanelMemberID)
                    strSQL &= ", @Title = " & SQL_Prepare_String(strTitle)
                    strSQL &= ", @Minites_Member = " & SQL_Prepare_Boolean(blnMinutesMem)
                    strSQL &= ", @List_Order = " & SQL_Prepare_Number(intOrder)
                    ExecuteSQL(strSQL, strConn)
                    Return dt
                Case DeleteCommandName
                    strSQL = "DELETE FROM dbo.tbl_Appeal_Panel_Review_Members WHERE Panel_Member_ID = " & SQL_Prepare_String(strPanelMemberID)
                    ExecuteSQL(strSQL, strConn)
                    Return dt
                Case Else
                    strSQL = "EXEC dbo.usp_get_tbl_Review_Panel_Members"
                    Dim ds As DataSet = GetDataSet(strSQL, 30, strConn)
                    dt = ds.Tables(0)
                    Return dt
            End Select
        Catch ex As Exception
            Dim strErrorText As String
            Dim strErrSource As String
            strErrSource = ex.Source
            strErrorText = "<P>" & Replace(Replace(Replace(Replace(Replace(ex.Message, vbCrLf, "<br/>"), "'", ""), "&", ""), "<", ""), ">", "") & "</p>"
            'Console.Write(ex.Source & vbCrLf & ex.Message & vbCrLf & ex.StackTrace)
            ShowError(strErrorText, strErrSource)
            Return Nothing
        End Try
 End Function

Private Sub AddNewPanelMembers()
        'Get the items selected from the dropdown container stored in temp SQL table
        ' and insert them into the grid's datasource table. 
        Dim strConn As String = ConfigurationManager.ConnectionStrings("UMDB").ToString
        Dim strSQL As String = "SELECT * FROM dbo.tmp_Reviewer_Staging"
        Dim ds As DataSet = GetDataSet(strSQL, 20, strConn)
        Dim dt As DataTable = ds.Tables(0)
        PanelMemID = ""
        PMtitle = ""
        PMListOrder = 0
        Dim rowCount As Integer = dt.Rows.Count
        If rowCount > 0 Then
            With dt
                For i As Integer = 0 To .Rows.Count - 1
                    Dim strPanelMemberID As String = .Rows(i).Item("Employee_ID")
                    Dim strTitle As String = .Rows(i).Item("Job_Title")
                    Dim intOrder As Integer = .Rows(i).Item("List_Order")
                    ReviewPanelData("PerformInsert", strPanelMemberID, strTitle, False, intOrder)
                    grdReviewPanel.MasterTableView.IsItemInserted = True
                    ReviewPanelData()
                Next
            End With
            grdReviewPanel.Rebind() 'Refresh grid after data insert.
            ClearReviewerInfo()
            RefreshReviewerList()
           
        End If

  End Sub
 

Fred
Top achievements
Rank 2
Iron
Iron
commented on 23 Oct 2023, 04:59 PM

I believe I've resolved this issue. After setting the AllowAutomaticInserts property on the MasterTableView. Dynamic insert worked fine.  

No answers yet. Maybe you can help?

Tags
Grid
Asked by
Fred
Top achievements
Rank 2
Iron
Iron
Share this question
or