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

RadGrid not updating on client after update and rebind

1 Answer 526 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Dennis
Top achievements
Rank 1
Dennis asked on 27 Jan 2011, 01:17 PM
Hi,

I've got this page with a couple of RadComboBoxes, an asp TextBox, a RadCalendar, a RadGrid and 2 asp Buttons (Submit and Cancel). The idea is that the user can select categories from the comboboxes, enter a value in the textbox, select a date and press Submit to store the data and it will be shown in the radgrid below (together with older entries, based on the date selected in the calendar).

However, for some reason I can't get the RadGrid to update on the client. The data is stored and everything but it simply won't show. Refreshing the page _does_ update it, but so does pressing a  button again (such as edit, submit, or even changing the date on the calendar). What am I doing wrong?
I have the same problem with the Delete button, although the entry does get deleted, it is not reflected on the client.

My ASCX file:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ucTimesheet.ascx.cs" Inherits="PRIS.Timesheet.ucTimesheet" %>
<%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>
...

<
telerik:RadAjaxManagerProxy ID="ramAjaxManager" runat="server">
   <AjaxSettings>
      ...
      <telerik:AjaxSetting AjaxControlID="rdgTimeList">
         <UpdatedControls>
            <telerik:AjaxUpdatedControl ControlID="rdgTimeList" LoadingPanelID="pnlListLoading" />
         </UpdatedControls>
      </telerik:AjaxSetting>
      ...
      <telerik:AjaxSetting AjaxControlID="btnSubmit">
         <UpdatedControls>
            <telerik:AjaxUpdatedControl ControlID="pnlTimeSheet" LoadingPanelID="pnlListLoading" />
            <telerik:AjaxUpdatedControl ControlID="pnlForm" />
         </UpdatedControls>
      </telerik:AjaxSetting>
      <telerik:AjaxSetting AjaxControlID="btnCancel">
         <UpdatedControls>
            <telerik:AjaxUpdatedControl ControlID="pnlTimeSheet" LoadingPanelID="pnlListLoading" />
            <telerik:AjaxUpdatedControl ControlID="pnlForm" />
         </UpdatedControls>
      </telerik:AjaxSetting>
   </AjaxSettings>
</telerik:RadAjaxManagerProxy>
<asp:Panel runat="server" ID="pnlForm">
   ...
   <asp:Button ID="btnSubmit" runat="server" Text="Boek" CssClass="Button_Pris" TabIndex="6" OnClick="btnSubmit_Click" />
   ...
   <asp:Button ID="btnCancel" runat="server" Text="Cancel" CssClass="Button_Pris" TabIndex="7" OnClick="btnCancel_Click" />
   ...
</asp:Panel>
<asp:Panel runat="server" ID="pnlTimeSheet">
   <telerik:RadGrid ID="rdgTimeList"
             runat="server"
             AutoGenerateColumns="false"
             OnNeedDataSource="rdgTimeList_NeedDataSource"
             OnItemDataBound="rdgTimeList_ItemDataBound"
             OnItemCreated="rdgTimeList_ItemCreated"
             ShowFooter="true">
   <MasterTableView>
      <Columns>
         <telerik:GridTemplateColumn>
            <HeaderStyle Width="22px" />
            <ItemTemplate>
               <asp:ImageButton ID="btnEdit" runat="server" ImageUrl="~/DesktopModules/PRIS.Common/Images/icn_pencil.gif" OnCommand="btnEdit_Click" CommandName="id" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "pkid").ToString()%>' />
            </ItemTemplate>
         </telerik:GridTemplateColumn>
         <telerik:GridTemplateColumn>
            <HeaderStyle Width="22px" />
            <ItemTemplate>
               <asp:ImageButton ID="btnDelete" runat="server" ImageUrl="~/DesktopModules/PRIS.Common/Images/icn_delete.gif" OnCommand="btnDelete_Click" CommandName="id" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "pkid").ToString()%>' OnClientClick="if(!confirm('Weet u het zeker?')){return false;}" />
            </ItemTemplate>
         </telerik:GridTemplateColumn>
         ...
      </Columns>
   </MasterTableView>
</telerik:RadGrid>
...
</asp:Panel>

