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
I believe I've resolved this issue. After setting the AllowAutomaticInserts property on the MasterTableView. Dynamic insert worked fine.