I am trying to prevent the user from resizing an appointment such that it would overlap with another appointment within the same resource. The problem seems to be when the end of the appointment being resized is dragged over another that is only 1 day in duration, it's not detecting that appointment as being within the start and end dates. I'm using the timeline view where each slot is 1 day.
I can set the start time that it passes to the function to one ms less where it spans the day boundary and it works. If I set it back to 00:00:00 it doesn't.
The code I'm using is below, ResizingTarget() is the handler for the scheduler's OnClientAppointmentResizeEnd event.
function
ResizingTarget(sender, args)
{
if
(!isSlotFree(args.get_targetSlot(), args.get_appointment()))
{
args.get_appointment().get_element().style.border =
"0px none black"
;
args.set_cancel(
true
);
}
else
{
var
apt = args.get_appointment();
var
newTime = args.get_newStartTime();
var
featureId = apt.get_id();
// Call web service to update target
}
}
function
isSlotFree(targetSlot, appointment)
{
//Get start time of target calendar slot
var
startTime = targetSlot.get_startTime();
//Ensure reference to RadScheduler client object
if
(_sched ==
null
)
_sched = $find(
"<%= targets.ClientID %>"
);
//Calculate end time (to create span that cannot be overlapped)
var
endTime =
new
Date(startTime.getTime() + 86400000);
//24hr period
startTime =
new
Date(startTime.getTime());
//Determine if appt being moved overlaps with another appointment
return
!overlapsWithAnotherAppointment(appointment, startTime, endTime);
}
function
overlapsWithAnotherAppointment(appointment, startTime, endTime)
{
if
(_sched ==
null
)
_sched = $find(
"<%= targets.ClientID %>"
);
// Get all appts in range of start and end time
var
appointments = _sched.get_appointments().getAppointmentsInRange(startTime, endTime);
if
(appointments.get_count() == 0)
return
false
;
var
strID =
""
;
var
apptCnt = appointments.get_count();
for
(
var
i = 0; i < apptCnt; i++)
{
if
(appointments._array[i]._id != appointment._id)
{
if
(appointments._array[i]._serializedResources[0].key == appointment._resources._array[0]._key)
return
true
;
}
}
return
false
;
}
<
telerik:RadFormDecorator
ID
=
"QsfFromDecorator"
runat
=
"server"
DecoratedControls
=
"All"
EnableRoundedCorners
=
"false"
/>
<
telerik:RadAjaxManager
ID
=
"RadAjaxManager1"
runat
=
"server"
OnAjaxRequest
=
"RadAjaxManager1_AjaxRequest"
>
<
AjaxSettings
>
<
telerik:AjaxSetting
AjaxControlID
=
"RadGrid1"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"RadGrid1"
LoadingPanelID
=
"RadAjaxLoadingPanel1"
>
</
telerik:AjaxUpdatedControl
>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
<
telerik:AjaxSetting
AjaxControlID
=
"RadAjaxManager1"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"RadGrid2"
LoadingPanelID
=
"RadAjaxLoadingPanel2"
>
</
telerik:AjaxUpdatedControl
>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
</
AjaxSettings
>
</
telerik:RadAjaxManager
>
<
telerik:RadAjaxLoadingPanel
ID
=
"RadAjaxLoadingPanel1"
runat
=
"server"
>
</
telerik:RadAjaxLoadingPanel
>
<
telerik:RadCodeBlock
ID
=
"RadCodeBlock1"
runat
=
"server"
>
<
script
type
=
"text/javascript"
>
<!--
//this method calculates whether you have reached the bottom when dragging the vertical grid scroll
function IsScrolledToBottom(scrollArea) {
var currentPosition = scrollArea.scrollTop + scrollArea.clientHeight;
return currentPosition == scrollArea.scrollHeight;
}
-->
</
script
>
</
telerik:RadCodeBlock
>
<
telerik:RadGrid
ID
=
"RadGrid1"
runat
=
"server"
AllowPaging
=
"True"
PageSize
=
"14"
AllowSorting
=
"True"
AllowCustomPaging
=
"True"
VirtualItemCount
=
"50000"
OnColumnCreated
=
"RadGrid1_ColumnCreated"
OnNeedDataSource
=
"RadGrid1_NeedDataSource"
CellSpacing
=
"0"
GridLines
=
"None"
Skin
=
"Web20"
>
<
PagerStyle
Mode
=
"NumericPages"
></
PagerStyle
>
<
MasterTableView
TableLayout
=
"Fixed"
>
</
MasterTableView
>
<
ClientSettings
>
<
Scrolling
AllowScroll
=
"True"
EnableVirtualScrollPaging
=
"True"
UseStaticHeaders
=
"True"
SaveScrollPosition
=
"True"
></
Scrolling
>
</
ClientSettings
>
</
telerik:RadGrid
>
<
telerik:RadGrid
ID
=
"gvDash"
runat
=
"server"
GridLines
=
"None"
AutoGenerateColumns
=
"false"
DataSourceID
=
"dsDashboard"
PageSize
=
"15"
Width
=
"100%"
ShowStatusBar
=
"true"
AllowPaging
=
"true"
AllowSorting
=
"true"
>
<
MasterTableView
DataKeyNames
=
"FileID"
CommandItemDisplay
=
"Top"
AllowMultiColumnSorting
=
"true"
EnableHeaderContextMenu
=
"true"
EditMode
=
"PopUp"
>
<
CommandItemSettings
ShowAddNewRecordButton
=
"false"
ShowExportToWordButton
=
"true"
ShowExportToExcelButton
=
"true"
/>
<
NoRecordsTemplate
>
<
em
>No Records</
em
>
</
NoRecordsTemplate
>
<
AlternatingItemStyle
CssClass
=
"alt-row"
/>
<
Columns
>
<
telerik:GridTemplateColumn
UniqueName
=
"Options"
Groupable
=
"false"
AllowFiltering
=
"false"
HeaderText
=
"Options"
>
<
ItemTemplate
>
<
asp:HyperLink
ID
=
"EditLink"
runat
=
"server"
Text
=
"Edit"
></
asp:HyperLink
>
<
asp:LinkButton
ID
=
"btnView"
runat
=
"server"
Text
=
"View"
/>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridBoundColumn
UniqueName
=
"FileNo"
DataField
=
"FileNo"
HeaderText
=
"File Number"
SortExpression
=
"FileNo"
Groupable
=
"false"
/>
<
telerik:GridBoundColumn
UniqueName
=
"DisplayName"
DataField
=
"DisplayName"
HeaderText
=
"Vessel"
SortExpression
=
"DisplayName"
/>
<
telerik:GridBoundColumn
UniqueName
=
"VesselStatusName"
DataField
=
"VesselStatusName"
HeaderText
=
"Status"
SortExpression
=
"VesselStatusName"
/>
<
telerik:GridBoundColumn
UniqueName
=
"OfficeName"
DataField
=
"OfficeName"
HeaderText
=
"Office Location"
SortExpression
=
"OfficeName"
/>
<
telerik:GridCheckBoxColumn
UniqueName
=
"AddedToQB"
DataField
=
"AddedToQB"
HeaderText
=
"Vsl Added QB"
SortExpression
=
"AddedToQB"
/>
<
telerik:GridBoundColumn
UniqueName
=
"VesselSailed"
DataField
=
"VesselSailed"
HeaderText
=
"Sail Date"
SortExpression
=
"VesselSailed"
DataFormatString
=
"{0:M/d/yyyy HH:mm}"
/>
<
telerik:GridCheckBoxColumn
UniqueName
=
"SailDateQB"
DataField
=
"SailDateQB"
HeaderText
=
"Sail Date Added QB"
SortExpression
=
"SailDateQB"
/>
<
telerik:GridBoundColumn
UniqueName
=
"CargoName"
DataField
=
"CargoName"
HeaderText
=
"Cargo"
SortExpression
=
"CargoName"
/>
<
telerik:GridTemplateColumn
UniqueName
=
"PayingPrinci"
HeaderText
=
"Paying Principal"
GroupByExpression
=
"PayingPrinciName Group By PayingPrinciName"
SortExpression
=
"PayingPrinciName"
>
<
ItemTemplate
>
<
asp:Label
ID
=
"lblPayingPrinci"
runat
=
"server"
Text='<%# Bind("PayingPrinciName") %>'></
asp:Label
>
<
br
/><
asp:Label
ID
=
"lblPayingPrinciAddress"
CssClass
=
"label-note"
runat
=
"server"
Text='<%# Bind("PayingPrinciAddress") %>'></
asp:Label
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridBoundColumn
UniqueName
=
"PDAAmnt"
DataField
=
"PDAAmnt"
HeaderText
=
"PDA AMT"
SortExpression
=
"PDAAmnt"
DataFormatString
=
"{0:c}"
/>
<
telerik:GridBoundColumn
UniqueName
=
"RECVDAmnt"
DataField
=
"RECVDAmnt"
HeaderText
=
"PDA AMT Rcvd"
SortExpression
=
"RECVDAmnt"
DataFormatString
=
"{0:c}"
/>
<
telerik:GridBoundColumn
UniqueName
=
"PerformaDateRcvd"
DataField
=
"PerformaDateRcvd"
HeaderText
=
"PDA Date Rcvd"
SortExpression
=
"PerformaDateRcvd"
DataFormatString
=
"{0:M/d/yyyy}"
/>
<
telerik:GridBoundColumn
UniqueName
=
"CTMAmnt"
Display
=
"false"
DataField
=
"CTMAmnt"
HeaderText
=
"CTM AMT"
SortExpression
=
"CTMAmnt"
DataFormatString
=
"{0:c}"
/>
<
telerik:GridBoundColumn
UniqueName
=
"CTMAmntRcvd"
Display
=
"false"
DataField
=
"CTMAmntRcvd"
HeaderText
=
"CTM AMT Rcvd"
SortExpression
=
"RECVDAmnt"
DataFormatString
=
"{0:c}"
/>
<
telerik:GridBoundColumn
UniqueName
=
"CTMAmntDate"
Display
=
"false"
DataField
=
"CTMAmntDate"
HeaderText
=
"CTM Date Rcvd"
SortExpression
=
"PerformaDateRcvd"
DataFormatString
=
"{0:M/d/yyyy}"
/>
<
telerik:GridBoundColumn
UniqueName
=
"PortName"
DataField
=
"PortName"
HeaderText
=
"Port"
SortExpression
=
"PortName"
/>
<
telerik:GridBoundColumn
UniqueName
=
"AccountingNotes"
Display
=
"false"
DataField
=
"AccountingNotes"
HeaderText
=
"Comments"
/>
</
Columns
>
</
MasterTableView
>
<
ClientSettings
AllowColumnsReorder
=
"true"
AllowColumnHide
=
"true"
>
<
Resizing
AllowColumnResize
=
"true"
AllowResizeToFit
=
"true"
/>
</
ClientSettings
>
</
telerik:RadGrid
>
Private
Sub
LoadSettings()
If
Not
IsNothing(Session(
"Acc.Funds.GridSettings"
))
Then
Dim
LoadPersister
As
New
GridSettingsPersister(gvDash)
Dim
settings
As
String
=
DirectCast
(Session(
"Acc.Funds.GridSettings"
),
String
)
LoadPersister.LoadSettings(settings)
End
If
End
Sub
Private
Sub
SaveSettings()
Dim
SavePersister
As
New
GridSettingsPersister(gvDash)
Session(
"Acc.Funds.GridSettings"
) = SavePersister.SaveSettings()
End
Sub
I have a hierarchy radgrid that contains "Case Number" parent objects and "Offense" child objects and supports Insert/Update/Delete functionality.
I am getting the following error:
DataBinding: 'Telerik.Web.UI.GridInsertionObject' does not contain a property with the name 'AgencyID'.
To get this error I am performing the following actions:
The error occurs at this point!
My question is how do I go about fixing this problem?
My grid definition is as follows:
<
telerik:RadGrid
ID
=
"radGridCaseNumbers"
AutoGenerateColumns
=
"false"
AllowMultiRowEdit
=
"false"
Visible
=
"false"
runat
=
"server"
OnInsertCommand
=
"radGridCaseNumbers_InsertCommand"
OnUpdateCommand
=
"radGridCaseNumbers_UpdateCommand"
OnDeleteCommand
=
"radGridCaseNumbers_DeleteCommand"
OnNeedDataSource
=
"radGridCaseNumbers_NeedDataSource"
OnDetailTableDataBind
=
"radGridCaseNumbers_DetailTableDataBind"
OnItemCommand
=
"radGridCaseNumbers_ItemCommand"
>
<
MasterTableView
CommandItemDisplay
=
"Top"
DataKeyNames
=
"CaseNumberID"
TableLayout
=
"Auto"
Name
=
"CaseNumbers"
HierarchyDefaultExpanded
=
"true"
NoMasterRecordsText
=
"No Case Number records to display"
>
<
DetailTables
>
<
telerik:GridTableView
DataKeyNames
=
"OffenseID"
runat
=
"server"
CommandItemDisplay
=
"Top"
TableLayout
=
"Auto"
Name
=
"Offenses"
NoDetailRecordsText
=
"No Offense records to display"
>
<
ParentTableRelation
>
<
telerik:GridRelationFields
DetailKeyField
=
"CaseNumberID"
MasterKeyField
=
"CaseNumberID"
/>
</
ParentTableRelation
>
<
CommandItemTemplate
>
<
div
>
<
telerik:RadButton
ID
=
"radButtonAddOffense"
runat
=
"server"
Text
=
"Add New Offense"
CommandName
=
"InitInsert"
Visible='<%# !radGridCaseNumbers.MasterTableView.IsItemInserted %>'
ButtonType="StandardButton">
</
telerik:RadButton
>
</
div
>
</
CommandItemTemplate
>
<
Columns
>
<
telerik:GridDropDownColumn
HeaderText
=
"Arresting PD"
EnableEmptyListItem
=
"true"
DataField
=
"AgencyID"
ListTextField
=
"Name"
ListValueField
=
"ID"
DataSourceID
=
"objectDataSourceAgencies"
>
</
telerik:GridDropDownColumn
>
<
telerik:GridEditCommandColumn
ButtonType
=
"PushButton"
UniqueName
=
"EditOffenseCommandColumn"
/>
<
telerik:GridButtonColumn
UniqueName
=
"DeleteOffenseColumn"
ButtonType
=
"PushButton"
Text
=
"Delete"
CommandName
=
"Delete"
/>
</
Columns
>
<
EditFormSettings
EditFormType
=
"Template"
>
<
FormTemplate
>
<
div
>
<
table
cellpadding
=
"0"
cellspacing
=
"0"
class
=
"tableContentControls"
>
<
tr
>
<
td
class
=
"tableCellRequiredField"
><
asp:Label
Text
=
"*"
runat
=
"server"
CssClass
=
"labelRequiredField"
/></
td
>
<
td
class
=
"tableCellLabel"
><
asp:Label
Text
=
"Arresting PD:"
runat
=
"server"
CssClass
=
"labelDescription"
/></
td
>
<
td
class
=
"tableCellControl"
>
<
telerik:RadComboBox
ID
=
"radComboBoxAgency"
AutoPostBack
=
"true"
EmptyMessage
=
"(Select an Arresting PD)"
EnableLoadOnDemand
=
"true"
DataSourceID
=
"objectDataSourceAgencies"
DataTextField
=
"Name"
DataValueField
=
"ID"
SelectedValue='<%# Bind("AgencyID") %>'
Filter="StartsWith" runat="server" OnSelectedIndexChanged="radComboBoxAgency_SelectedIndexChanged">
</
telerik:RadComboBox
>
</
td
>
<
td
class
=
"tableCellValidation"
>
<
asp:RequiredFieldValidator
ID
=
"requiredFieldValidatorAgency"
ControlToValidate
=
"radComboBoxAgency"
runat
=
"server"
ValidationGroup
=
"validationGroup_Details_OffensesGrid"
>
<
table
>
<
tr
>
<
td
><
asp:Image
runat
=
"server"
ImageUrl
=
"~/Images/ValidationError.png"
/></
td
>
<
td
><
asp:Label
runat
=
"server"
Text
=
"Arresting PD is required"
CssClass
=
"labelValidationError"
/></
td
>
</
tr
>
</
table
>
</
asp:RequiredFieldValidator
>
</
td
>
</
tr
>
<
tr
>
<
td
colspan
=
"4"
>
<
telerik:RadButton
ID
=
"radButtonInsertUpdateOffense"
CausesValidation
=
"true"
CommandName='<%# (Container is GridEditFormInsertItem) ? "PerformInsert" : "Update" %>'
Text='<%# (Container is GridEditFormInsertItem) ? "Insert" : "Update" %>' ValidationGroup="validationGroup_Details_OffensesGrid"
runat="server" OnClientClicking="performInsertOrUpdateOffense">
</
telerik:RadButton
>
<
telerik:RadButton
ID
=
"radButtonCancelInsertUpdateOffense"
CausesValidation
=
"false"
CommandName
=
"Cancel"
Text
=
"Cancel"
runat
=
"server"
/>
</
td
>
</
tr
>
</
table
>
</
div
>
</
FormTemplate
>
</
EditFormSettings
>
</
telerik:GridTableView
>
</
DetailTables
>
<
CommandItemTemplate
>
<
div
>
<
telerik:RadButton
ID
=
"radButtonAddCaseNumber"
runat
=
"server"
Text
=
"Add New Case Number"
CommandName
=
"InitInsert"
Visible='<%# !radGridCaseNumbers.MasterTableView.IsItemInserted %>'
ButtonType="StandardButton">
</
telerik:RadButton
>
</
div
>
</
CommandItemTemplate
>
<
Columns
>
<
telerik:GridBoundColumn
HeaderText
=
"Number"
DataField
=
"Number"
HeaderStyle-Width
=
"20"
/>
<
telerik:GridDropDownColumn
HeaderText
=
"Type"
EnableEmptyListItem
=
"true"
DataField
=
"TypeID"
ListTextField
=
"Description"
ListValueField
=
"ID"
DataSourceID
=
"objectDataSourceCaseNumberTypes"
HeaderStyle-Width
=
"20"
/>
<
telerik:GridEditCommandColumn
ButtonType
=
"PushButton"
UniqueName
=
"EditCaseNumberCommandColumn"
HeaderStyle-Width
=
"10"
/>
<
telerik:GridButtonColumn
UniqueName
=
"DeleteCaseNumberColumn"
ButtonType
=
"PushButton"
Text
=
"Delete"
CommandName
=
"Delete"
HeaderStyle-Width
=
"200"
/>
</
Columns
>
<
EditFormSettings
EditFormType
=
"Template"
>
<
FormTemplate
>
<
div
>
<
table
>
<
tr
>
<
td
class
=
"tableCellRequiredField"
><
asp:Label
Text
=
"*"
runat
=
"server"
CssClass
=
"labelRequiredField"
/></
td
>
<
td
class
=
"tableCellLabel"
><
asp:Label
Text
=
"Number:"
runat
=
"server"
CssClass
=
"labelDescription"
/></
td
>
<
td
class
=
"tableCellControl"
><
telerik:RadTextBox
ID
=
"radTextBoxNumber"
Text='<%# Bind("Number") %>' runat="server" /></
td
>
<
td
class
=
"tableCellValidation"
>
<
asp:RequiredFieldValidator
ID
=
"requiredFieldValidatorNumber"
ControlToValidate
=
"radTextBoxNumber"
runat
=
"server"
ValidationGroup
=
"validationGroup_Details_CaseNumbersGrid"
>
<
table
>
<
tr
>
<
td
><
asp:Image
runat
=
"server"
ImageUrl
=
"~/Images/ValidationError.png"
/></
td
>
<
td
><
asp:Label
runat
=
"server"
Text
=
"Number is required"
CssClass
=
"labelValidationError"
/></
td
>
</
tr
>
</
table
>
</
asp:RequiredFieldValidator
>
</
td
>
</
tr
>
<
tr
>
<
td
class
=
"tableCellRequiredField"
><
asp:Label
Text
=
"*"
runat
=
"server"
CssClass
=
"labelRequiredField"
/></
td
>
<
td
class
=
"tableCellLabel"
><
asp:Label
Text
=
"Type:"
runat
=
"server"
CssClass
=
"labelDescription"
/></
td
>
<
td
class
=
"tableCellControl"
>
<
telerik:RadComboBox
ID
=
"radComboBoxType"
DataSourceID
=
"objectDataSourceCaseNumberTypes"
DataTextField
=
"Description"
DataValueField
=
"ID"
EmptyMessage
=
"(Select a Type)"
EnableLoadOnDemand
=
"true"
Filter
=
"StartsWith"
SelectedValue='<%# Bind("TypeID") %>' runat="server">
</
telerik:RadComboBox
>
</
td
>
<
td
class
=
"tableCellValidation"
>
<
asp:RequiredFieldValidator
ID
=
"requiredFieldValidatorType"
ControlToValidate
=
"radComboboxType"
runat
=
"server"
ValidationGroup
=
"validationGroup_Details_CaseNumbersGrid"
>
<
table
>
<
tr
>
<
td
><
asp:Image
runat
=
"server"
ImageUrl
=
"~/Images/ValidationError.png"
/></
td
>
<
td
><
asp:Label
runat
=
"server"
Text
=
"Type is required"
CssClass
=
"labelValidationError"
/></
td
>
</
tr
>
</
table
>
</
asp:RequiredFieldValidator
>
</
td
>
</
tr
>
<
tr
>
<
td
colspan
=
"4"
>
<
telerik:RadButton
ID
=
"radButtonInsertUpdateCaseNumber"
CausesValidation
=
"true"
CommandName='<%# (Container is GridEditFormInsertItem) ? "PerformInsert" : "Update" %>'
Text='<%# (Container is GridEditFormInsertItem) ? "Insert" : "Update" %>' ValidationGroup="validationGroup_Details_CaseNumbersGrid"
runat="server" OnClientClicking="performInsertOrUpdateCaseNumber">
</
telerik:RadButton
>
<
telerik:RadButton
ID
=
"radButtonCancelInsertUpdateCaseNumber"
CausesValidation
=
"false"
CommandName
=
"Cancel"
Text
=
"Cancel"
runat
=
"server"
/>
</
td
>
</
tr
>
</
table
>
</
div
>
</
FormTemplate
>
</
EditFormSettings
>
</
MasterTableView
>
<
ValidationSettings
CommandsToValidate
=
"PerformInsert,Update"
/>
</
telerik:RadGrid
>
The code-behind for the grid is as follows:
public
DataSet CaseNumbers
{
get
{
object
obj = ViewState[
"CaseNumbers"
];
if
(obj !=
null
)
return
(DataSet)obj;
DataSet caseNumbers =
new
DataSet();
ReferralDb referralDb =
new
ReferralDb();
caseNumbers = referralDb.GetReferralCaseNumbers(Convert.ToInt32(hiddenFieldReferralID.Value));
ViewState[
"CaseNumbers"
] = caseNumbers;
return
caseNumbers;
}
}
public
DataSet Offenses
{
get
{
object
obj = ViewState[
"Offenses"
];
if
(obj !=
null
)
return
(DataSet)obj;
DataSet offenses =
new
DataSet();
ReferralDb referralDb =
new
ReferralDb();
offenses = referralDb.GetReferralOffenses(Convert.ToInt32(hiddenFieldReferralID.Value));
ViewState[
"Offenses"
] = offenses;
return
offenses;
}
}
protected
void
radGridCaseNumbers_DeleteCommand(
object
sender, GridCommandEventArgs e)
{
string
id =
null
;
DataTable dataTableOffenses =
null
;
DataTable dataTableCaseNumbers =
null
;
if
(
"Offenses"
.Equals(e.Item.OwnerTableView.Name))
{
id = ((GridDataItem)e.Item).OwnerTableView.DataKeyValues[e.Item.ItemIndex][
"OffenseID"
].ToString();
dataTableOffenses = Offenses.Tables[
"Offense"
];
if
(dataTableOffenses.Rows.Find(id) !=
null
)
dataTableOffenses.Rows.Find(id).Delete();
}
else
if
(
"CaseNumbers"
.Equals(e.Item.OwnerTableView.Name))
{
id = ((GridDataItem)e.Item).OwnerTableView.DataKeyValues[e.Item.ItemIndex][
"CaseNumberID"
].ToString();
dataTableCaseNumbers = CaseNumbers.Tables[
"CaseNumber"
];
if
(dataTableCaseNumbers.Rows.Find(id) !=
null
)
dataTableCaseNumbers.Rows.Find(id).Delete();
dataTableOffenses = Offenses.Tables[
"Offense"
];
DataRow[] offenses = Offenses.Tables[
"Offense"
].Select(
"CaseNumberID = "
+ id);
foreach
(DataRow dataRow
in
offenses)
{
id = dataRow[
"OffenseID"
].ToString();
dataTableOffenses.Rows.Find(id).Delete();
}
}
}
protected
void
radGridCaseNumbers_DetailTableDataBind(
object
sender, GridDetailTableDataBindEventArgs e)
{
GridDataItem gridDataItem = (GridDataItem)e.DetailTableView.ParentItem;
int
caseNumberID = (
int
)gridDataItem.GetDataKeyValue(
"CaseNumberID"
);
e.DetailTableView.DataSource = Offenses.Tables[
"Offense"
].Select(
"CaseNumberID = "
+ caseNumberID.ToString());
Offenses.Tables[
"Offense"
].PrimaryKey =
new
DataColumn[] { Offenses.Tables[
"Offense"
].Columns[
"OffenseID"
] };
}
protected
void
radGridCaseNumbers_InsertCommand(
object
sender, GridCommandEventArgs e)
{
GridEditableItem gridEditableItem =
null
;
DataTable dataTable =
null
;
DataRow dataRowNew =
null
;
DataRow[] allValues =
null
;
Hashtable newValues =
null
;
if
(
"Offenses"
.Equals(e.Item.OwnerTableView.Name))
{
gridEditableItem = (GridEditableItem)e.Item;
dataTable = Offenses.Tables[
"Offense"
];
dataRowNew = dataTable.NewRow();
allValues = dataTable.Select(
""
,
"OffenseID"
, DataViewRowState.CurrentRows);
if
(allValues.Length > 0)
dataRowNew[
"OffenseID"
] = (
int
)allValues[allValues.Length - 1][
"OffenseID"
] + 1;
else
dataRowNew[
"OffenseID"
] = 1;
//table empty
newValues =
new
Hashtable();
e.Item.OwnerTableView.ExtractValuesFromItem(newValues, gridEditableItem);
try
{
foreach
(DictionaryEntry entry
in
newValues)
dataRowNew[(
string
)entry.Key] = entry.Value;
GridDataItem parentItem = (GridDataItem)e.Item.OwnerTableView.ParentItem;
dataRowNew[
"CaseNumberID"
] = parentItem.OwnerTableView.DataKeyValues[parentItem.ItemIndex][
"CaseNumberID"
].ToString();
}
catch
{
e.Canceled =
true
;
}
dataTable.Rows.Add(dataRowNew);
}
else
if
(
"CaseNumbers"
.Equals(e.Item.OwnerTableView.Name))
{
gridEditableItem = (GridEditableItem)e.Item;
dataTable = CaseNumbers.Tables[
"CaseNumber"
];
dataRowNew = dataTable.NewRow();
allValues = dataTable.Select(
""
,
"CaseNumberID"
, DataViewRowState.CurrentRows);
if
(allValues.Length > 0)
dataRowNew[
"CaseNumberID"
] = (
int
)allValues[allValues.Length - 1][
"CaseNumberID"
] + 1;
else
dataRowNew[
"CaseNumberID"
] = 1;
//table empty
newValues =
new
Hashtable();
e.Item.OwnerTableView.ExtractValuesFromItem(newValues, gridEditableItem);
try
{
foreach
(DictionaryEntry entry
in
newValues)
dataRowNew[(
string
)entry.Key] = entry.Value;
}
catch
{
e.Canceled =
true
;
}
dataTable.Rows.Add(dataRowNew);
}
}
protected
void
radGridCaseNumbers_ItemCommand(
object
sender, GridCommandEventArgs e)
{
if
(e.CommandName.Equals(RadGrid.EditCommandName))
radGridCaseNumbers.MasterTableView.IsItemInserted =
false
;
if
(e.CommandName.Equals(RadGrid.InitInsertCommandName))
radGridCaseNumbers.MasterTableView.ClearEditItems();
if
((e.CommandName.Equals(RadGrid.InitInsertCommandName)) && (
"Offenses"
.Equals(e.Item.OwnerTableView.Name)))
{
if
(e.Item.OwnerTableView.Items.Count.Equals(0))
{
e.Canceled =
true
;
System.Collections.Specialized.ListDictionary newVal =
new
System.Collections.Specialized.ListDictionary();
newVal[
"AgencyID"
] =
null
;
e.Item.OwnerTableView.InsertItem(newVal);
}
}
}
protected
void
radGridCaseNumbers_NeedDataSource(
object
sender, GridNeedDataSourceEventArgs e)
{
((RadGrid)sender).DataSource = CaseNumbers;
CaseNumbers.Tables[
"CaseNumber"
].PrimaryKey =
new
DataColumn[] { CaseNumbers.Tables[
"CaseNumber"
].Columns[
"CaseNumberID"
] };
}
protected
void
radGridCaseNumbers_UpdateCommand(
object
sender, GridCommandEventArgs e)
{
GridEditableItem gridEditableItem =
null
;
DataTable dataTable =
null
;
DataRow[] changedRows =
null
;
Hashtable newValues =
null
;
DataRow dataRowChanged =
null
;
if
(
"Offenses"
.Equals(e.Item.OwnerTableView.Name))
{
gridEditableItem = (GridEditableItem)e.Item;
dataTable = Offenses.Tables[
"Offense"
];
changedRows = dataTable.Select(
"OffenseID = "
+ gridEditableItem.OwnerTableView.DataKeyValues[e.Item.ItemIndex][
"OffenseID"
]);
newValues =
new
Hashtable();
e.Item.OwnerTableView.ExtractValuesFromItem(newValues, gridEditableItem);
dataRowChanged = changedRows[0];
dataRowChanged.BeginEdit();
try
{
foreach
(DictionaryEntry entry
in
newValues)
dataRowChanged[(
string
)entry.Key] = entry.Value;
dataRowChanged.EndEdit();
}
catch
{
dataRowChanged.CancelEdit();
e.Canceled =
true
;
}
}
else
if
(
"CaseNumbers"
.Equals(e.Item.OwnerTableView.Name))
{
gridEditableItem = (GridEditableItem)e.Item;
dataTable = CaseNumbers.Tables[
"CaseNumber"
];
changedRows = dataTable.Select(
"CaseNumberID = "
+ gridEditableItem.OwnerTableView.DataKeyValues[e.Item.ItemIndex][
"CaseNumberID"
]);
newValues =
new
Hashtable();
e.Item.OwnerTableView.ExtractValuesFromItem(newValues, gridEditableItem);
dataRowChanged = changedRows[0];
dataRowChanged.BeginEdit();
try
{
foreach
(DictionaryEntry entry
in
newValues)
dataRowChanged[(
string
)entry.Key] = entry.Value;
dataRowChanged.EndEdit();
}
catch
{
dataRowChanged.CancelEdit();
e.Canceled =
true
;
}
}
}
I am already supressing a similar binding error in the ItemCommand event handler in the case where an insert is initiated into the "Offenses" detail table that is empty.
I was trying to do something similar in the case of an ExpandCollapse command but had no luck.
I'm trying to use a raddatepicker in a radgrid where the user can only select the Month and Year, rather than the date from the RadCalendar.
<script type="text/javascript"> |
//override the onload event handler to change the picker after the page is loaded |
window.onload = function () |
{ |
window.setTimeout(function() {SetCalendarTable();},200) |
} |
function SetCalendarTable() |
{ |
var picker = "ctl00_RadPanel_ForecastGrid_ctl00_ctl02_ctl02_rdpForecastStartDate"; |
var calendar = picker.get_calendar(); |
var fastNavigation = calendar._getFastNavigation(); |
$clearHandlers(picker.get_popupButton()); |
$addHandler(picker.get_popupButton(), "click", function() |
{ |
//debugger; |
var textbox = picker.get_textBox(); |
//adjust where to show the popup table |
var x, y; |
var adjustElement = textbox; |
if (textbox.style.display == "none") |
adjustElement = picker.get_popupImage(); |
var pos = picker.getElementPosition(adjustElement); |
x = pos.x; |
y = pos.y + adjustElement.offsetHeight; |
var e = { |
clientX : x, |
clientY : y |
}; |
//synchronize the input date if set with the picker one |
var date = picker.get_selectedDate(); |
if(date) |
{ |
calendar.FocusedDate[0] = date.getFullYear(); |
calendar.FocusedDate[1] = date.getMonth() + 1; |
} |
$get(calendar._titleID).onclick(e); |
}); |
fastNavigation.OnOK = |
function() |
{ |
var date = new Date(fastNavigation.Year, fastNavigation.Month, 1); |
picker.get_dateInput().SetDate(date); |
fastNavigation.Popup.Hide(); |
} |
fastNavigation.OnToday = |
function() |
{ |
var date = new Date(); |
picker.get_dateInput().SetDate(date); |
fastNavigation.Popup.Hide(); |
} |
} |
</script> |
<telerik:RadGrid ID="ForecastGrid" |
AllowPaging="True" |
AllowSorting="True" |
EnableEmbeddedSkins="false" |
GridLines="None" |
OnInsertCommand="ForecastGrid_InsertCommand" |
OnItemCommand="ForecastGrid_ItemCommand" |
OnItemCreated="ForecastGrid_ItemCreated" |
OnItemDataBound="ForecastGrid_ItemDataBound" |
OnNeedDataSource="ForecastGrid_NeedDataSource" |
OnUpdateCommand="ForecastGrid_UpdateCommand" |
PageSize="15" |
runat="server" |
ShowFooter = "true" |
Skin="AO" |
Visible = "true"> |
<MasterTableView CommandItemDisplay="Bottom" AutoGenerateColumns = "false" DataKeyNames="ForecastId"> |
<EditFormSettings EditFormType = "Template"> |
<FormTemplate> |
<div style="padding: 10px;"> |
<div class="text"> |
Click the <b>Save</b> button to save your changes.</div> |
<div> |
<asp:Label Visible="false" ID="ErrorLabel" runat="server" /></div> |
<div style="clear: both;"> |
</div> |
<div class="validation-summary"> |
<asp:ValidationSummary HeaderText="Changes not saved." DisplayMode="SingleParagraph" |
ID="ValidationSummary1" runat="server"></asp:ValidationSummary> |
</div> |
<div style="clear: both;"> |
</div> |
<div> |
<asp:Label ID="ForecastIdLabel" Visible="false" runat="server" Text='<%# Bind("ForecastId") %>'></asp:Label></div> |
<div> |
<div> |
<asp:Label ID="IsActiveLabel" Visible="false" runat="server" Text='<%# Bind("IsActive") %>'></asp:Label> |
</div> |
<div class="label-short" style="float: left; padding-bottom: 5px; width:150px;"> |
Forecast Name:</div> |
<div style="padding-bottom: 5px;"> |
<Telerik:RadTextBox ID="ForecastName" runat="server" Skin="AO" EnableEmbeddedSkins="false" |
Text='<%# Bind("ForecastName") %>' Width="240" MaxLength="50"> |
</Telerik:RadTextBox> |
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="ForecastName" |
ErrorMessage="Forecast Name is required.">*</asp:RequiredFieldValidator> |
</div> |
<div style="clear: both;"> |
</div> |
<div class="label-short" style="float: left; padding-bottom: 5px; width:150px;"> |
Forecast Start Date:</div> |
<div style="padding-bottom: 5px;"> |
<telerik:RadDatePicker ID="rdpForecastStartDate" DateInput-DateFormat="MMMM, yyyy" runat="server" |
AutoPostBack="false" ToolTip="Month" Width="130px" CssClass="date-picker" Skin="AO" |
EnableEmbeddedSkins="false"> |
</telerik:RadDatePicker> |
<%--<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="rdpForecastStartDate" |
ErrorMessage="Forecast Start Date is required.">*</asp:RequiredFieldValidator>--%> |
</div> |
<div style="clear: both;"> |
</div> |
<div class="label-short" style="float: left; padding-bottom: 5px; width:150px;"> |
Forecast Length:</div> |
<div style="padding-bottom: 5px;"> |
<telerik:RadComboBox ID="rcbForecastLength" runat="server" ZIndex="7020" Skin="AO" EnableEmbeddedSkins="false" Width="243"> |
</telerik:RadComboBox> |
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="rcbForecastLength" |
ErrorMessage="Forecast Length is required.">*</asp:RequiredFieldValidator> |
</div> |
<div style="clear: both;"> |
</div> |
<div class="label-short" style="float: left; padding-bottom: 5px; width:150px;"> |
Is Active:</div> |
<div style="float: left; padding-bottom: 5px;"> |
<asp:CheckBox ID="IsActiveCheckbox" runat="server"></asp:CheckBox> |
</div> |
<div style="clear: both;"> |
</div> |
<div> |
<asp:Button ID="UpdateButton" CssClass="button" runat="server" Text="Save" CommandName="Update" /> |
<asp:Button ID="InsertButton" CssClass="button" runat="server" Text="Save" CommandName="PerformInsert" /> |
<asp:Button ID="CancelButton" CssClass="button" runat="server" Text="Cancel" CommandName="Cancel" |
CausesValidation="false" /> |
</div> |
</div> |
</FormTemplate> |
</EditFormSettings> |
</MasterTableView> |
</telerik:RadGrid> |