My CS file:
protected void rdgTimeList_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
   ...
 
   int liEmployeeId = (!String.IsNullOrEmpty(ddlEmployee.SelectedValue)) ? Convert.ToInt32(ddlEmployee.SelectedValue) : -1;
   rdgTimeList.DataSource = PRIS.SP.SpCacheUrenVanMedewerker(liEmployeeId, StartDate, EndDate, MaatschappijId).GetDataSet();
 
   ...
}
 
protected void btnSubmit_Click(object sender, EventArgs e)
{
   SaveForm();
   rdgTimeList.Rebind();
}
 
protected void btnCancel_Click(object sender, EventArgs e)
{
   ClearForm();
}
 
protected void SaveForm()
{
   ...
 
   PAtblUur loUur = null;
   string lsProject = ddlProject.SelectedValue;
   string lsDeliverable = ddlDeliverable.SelectedValue;
   string lsActivity = ddlActivity.SelectedValue;
   bool saved = false;
   if (objCalendar.SelectedDates.Count == 1)
   {
      loUur = TimeObject;
 
      loUur.CBMaatschappijID = MaatschappijId;
      loUur.FKActiviteitID = this.SaveActivity();
      loUur.FKPersoonRelatieID = (!String.IsNullOrEmpty(ddlEmployee.SelectedValue)) ? Convert.ToInt16(ddlEmployee.SelectedValue) : -1;
      loUur.DatumBezetting = objCalendar.SelectedDates[0].Date;
      loUur.UrenBesteed = (!String.IsNullOrEmpty(txtHours.Text)) ? Convert.ToDecimal(txtHours.Text) : 0;
 
      try
      {
         loUur.Save();
         saved = true;
      }
      catch
      {
         ErrorManager.Errors = loUur.Errors;
         ErrorManager.LoadErrors();
      }
   }
   else
   {
      ...
   }
 
   if (saved)
   {
      ClearForm(false);
   }
 
   ...
}
 
private void ClearForm() { ClearForm(true); }
private void ClearForm(bool pbClearDate)
{
   // Clear message label
   lblMessage.Text = "";
 
   // Get the current user's id
   int liEmployeeId = (!String.IsNullOrEmpty(ddlEmployee.SelectedValue)) ? Convert.ToInt32(ddlEmployee.SelectedValue) : -1;
 
   // Reload Employee combobox
   ddlEmployee_UpdateDataBind(liEmployeeId);
 
   // Reload Project combobox
   ddlProject_UpdateDataBind(liEmployeeId);
 
   // Clear Deliverable combobox
   ddlDeliverable.Text = "";
   ddlDeliverable.Items.Clear();
   ddlDeliverable.SelectedValue = "";
   ddlDeliverable.SelectedIndex = 0;
 
   // Clear Activity combobox
   ddlActivity.Text = "";
   ddlActivity.Items.Clear();
   ddlActivity.SelectedValue = "";
   ddlActivity.SelectedIndex = 0;
 
   // Clear Hours textbox
   txtHours.Text = "";
   hfTimeId.Value = "-1";
 
   // Clear the selected dates
   if (pbClearDate)
   {
      objCalendar.SelectedDates.Clear();
      objCalendar.SelectedDate = System.DateTime.Now;
   }
 
   // Rebind RadGrid
   rdgTimeList.Rebind();
 
   if (ErrorManager.Errors.Count == 0)
   {
      ErrorManager.HideErrors();
   }
}

Do note that the triple periods (...) in the code mean I omitted some code there for readability.

Any help would be appreciated,

- Dennis


EDIT: In case you're wondering: the dropdownlist UpdateDataBind functions simply set the DataTextField, DataValueField, assign a new DataSet to DataSource and trigger the DataBind function.

1 Answer, 1 is accepted

Sort by
0
Dennis
Top achievements
Rank 1
answered on 28 Jan 2011, 10:37 AM
Ok, this thread can be closed, I feel stupid now...

The reason it didn't work was because even though I was rebinding the grid just fine, I forgot to set the data source again. Then when I clicked something else the NeedDataSource event fired and updated it correctly. Now I just set the DataSource to null before rebinding and it works fine :-)
Tags
Grid
Asked by
Dennis
Top achievements
Rank 1
Answers by
Dennis
Top achievements
Rank 1
Share this question
or