or
<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server"> <AjaxSettings> <telerik:AjaxSetting AjaxControlID="gridResult"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="gridResult" /> <telerik:AjaxUpdatedControl ControlID="lblGewerkt" /> <telerik:AjaxUpdatedControl ControlID="lblZiek" /> <telerik:AjaxUpdatedControl ControlID="lblMutatie" /> <telerik:AjaxUpdatedControl ControlID="txtVakantie" /> <telerik:AjaxUpdatedControl ControlID="txtZiek" /> <telerik:AjaxUpdatedControl ControlID="txtOveruren" /> <telerik:AjaxUpdatedControl ControlID="txtHoursheetsLocal" /> <telerik:AjaxUpdatedControl ControlID="rdpDate" /> </UpdatedControls> </telerik:AjaxSetting> <telerik:AjaxSetting AjaxControlID="rdpDate"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="gridResult" /> <telerik:AjaxUpdatedControl ControlID="lblGewerkt" /> <telerik:AjaxUpdatedControl ControlID="lblZiek" /> <telerik:AjaxUpdatedControl ControlID="lblMutatie" /> <telerik:AjaxUpdatedControl ControlID="txtVakantie" /> <telerik:AjaxUpdatedControl ControlID="txtZiek" /> <telerik:AjaxUpdatedControl ControlID="txtOveruren" /> <telerik:AjaxUpdatedControl ControlID="lblWeek" /> <telerik:AjaxUpdatedControl ControlID="lblDag" /> <telerik:AjaxUpdatedControl ControlID="lblBlocked" /> </UpdatedControls> </telerik:AjaxSetting> <telerik:AjaxSetting AjaxControlID="cmbProjects"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="gridResult" /> </UpdatedControls> </telerik:AjaxSetting> </AjaxSettings> </telerik:RadAjaxManager> <!-- /RadAjaxManager --> <!-- daysheet !--> <table width="100%" class="ShowValueTable"> <tr> <td class="contents"> <telerik:RadDatePicker runat="server" ID="rdpDate" DateInput-DateFormat="dd-MM-yyyy" Culture="nl-NL" OnSelectedDateChanged="rdpDate_SelectedDateChanged" Enabled="true"> <DatePopupButton runat="server" /> <Calendar ID="Calendar1" runat="server" /> <DateInput ID="DateInput1" runat="server" AutoPostBack="true" DateFormat="dd-MM-yyyy" DisplayDateFormat="dd-MM-yyyy"> <IncrementSettings InterceptMouseWheel="false" /> </DateInput> </telerik:RadDatePicker> <asp:Label runat="server" ID="lblWeek" /> </td> <td class="label"> Vakantie: </td> <td class="contents"> <asp:LinkButton runat="server" CausesValidation="false" ID="txtVakantie" OnClientClick="openWindowMutation"></asp:LinkButton> </td> <td class="label"> Contract: </td> <td class="contents"> <asp:Label runat="server" ID="lblContract" /> </td> </tr> <tr> <td class="contents" rowspan="2" style="text-align: center; font-size: 14pt;"> <asp:Label runat="server" ID="lblDag" /> <asp:Label runat="server" ID="lblBlocked" Font-Size="10pt" Style="color: Red;" /> </td> <td class="label"> Ziek: </td> <td class="contents"> <asp:LinkButton runat="server" CausesValidation="false" ID="txtZiek" OnClientClick="openWindowMutation"></asp:LinkButton> </td> <td class="label"> Gewerkt: </td> <td class="contents"> <asp:Label runat="server" ID="lblGewerkt" /> </td> </tr> <tr> <td class="label"> Overuren: </td> <td class="label"> <asp:LinkButton runat="server" CausesValidation="false" ID="txtOveruren" OnClientClick="openWindowMutation"></asp:LinkButton> </td> <td class="label"> Mutatie: </td> <td class="contents"> <asp:Label runat="server" ID="lblMutatie" /> <asp:Label runat="server" ID="lblMaxZiek" Style="display: none;" /> </td> </tr> </table> <!-- /daysheet !--> <br /> <br /> <!-- hoursheet !--> <telerik:RadGrid runat="server" ID="gridResult" AutoGenerateColumns="False" OnItemDataBound="gridResult_ItemDataBound" OnUpdateCommand="gridResult_UpdateCommand" OnDeleteCommand="gridResult_DeleteCommand" OnInsertCommand="gridResult_InsertCommand" OnNeedDataSource="gridResult_NeedDataSource" OnItemCommand="gridResult_ItemCommand" EnableViewState="true"> <MasterTableView TableLayout="Fixed" DataKeyNames="OID" EditMode="InPlace" CommandItemDisplay="Top" InsertItemDisplay="Bottom" NoMasterRecordsText="Geen taken om weer te geven"> <CommandItemSettings AddNewRecordText="Nieuwe taak toevoegen" ShowRefreshButton="false" /> <SortExpressions> <telerik:GridSortExpression FieldName="Starttijd" SortOrder="Ascending" /> </SortExpressions> <Columns> <telerik:GridEditCommandColumn ButtonType="ImageButton" UniqueName="EditCommandColumn"> <ItemStyle CssClass="MyImageButton" VerticalAlign="Top" /> <HeaderStyle Width="5%"></HeaderStyle> </telerik:GridEditCommandColumn> <telerik:GridBoundColumn UniqueName="OID" DataField="OID" HeaderText="OID" Visible="false" /> <telerik:GridTemplateColumn HeaderText="Starttijd" UniqueName="Starttijd" AllowFiltering="false" HeaderStyle-Width="10%" ItemStyle-VerticalAlign="Top"> <ItemTemplate> <asp:Label ID="lblStartTijd" Text='<%# bind("Starttijd") %>' runat="server" /> </ItemTemplate> <EditItemTemplate> <telerik:RadMaskedTextBox runat="server" SelectionOnFocus="SelectAll" ID="txtStarttijd" Text='<%# bind("Starttijd") %>' Mask="<0..23>:<0..59>" Width="85%"> <ClientEvents OnBlur="BlurStarttijd" OnLoad="InitStarttijd" /> </telerik:RadMaskedTextBox> </EditItemTemplate> <InsertItemTemplate> <telerik:RadMaskedTextBox runat="server" SelectionOnFocus="SelectAll" ID="txtStarttijd" Text='<%# bind("TempStartTime") %>' Mask="<0..23>:<0..59>" Width="85%"> <ClientEvents OnBlur="BlurStarttijd" OnLoad="InitStarttijd" /> </telerik:RadMaskedTextBox> </InsertItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn HeaderText="Eindtijd" UniqueName="Eindtijd" AllowFiltering="false" HeaderStyle-Width="10%" ItemStyle-VerticalAlign="Top"> <ItemTemplate> <asp:Label ID="lblEindTijd" Text='<%# bind("Eindtijd") %>' runat="server" /> </ItemTemplate> <EditItemTemplate> <telerik:RadMaskedTextBox runat="server" ID="txtEindtijd" Text='<%# bind("Eindtijd") %>' Mask="<0..23>:<0..59>" Width="85%"> <ClientEvents OnBlur="BlurEindtijd" OnLoad="InitEindtijd" /> </telerik:RadMaskedTextBox> <asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="Starttijd mag niet plaatsvinden na eindtijd" Text="*" ClientValidationFunction="compareTime" ControlToValidate="txtEindtijd" SetFocusOnError="true"></asp:CustomValidator> <asp:CustomValidator ID="CustomValidator2" runat="server" ErrorMessage="Er mag geen overlap plaatsvinden tussen een of meerdere ingevoerde taken" Text="*" ClientValidationFunction="checkForOverlap" ControlToValidate="txtEindtijd" SetFocusOnError="true"></asp:CustomValidator> </EditItemTemplate> <InsertItemTemplate> <telerik:RadMaskedTextBox runat="server" ID="txtEindtijd" Text='<%# bind("TempEndTime") %>' Mask="<0..23>:<0..59>" Width="85%"> <ClientEvents OnBlur="BlurEindtijd" OnLoad="InitEindtijd" /> </telerik:RadMaskedTextBox> <asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="Starttijd mag niet plaatsvinden na eindtijd" Text="*" ClientValidationFunction="compareTime" ControlToValidate="txtEindtijd" SetFocusOnError="true"></asp:CustomValidator> <asp:CustomValidator ID="CustomValidator2" runat="server" ErrorMessage="Er mag geen overlap plaatsvinden tussen een of meerdere ingevoerde taken" Text="*" ClientValidationFunction="checkForOverlap" ControlToValidate="txtEindtijd" SetFocusOnError="true"></asp:CustomValidator> </InsertItemTemplate> </telerik:GridTemplateColumn> <telerik:GridDropDownColumn DropDownControlType="RadComboBox"></telerik:GridDropDownColumn> <telerik:GridTemplateColumn HeaderText="Project" UniqueName="Project" AllowFiltering="false" HeaderStyle-Width="25%" ItemStyle-VerticalAlign="Top"> <ItemTemplate> <asp:Label ID="lblProject" Text='<%# bind("ProjectNaam") %>' runat="server" /> </ItemTemplate> <EditItemTemplate> <telerik:RadComboBox ID="cmbProjects" MarkFirstMatch="true" AllowCustomText="true" DataSource="<%# getProjects() %>" DataTextField="Naam" DataValueField="ProjectNumber" runat="server" SelectedValue='<%# Eval("ProjectID") %>' OnDataBound="cmbProject_Edit_DataBound" OnSelectedIndexChanged="cmbProject_SelectedIndexChanged" OnTextChanged="cmbProject_TextChanged" AutoPostBack="true" CausesValidation="false" Width="75%" /> <asp:RequiredFieldValidator ID="ProjectValidator2" runat="server" ControlToValidate="cmbProjects" Text="*" ErrorMessage="Project moet ingevuld worden" SetFocusOnError="true" /> </EditItemTemplate> <InsertItemTemplate> <telerik:RadComboBox ID="cmbProjects" MarkFirstMatch="true" AllowCustomText="true" DataSource="<%# getProjects() %>" DataTextField="Naam" DataValueField="ProjectNumber" runat="server" SelectedValue='<%# Eval("ProjectID") %>' OnDataBound="cmbProject_Insert_DataBound" OnSelectedIndexChanged="cmbProject_SelectedIndexChanged" OnTextChanged="cmbProject_TextChanged" AutoPostBack="true" CausesValidation="false" Width="75%" /> <asp:RequiredFieldValidator ID="ProjectValidator2" runat="server" ControlToValidate="cmbProjects" Text="*" ErrorMessage="Project moet ingevuld worden" SetFocusOnError="true" /> </InsertItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn HeaderText="Deelproject" UniqueName="Project" AllowFiltering="false" HeaderStyle-Width="25%" ItemStyle-VerticalAlign="Top"> <ItemTemplate> <asp:Label ID="lblSubProject" Text='<%# bind("SubProjectNaam") %>' runat="server" /> </ItemTemplate> <EditItemTemplate> <telerik:RadComboBox ID="cmbSubProjects" MarkFirstMatch="true" AllowCustomText="true" OnTextChanged="cmbSubProject_TextChanged" AutoPostBack="true" CausesValidation="false" runat="server" Width="75%" /> <asp:RequiredFieldValidator ID="SubProjectValidator2" runat="server" ControlToValidate="cmbSubProjects" Text="*" ErrorMessage="Subproject moet ingevuld worden" /> </EditItemTemplate> <InsertItemTemplate> <telerik:RadComboBox ID="cmbSubProjects" MarkFirstMatch="true" AllowCustomText="true" OnTextChanged="cmbSubProject_TextChanged" AutoPostBack="true" CausesValidation="false" runat="server" Width="75%" /> <asp:RequiredFieldValidator ID="SubProjectValidator2" runat="server" ControlToValidate="cmbSubProjects" Text="*" ErrorMessage="Subproject moet ingevuld worden" /> </InsertItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn HeaderText="Omschrijving" UniqueName="Omschrijving" AllowFiltering="false" HeaderStyle-Width="20%" ItemStyle-VerticalAlign="Top"> <ItemTemplate> <asp:Label ID="lblOmschrijving" Text='<%# bind("Omschrijving") %>' runat="server" /> </ItemTemplate> <EditItemTemplate> <telerik:RadTextBox runat="server" ID="txtOmschrijving" Text='<%# bind("Omschrijving") %>' TextMode="MultiLine" Width="80%" SelectionOnFocus="SelectAll" /> <asp:RequiredFieldValidator ID="omschrijvingValidator" runat="server" ControlToValidate="txtOmschrijving" Text="*" ErrorMessage="Omschrijving moet ingevuld worden" /> </EditItemTemplate> </telerik:GridTemplateColumn> <telerik:GridButtonColumn ButtonType="ImageButton" CommandName="Delete" UniqueName="DeleteCommandColumn" ConfirmDialogType="RadWindow" ConfirmText="Weet u zeker dat u deze taak wilt verwijderen?"> <HeaderStyle Width="5%"></HeaderStyle> <ItemStyle CssClass="MyImageButton" VerticalAlign="Top" /> </telerik:GridButtonColumn> </Columns> </MasterTableView> </telerik:RadGrid> <telerik:GridMaskedColumnEditor ID="GridMaskedColumnEditor1" runat="server" /> <telerik:GridTextBoxColumnEditor ID="GridTextBoxColumnEditor1" runat="server" TextBoxMode="MultiLine" /> <telerik:GridDropDownListColumnEditor ID="GridDropDownListColumnEditor1" runat="server" /> <!-- /hoursheet --> <!-- RadWindow --> <telerik:RadWindow runat="server" ID="windowMutation" Width="375" Height="375" OnClientClose="windowClose" NavigateUrl="AlgemeneUrenInvoer.aspx" Title="Algemene uren bewerken" VisibleStatusbar="false"> </telerik:RadWindow> <!-- /RadWindow --> <!-- hidden buttons (used to force save/add) --> <asp:Button ID="btnAdd" runat="server" Style="display: none" CausesValidation="false" OnClick="AddButton_Click" /> <asp:Button ID="btnSave" runat="server" Style="display: none" OnClick="SaveButton_Click" /> <asp:Button ID="btnSubmit" Style="display: none" CausesValidation="true" runat="server" /> <!-- / hidden buttons --> <!-- hidden fields (used for validation) --> <asp:TextBox runat="server" ID="txtGewerktMin" Style="display: none"></asp:TextBox> <asp:TextBox runat="server" ID="txtZiekteMin" Style="display: none"></asp:TextBox> <asp:TextBox runat="server" ID="txtHoursheetsLocal" Style="display: none"></asp:TextBox> <input type="hidden" id="txtStart" /> <input type="hidden" id="txtEind" /> <!-- / hidden fields --> <!-- ValidationSummary --> <asp:ValidationSummary runat="server" ID="vsum" ShowSummary="false" ShowMessageBox="true" HeaderText="Opslaan is mislukt door de volgende fouten:"></asp:ValidationSummary> <!-- / ValidationSummary -->using System;using System.Linq;using System.Collections.Generic;using UrenCockpit.Business;using UrenCockpit.Process;using System.Web.UI;using System.Web.UI.WebControls;using System.Web;using System.Drawing;using Telerik.Web.UI;using UrenCockpit.Model;using System.Collections.Specialized;using System.Web.Script.Serialization;namespace UrenCockpit.View.Hours{ public partial class UrenInvoer2 : PageExtender { private DateTime _date; private User _user; private const string controlOID = "OID"; private const string controlProject = "cmbProjects"; private const string controlSubProjects = "cmbSubProjects"; private const string controlOmschrijving = "txtOmschrijving"; private const string controlStarttijd = "txtStarttijd"; private const string controlEindtijd = "txtEindtijd"; private const string fieldStarttijd = "Starttijd"; private const string fieldEindtijd = "Eindtijd"; private const string fieldTempStarttijd = "TempStartTime"; private const string fieldTempEindtijd = "TempEndTime"; private const string fieldOmschrijving = "Omschrijving"; private const string fieldSubproject = "Subproject"; private const string fieldProject = "ProjectID"; private const string commandEdit = "EditCommandColumn"; private const string commandDelete = "DeleteCommandColumn"; private const string commandInsert = "InitInsertButton"; protected void Page_Load(object sender, EventArgs e) { if (rdpDate.SelectedDate == null) { if (Session["selectedDate"] != null) { rdpDate.SelectedDate = (DateTime)Session["selectedDate"]; } else { rdpDate.SelectedDate = DateTime.Now; } } _date = rdpDate.SelectedDate.Value; _user = UserInfo.instance.User; if (!IsPostBack) { initForm(); InitialiseDaysheet(); } txtZiek.Attributes.Add("onclick", "openWindowMutation()"); txtVakantie.Attributes.Add("onclick", "openWindowMutation()"); txtOveruren.Attributes.Add("onclick", "openWindowMutation()"); } // Initialise the min and maxvalues for the datepicker control private void initForm() { rdpDate.MaxDate = DateTime.Now; if (_user.pdx_employ_obj.InDienstSinds.HasValue) { rdpDate.MinDate = _user.pdx_employ_obj.InDienstSinds.Value; } else { rdpDate.MinDate = rdpDate.MaxDate; } Session["selectedDate"] = rdpDate.SelectedDate.Value; Daysheet daysheet = Daysheet.getDaysheet(_user.pdx_employ_obj, _date); txtGewerktMin.Text = Utility.minutesToHours(daysheet.NormaleMinuten - daysheet.GewerkteMinuten); } // (Re-)Initialise Daysheet section with values from database private void InitialiseDaysheet() { Daysheet daysheet = Daysheet.getDaysheet(_user.pdx_employ_obj, _date); if (daysheet != null) { short contract = daysheet.NormaleMinuten; short gewerkt = daysheet.GewerkteMinuten; short vakantie = daysheet.VakantieMinuten; short ziek = daysheet.ZiekteMinuten; short overwerk = daysheet.OverMinuten; int mutatie = (gewerkt + vakantie + ziek + overwerk) - contract; SetDaySheetFields(contract, gewerkt, vakantie, ziek, overwerk, mutatie); } } // Set the fields in the Daysheet section private void SetDaySheetFields(short contract, short gewerkt, short vakantie, short ziek, short overwerk, int mutatie) { lblWeek.Text = "Week: " + Utility.getWeekNumber(_date).ToString(); lblDag.Text = Utility.getWeekday(_date.DayOfWeek, false); lblBlocked.Text = hoursConfirmed() ? "<br>bevestigd" : ""; lblContract.Text = Utility.minutesToHours(contract); txtVakantie.Text = Utility.minutesToHours(vakantie); txtZiek.Text = Utility.minutesToHours(ziek); txtOveruren.Text = Utility.minutesToHours(overwerk); lblGewerkt.Text = Utility.minutesToHours(gewerkt); lblMutatie.ForeColor = (mutatie < 0) ? Color.Red : Color.Green; lblMutatie.Text = Utility.minutesToHours(mutatie); lblMaxZiek.Text = Utility.minutesToHours(contract - gewerkt); } // Update current Daysheet values with entered data private void UpdateDaysheet() { Daysheet daysheet = Daysheet.getDaysheet(_user.pdx_employ_obj, _date); short totaalMinuten = CalculateTotalMinutesHoursheet(); daysheet.GewerkteMinuten = totaalMinuten; daysheet.VakantieMinuten = (short)Utility.hourstringToMinutes(txtVakantie.Text); daysheet.ZiekteMinuten = (short)Utility.hourstringToMinutes(txtZiek.Text); daysheet.OverMinuten = (short)Utility.hourstringToMinutes(txtOveruren.Text); txtGewerktMin.Text = Utility.minutesToHours(daysheet.NormaleMinuten - daysheet.GewerkteMinuten); daysheet.Save(); InitialiseDaysheet(); } // Calculate the total minutes value of all the hoursheet rows for this day private short CalculateTotalMinutesHoursheet() { short totaalMinuten = 0; foreach (Hoursheet hs in getHourDetails()) { totaalMinuten += hs.Minuten; } return totaalMinuten; } // Fill projects combobox and set selection if selected is provided private void fillProjects(pdx_Subproject selected, RadComboBox rcbProjects) { rcbProjects.Items.Clear(); foreach (pdx_Project project in getProjects()) { RadComboBoxItem item = new RadComboBoxItem(); item.Value = project.ProjectNumber.ToString(); item.Text = project.Naam; rcbProjects.Items.Add(item); } if (selected != null) { rcbProjects.SelectedValue = selected.pdx_Project.ProjectNumber.ToString(); } } // Fill projects combobox without setting a selection private void fillProjects(RadComboBox rcbProjects) { fillProjects(null, rcbProjects); } // Fill subprojects combobox and set selection if selected is provided private void fillSubProjects(pdx_Project proj, pdx_Subproject selected, RadComboBox comboBox) { IEnumerable<pdx_Subproject> subprojects = proj.pdx_Subprojects.Where(s => s.SubAfgesloten == false); comboBox.Items.Clear(); foreach (pdx_Subproject subproject in subprojects) { RadComboBoxItem item = new RadComboBoxItem(); item.Value = subproject.SubNumber.ToString(); item.Text = subproject.SubNaam; comboBox.Items.Add(item); } if (selected != null) { comboBox.SelectedValue = selected.SubNumber.ToString(); } } // Fill subprojects combobox based on the first project item for a user private void fillSubProjects(RadComboBox comboBox) { IQueryable<pdx_Project> projects = getProjects(); fillSubProjects(projects.FirstOrDefault(), null, comboBox); } // Return the value of any item based by their fieldname private string getGridItemValue(string fieldName, GridEditableItem dataItem) { if (dataItem[fieldName].Controls.Count > 0) { Control control = dataItem[fieldName].Controls[0]; if (control is TextBox) return ((TextBox)control).Text; else if (control is RadMaskedTextBox) return ((RadMaskedTextBox)control).Text; else if (control is RadComboBox) return ((RadComboBox)control).SelectedValue; else return ""; } else { return dataItem[fieldName].Text; } } // Call function to check for breaks and if there are any, add them to a collection private List<BreakSheet> checkForBreaks(IEnumerable<CustomHourSheet> hoursheets) { int diff = 0; List<BreakSheet> breaks = new List<BreakSheet>(); for (int i = 1; i < hoursheets.Count(); i++) { string starttijd = hoursheets.ElementAt(i).Starttijd; string eindtijdvorige = hoursheets.ElementAt(i - 1).Eindtijd; DateTime dt1 = new DateTime(2011, 12, 31, Convert.ToInt32(eindtijdvorige.Substring(0, 2)), Convert.ToInt32(eindtijdvorige.Substring(3, 2)), 0); DateTime dt2 = new DateTime(2011, 12, 31, Convert.ToInt32(starttijd.Substring(0, 2)), Convert.ToInt32(starttijd.Substring(3, 2)), 0); diff = dt2.Subtract(dt1).Minutes; if (diff > 0) { BreakSheet breakSheet = new BreakSheet() { StartTijd = starttijd, EindTijd = eindtijdvorige, Duur = diff }; breaks.Add(breakSheet); } } if (breaks.Count > 0) { return breaks; } return null; } private void DisableEditDisplayForAllRows() { GridDataItemCollection items = gridResult.Items; foreach (GridEditableItem gi in items) { gi[commandDelete].Text = ""; gi[commandEdit].Text = ""; } } private void DisableEditDisplay(GridItemEventArgs e) { GridDataItem gridItem = (GridDataItem)e.Item; gridItem[commandEdit].Text = ""; gridItem[commandDelete].Text = ""; } #region Custom CRUD actions private void DoDelete(GridEditableItem gridEditableItem) { Hoursheet hs = Hoursheet.Retrieve(getGridItemValue(controlOID, gridEditableItem)); hs.Delete(); UpdateDaysheet(); } private void DoInsert(GridEditableItem gridEditableItem) { Hoursheet hs = new Hoursheet(); if (AddOrUpdate(gridEditableItem, hs)) { Hoursheet.Insert(hs, null); UpdateDaysheet(); } } private void DoUpdate(GridEditableItem gridEditableItem) { Hoursheet hs = Hoursheet.Retrieve(getGridItemValue(controlOID, gridEditableItem)); if (AddOrUpdate(gridEditableItem, hs)) { hs.Save(); UpdateDaysheet(); } } private bool AddOrUpdate(GridEditableItem gridEditableItem, Hoursheet hs) { //Add correct date to ensure no default date is taken bool canSave; string date = rdpDate.SelectedDate.Value.ToString("yyyy-MM-dd"); RadMaskedTextBox starttijd = gridEditableItem.FindControl(controlStarttijd) as RadMaskedTextBox; string start = starttijd.TextWithPromptAndLiterals; RadMaskedTextBox eindtijd = gridEditableItem.FindControl(controlEindtijd) as RadMaskedTextBox; string eind = eindtijd.TextWithPromptAndLiterals; hs.Datum = rdpDate.SelectedDate.Value; hs.Starttijd = DateTime.Parse(date + " " + start); hs.Eindtijd = DateTime.Parse(date + " " + eind); hs.PerNumber = _user.pdx_employ_obj.PerNumber; TimeSpan diff = hs.Eindtijd - hs.Starttijd; hs.Minuten = (short)diff.TotalMinutes; RadComboBox cmbProjects = gridEditableItem.FindControl(controlProject) as RadComboBox; RadComboBox cmbSubProjects = gridEditableItem.FindControl(controlSubProjects) as RadComboBox; string project = cmbProjects.SelectedValue; string subProject = cmbSubProjects.SelectedValue; if (subProject.IsNullOrEmpty()) { hs.SubProject = null; canSave = false; } else { hs.SubProject = long.Parse(subProject); canSave = true; } RadTextBox omschrijving = gridEditableItem.FindControl(controlOmschrijving) as RadTextBox; hs.Omschrijving = omschrijving.Text; rdpDate.Enabled = true; return canSave; } #endregion #region Custom Events // Force "add new record" to show, this simulates pressing the "+" button protected void AddButton_Click(object sender, EventArgs e) { ListDictionary newValues = generateEmptyRow(); gridResult.MasterTableView.InsertItem(newValues); gridResult.MasterTableView.IsItemInserted = true; gridResult.Rebind(); GridEditableItem gridItem = (GridEditableItem)gridResult.MasterTableView.GetInsertItem(); gridItem.FindControl(controlStarttijd).Focus(); rdpDate.Enabled = false; } // Generates an empty row that's used to fill with data for a new row later on private System.Collections.Specialized.ListDictionary generateEmptyRow() { System.Collections.Specialized.ListDictionary newValues = new System.Collections.Specialized.ListDictionary(); newValues[fieldStarttijd] = string.Empty; newValues[fieldEindtijd] = string.Empty; newValues[fieldTempStarttijd] = GetTimeForNewrow().ToString("HH:mm"); newValues[fieldTempEindtijd] = GetTimeForNewrow().AddMinutes(15).ToString("HH:mm"); newValues[fieldOmschrijving] = string.Empty; newValues[fieldSubproject] = string.Empty; newValues[fieldProject] = string.Empty; return newValues; } private List<LocalHoursheet> generateLocalHoursheets(List<CustomHourSheet> hoursheets) { List<LocalHoursheet> returnValue = new List<LocalHoursheet>(); DateTime selected = rdpDate.SelectedDate.Value; DateTime compare = new DateTime(selected.Year, selected.Month, selected.Day, 0, 0, 0); foreach (CustomHourSheet chs in hoursheets) { returnValue.Add(new LocalHoursheet() { DiffStartMinuten = (int)(chs.StartDatum - compare).TotalMinutes, DiffEindMinuten = (int)(chs.EindDatum - compare).TotalMinutes, }); } return returnValue; } // Add or update a new record, this simulates pressing the "✔" button protected void SaveButton_Click(object sender, EventArgs e) { bool saved = false; GridEditableItem gridItem = null; if (gridResult.MasterTableView.IsItemInserted || gridResult.EditItems.Count > 0) { if (gridResult.MasterTableView.IsItemInserted) { gridItem = (GridEditableItem)gridResult.MasterTableView.GetInsertItem(); DoInsert(gridItem); saved = true; } else { gridItem = (GridEditableItem)gridResult.EditItems[0]; DoUpdate(gridItem); saved = true; } } if (gridItem != null && saved) { gridItem.Edit = false; gridResult.Rebind(); } } // Fill subprojects with no project selected (from insert mode) protected void cmbProject_Insert_DataBound(object sender, EventArgs e) { GridEditableItem item = ((Control)sender).NamingContainer as GridEditableItem; RadComboBox rcbProject = (RadComboBox)sender; RadComboBox rcbSubProjects = (RadComboBox)item.FindControl(controlSubProjects); if (rcbProject.SelectedIndex > -1 && rcbProject.SelectedValue != "") { pdx_Project project = pdx_Project.Retrieve(rcbProject.SelectedValue); if (project != null) { fillSubProjects(project, null, rcbSubProjects); rcbSubProjects.Focus(); } } } // Fill subprojects with a project selected (from edit mode) protected void cmbProject_Edit_DataBound(object sender, EventArgs e) { GridEditableItem item = ((Control)sender).NamingContainer as GridEditableItem; RadComboBox rcbProject = (RadComboBox)sender; RadComboBox rcbSubProjects = (RadComboBox)item.FindControl(controlSubProjects); if (rcbProject.SelectedIndex > -1 && rcbProject.SelectedValue != "") { pdx_Project project = pdx_Project.Retrieve(rcbProject.SelectedValue); CustomHourSheet hs = (CustomHourSheet)item.DataItem; if (project != null && hs.pdx_Subproject != null) { fillSubProjects(project, hs.pdx_Subproject, rcbSubProjects); rcbSubProjects.Focus(); } } } protected void cmbProject_TextChanged(object sender, EventArgs e) { GridEditableItem item = ((Control)sender).NamingContainer as GridEditableItem; RadComboBox rcbProject = (RadComboBox)sender; RadComboBox rcbSubProjects = (RadComboBox)item.FindControl(controlSubProjects); pdx_Project project = null; // tegengaan van invoer van een niet bestaand project if (rcbProject.SelectedValue == "") { rcbProject.SelectedIndex = 0; } project = pdx_Project.Retrieve(rcbProject.SelectedValue); if (project != null) { fillSubProjects(project, null, rcbSubProjects); rcbSubProjects.SelectedIndex = -1; } rcbSubProjects.Text = ""; rcbSubProjects.Focus(); } protected void cmbProject_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e) { GridEditableItem item = ((Control)sender).NamingContainer as GridEditableItem; RadComboBox rcbProject = (RadComboBox)sender; RadComboBox rcbSubProjects = (RadComboBox)item.FindControl(controlSubProjects); if (rcbProject.SelectedValue != "") { pdx_Project project = pdx_Project.Retrieve(rcbProject.SelectedValue); if (project != null) { fillSubProjects(project, null, rcbSubProjects); rcbSubProjects.SelectedIndex = -1; rcbSubProjects.Text = ""; rcbSubProjects.Focus(); } } } protected void cmbSubProject_TextChanged(object sender, EventArgs e) { GridEditableItem item = ((Control)sender).NamingContainer as GridEditableItem; RadComboBox rcbSubProject = (RadComboBox)sender; RadTextBox txtOmschrijving = (RadTextBox)item.FindControl(controlOmschrijving); // tegengaan van invoer van een niet bestaand project if (rcbSubProject.SelectedValue == "") { rcbSubProject.SelectedIndex = 0; } txtOmschrijving.Focus(); } protected void rdpDate_SelectedDateChanged(object sender, Telerik.Web.UI.Calendar.SelectedDateChangedEventArgs e) { InitialiseDaysheet(); gridResult.Rebind(); rdpDate.Focus(); Session["selectedDate"] = rdpDate.SelectedDate.Value; } #endregion # region Data Access code private DateTime GetTimeForNewrow() { DateTime returnValue = new DateTime(); if (getHourDetails().Count() > 0) { //If there already are hoursheets in the grid, determine new starttime based on max eindtijd DateTime maxDateHS = getHourDetails().Where(h => h.Datum == rdpDate.SelectedDate.Value).Max(h => h.Eindtijd); if (maxDateHS != null) { returnValue = maxDateHS; } // Else determine new starttime by workschedule else { Werkrooster rooster = Werkrooster.getRoster(_user.pdx_employ_obj, _date); int dayOfWeek = (int)rdpDate.SelectedDate.Value.DayOfWeek; DateTime maxDateWB = rooster.Werkbloks.Where(wb => wb.Weekdag == dayOfWeek).Max(wb => wb.Starttijd.GetValueOrDefault(rdpDate.SelectedDate.Value)); // If user has a werkblok, use this if (maxDateWB != null) { returnValue = maxDateWB; } } } else { returnValue = new DateTime(2011, 12, 31, 9, 0, 0); } return returnValue; } private IEnumerable<Hoursheet> getHourDetails() { //Get all hoursheets for this user and date return Hoursheet.RetrieveAll() .Where(h => h.PerNumber == _user.pdx_employ && h.Datum == _date) .OrderBy(h => h.Starttijd); } protected IQueryable<pdx_Project> getProjects() { IQueryable<pdx_Project> projects = pdx_Project.RetrieveAll() .Where(p => p.Afgesloten != true).OrderBy(p => p.Naam); projects = projects.Where(p => p.ProjectEmployeeRoles.Any(r => r.Employ == _user.pdx_employ)); return projects; } private bool hoursConfirmed() { return (_user.UrenBevestigings_Obj != null && _user.UrenBevestigings_Obj.First().Datum.Value >= _date); } # endregion #region RadGrid Events protected void gridResult_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e) { IEnumerable<CustomHourSheet> hoursheets = new List<CustomHourSheet>(); hoursheets = from hs in getHourDetails() select new CustomHourSheet { Datum = hs.Datum, Eindtijd = hs.Eindtijd.ToString("HH:mm"), Minuten = hs.Minuten, OID = hs.OID, Omschrijving = hs.Omschrijving, Starttijd = hs.Starttijd.ToString("HH:mm"), Subproject = hs.SubProject, pdx_Subproject = hs.pdx_Subproject, ProjectID = hs.pdx_Subproject.pdx_Project.ProjectNumber, ProjectNaam = hs.pdx_Subproject != null ? hs.pdx_Subproject.pdx_Project.Naam : "", SubProjectNaam = hs.pdx_Subproject != null ? hs.pdx_Subproject.SubNaam : "", SubProjectID = hs.pdx_Subproject.SubNumber, TempStartTime = GetTimeForNewrow().ToString("HH:mm"), TempEndTime = GetTimeForNewrow().AddMinutes(15).ToString("HH:mm"), StartDatum = hs.Starttijd, EindDatum = hs.Eindtijd }; List<CustomHourSheet> hsList = hoursheets.ToList(); if (hoursheets.Count() > 1) { if (checkForBreaks(hoursheets) != null) { List<BreakSheet> breaksheets = checkForBreaks(hoursheets); foreach (BreakSheet bs in breaksheets) { hsList.Add(new CustomHourSheet() { Eindtijd = bs.StartTijd, Starttijd = bs.EindTijd, Minuten = bs.Duur, }); } } } gridResult.DataSource = hsList; List<LocalHoursheet> hsLocal = generateLocalHoursheets(hsList); string json = GenerateJSONString(hsLocal); txtHoursheetsLocal.Text = json; } private static string GenerateJSONString(List<LocalHoursheet> hsLocal) { JavaScriptSerializer serializer = new JavaScriptSerializer(); string json = serializer.Serialize(hsLocal); return json; } protected void gridResult_ItemDataBound(object sender, GridItemEventArgs e) { // Viewmode, data confirmed bool confirmed = hoursConfirmed(); if (e.Item is GridDataItem && !e.Item.IsInEditMode && confirmed) { DisableEditDisplay(e); } // Editmode else if (e.Item is GridEditableItem && e.Item.IsInEditMode) { RadMaskedTextBox start = e.Item.FindControl(controlStarttijd) as RadMaskedTextBox; start.Focus(); //DisableEditDisplayForAllRows(); } // Disable insert button on confirmed if (e.Item is GridCommandItem && confirmed) { e.Item.FindControl(commandInsert).Parent.Visible = false; } // Disable editdisplay for breaksheets if ((e.Item is GridEditableItem && !e.Item.IsInEditMode)) { // Disable editdisplay for breaksheets CustomHourSheet hs = (CustomHourSheet)e.Item.DataItem; if (hs.Omschrijving == "" || hs.Omschrijving == null) { DisableEditDisplay(e); } // Disable editdisplay for when editmode is set if (Convert.ToInt32(Session["editMode"]) == 1) { DisableEditDisplay(e); } } } protected void gridResult_ItemCommand(object source, Telerik.Web.UI.GridCommandEventArgs e) { if (e.CommandName == RadGrid.InitInsertCommandName) { e.Canceled = true; ListDictionary newValues = generateEmptyRow(); e.Item.OwnerTableView.InsertItem(newValues); Session["editMode"] = 1; } if (e.CommandName == RadGrid.CancelCommandName || e.CommandName == RadGrid.PerformInsertCommandName || e.CommandName == RadGrid.UpdateCommandName || e.CommandName == RadGrid.UpdateEditedCommandName) { rdpDate.Enabled = true; Session["editMode"] = 0; } else if (e.CommandName == RadGrid.InitInsertCommandName || e.CommandName == RadGrid.EditCommandName) { rdpDate.Enabled = false; Session["editMode"] = 1; } } // Event handler that handles UpdateCommand protected void gridResult_UpdateCommand(object source, Telerik.Web.UI.GridCommandEventArgs e) { GridEditableItem gridEditableItem = (GridEditableItem)e.Item; DoUpdate(gridEditableItem); } // Event handler that handles DeleteCommand protected void gridResult_DeleteCommand(object source, Telerik.Web.UI.GridCommandEventArgs e) { GridEditableItem gridEditableItem = (GridEditableItem)e.Item; DoDelete(gridEditableItem); } // Event handler that handles InsertCommand protected void gridResult_InsertCommand(object source, Telerik.Web.UI.GridCommandEventArgs e) { GridEditableItem gridEditableItem = (GridEditableItem)e.Item; DoInsert(gridEditableItem); } #endregion }}
Hi.
I have a grid with the nextPrevAndNumeric pager mode.
when i click on one of the page numbers - it works fine.
but when i click on the "prev/next/first/last page" nothing happens, no event is fired.
i went over the forums but didn't find an answer.
thanks in advance
<telerik:GridBoundColumn DataField="Κωδικός Προϊόντος" HeaderText="Κωδικός Προϊόντος"DataFormatString="{0}"DataType="System.String"SortExpression="Κωδικός Προϊόντος"UniqueName="Κωδικός Προϊόντος"><HeaderStyle Width="155px"></HeaderStyle></telerik:GridBoundColumn><telerik:RadMenu ID="RadMenuUserFormsList" runat="server" Skin="Telerik" Style="z-index: 800" OnClientItemClicked="OnClientItemClicked" > <Items> <telerik:RadMenuItem Text="New" Value="NewForm" Enabled="true" PostBack="false" Visible="true" > <Items> </Items> </telerik:RadMenuItem> </Items> <CollapseAnimation Type="None" /> <ExpandAnimation Type="None" /></telerik:RadMenu>private void InitializeMenu(){ var FormTypes = GlobalController.GetFormTypeList(); int i = 1; RadMenuItem NewFormMenu = RadMenuUserFormsList.FindItemByValue("NewForm"); // add menu items FormTypes.ToList<LovItem>().ForEach(delegate(LovItem item) { RadMenuItem MenuItem = new RadMenuItem(); MenuItem.Text = item.Value; MenuItem.Text = i.ToString(); i++; MenuItem.Target = "_blank"; NewFormMenu.Items.Add(MenuItem); });}