Hi ALL,
I have used RadGrid and bind it from my custom class, i have create RadGrid object and bind it dynamically from database, add dynamic columns, dynamic edit columns and control, when i click on update button i got following error.
Specified argument was out of the range of valid values.
Parameter name: index
Here i am mentioning my code please check it once and let me know if i am missing anything.
.aspx
.cs file
Class Flle
On RadGrid1_UpdateCommand method when i try to get new values i got an error.
e.Item.OwnerTableView.ExtractValuesFromItem(NewValues, editedItem); --- Here i got an error.
I have used RadGrid and bind it from my custom class, i have create RadGrid object and bind it dynamically from database, add dynamic columns, dynamic edit columns and control, when i click on update button i got following error.
Specified argument was out of the range of valid values.
Parameter name: index
Here i am mentioning my code please check it once and let me know if i am missing anything.
.aspx
<
form
id
=
"form1"
runat
=
"server"
>
<
div
>
<
telerik:RadScriptManager
ID
=
"ScriptManager1"
runat
=
"server"
EnableTheming
=
"True"
>
</
telerik:RadScriptManager
>
<
telerik:radgrid
id
=
"RadGrid1"
runat
=
"server"
onneeddatasource
=
"RadGrid1_NeedDataSource"
enableajax
=
"true"
autogenerateeditcolumn
=
"True"
showgrouppanel
=
"True"
width
=
"99%"
allowpaging
=
"True"
allowautomaticupdates
=
"true"
allowsorting
=
"True"
allowmultirowselection
=
"True"
height
=
"100%"
skin
=
"Vista"
onitemupdated
=
"RadGrid1_ItemUpdated"
onupdatecommand
=
"RadGrid1_UpdateCommand"
>
<
ClientSettings
AllowDragToGroup
=
"True"
AllowColumnsReorder
=
"True"
ReorderColumnsOnClient
=
"True"
AllowKeyboardNavigation
=
"True"
>
<
Selecting
AllowRowSelect
=
"True"
/>
<
ClientEvents
OnGridCreated
=
"ResizeEvent"
/>
<
Scrolling
AllowScroll
=
"True"
UseStaticHeaders
=
"True"
FrozenColumnsCount
=
"3"
/>
<
Resizing
ResizeGridOnColumnResize
=
"True"
AllowColumnResize
=
"True"
/>
</
ClientSettings
>
<
MasterTableView
TableLayout
=
"Fixed"
Width
=
"99%"
GridLines
=
"Both"
AllowAutomaticUpdates
=
"True"
AutoGenerateColumns
=
"False"
>
<
ExpandCollapseColumn
>
<
HeaderStyle
Width
=
"20px"
/>
</
ExpandCollapseColumn
>
<
EditFormSettings
ColumnNumber
=
"3"
>
<
EditColumn
ButtonType
=
"PushButton"
UniqueName
=
"EditCommandColumn1"
>
</
EditColumn
>
</
EditFormSettings
>
<
PagerStyle
AlwaysVisible
=
"True"
/>
<
HeaderStyle
Wrap
=
"False"
/>
</
MasterTableView
>
</
telerik:radgrid
>
</
div
>
</
form
>
.cs file
GridTest =
public
partial
class
(TBasePage)
private
FGridHelper: TGridHelper;
method GetDataGrid: RadGrid;
protected
method Page_Load(sender: Object; e: EventArgs);
method RadGrid1_NeedDataSource(source: System
.
Object; e: Telerik
.
Web
.
UI
.
GridNeedDataSourceEventArgs);
method RadGrid1_UpdateCommand(sender: Object; e: Telerik
.
Web
.
UI
.
GridCommandEventArgs);
method RadGrid1_ItemUpdated(source: System
.
Object; e: Telerik
.
Web
.
UI
.
GridUpdatedEventArgs);
property
grdData: RadGrid read GetDataGrid;
end
;
implementation
method GridTest
.
GetDataGrid: RadGrid;
begin
Result := RadGrid1;
end
;
method GridTest
.
Page_Load(sender: Object; e: EventArgs);
begin
FGridHelper := new TGridHelper(EasyIPConnection, grdData, Session);
end
;
method GridTest
.
RadGrid1_ItemUpdated(source: System
.
Object; e: Telerik
.
Web
.
UI
.
GridUpdatedEventArgs);
begin
FGridHelper
.
UpdateCommand(source, e);
end
;
method GridTest
.
RadGrid1_UpdateCommand(sender: Object; e: Telerik
.
Web
.
UI
.
GridCommandEventArgs);
var
editedItem : GridEditableItem;
PlantID,PlantName,updateQuery : String;
NewValues: Hashtable;
begin
editedItem := e
.
Item
as
GridEditableItem;
var
editMan : GridEditManager;
editMan := editedItem
.
EditManager;
//for each column:GridColumn in e.Item.OwnerTableView.RenderColumns do
//begin
//if (column is IGridEditableColumn) then
//begin
//var str : String;
//str := "abc";
//end;
//end;
//
//var txt := new TextBox;
NewValues := new Hashtable;
e
.
Item
.
OwnerTableView
.
ExtractValuesFromItem(NewValues, editedItem);
end
;
method GridTest
.
RadGrid1_NeedDataSource(source: System
.
Object; e: Telerik
.
Web
.
UI
.
GridNeedDataSourceEventArgs);
var
SubnetData : DataTable;
begin
//if Boolean(Session['LoggedIn']) then
//FGridHelper.OpenGrid(FTreeHelper.GetNodeData(tvSubnets.SelectedNode).NodeType,
//FTreeHelper.GetNodeData(tvSubnets.SelectedNode).AutonomousNetworkId,
//FTreeHelper.GetNodeData(tvSubnets.SelectedNode).SubnetId);
// When we require to pass field id than we have to use this method and remove comment.
// FGridHelper.OpenGrid(RadTextBox2.Text.Trim,hdnSearchText.Value.ToUpper,getUserTableID(hdnSearchText.Value.ToUpper),GetOption(hdnSearchMethod.Value),GetFieldId(hdnFieldList.Value.ToString()));
// Bind grid for right side search
//FGridHelper.OpenGrid( ("","SUBNET","SUBNET","",nil);
FGridHelper
.
OpenGrid("","ADDRESSES",
2
,EasyIPLibrary_Intf
.
TSearchOption
.
soContains,
nil
)
end
;
Class Flle
TGridHelper =
public
class
private
FGridView: RadGrid;
FEasyIPConnection: TClientConnection;
FTableType: TTableType;
FDataset: DataSet;
FDatatable: DataTable;
FSession: HttpSessionState;
method FGridView_UpdateCommand(source: Object; e: GridCommandEventArgs);
procedure
DeleteCommand(source: System
.
Object; e: GridCommandEventArgs);
method FGridView_DeleteCommand(source: Object; e: GridCommandEventArgs);
method ItemDataBound(sender: System
.
Object; e: Telerik
.
Web
.
UI
.
GridItemEventArgs);
function
AddNewColumn(FieldName, HeaderText: String; IsReadOnly: Boolean): GridBoundColumn;
method CreateColumnEditor(sender: System
.
Object; e: Telerik
.
Web
.
UI
.
GridCreateColumnEditorEventArgs);
method ItemCreated(sender: System
.
Object; e: Telerik
.
Web
.
UI
.
GridItemEventArgs);
method ItemCommand(sender: System
.
Object; e: Telerik
.
Web
.
UI
.
GridCommandEventArgs);
method UpdateCommand(sender: System
.
Object; e: Telerik
.
Web
.
UI
.
GridCommandEventArgs);
method ItemUpdated(sender: System
.
Object; e: Telerik
.
Web
.
UI
.
GridUpdatedEventArgs);
property
Session: HttpSessionState read FSession;
protected
public
constructor
(EasyIPConnection: TClientConnection; Grid: RadGrid; ASession: HttpSessionState);
method OpenGrid(NodeType: TNodeType; AutonomousNetworkId, SubnetId: Int64);
method OpenGrid(
const
SearchText: String;
const
TableName: String; TableId: Int64; SearchOption: TSearchOption; FieldIds: Array
of
System
.
Int64);
method OpenGrid(
const
TableName: String);
method OpenGrid;
method UpdateCommand(source: System
.
Object; e: Telerik
.
Web
.
UI
.
GridUpdatedEventArgs);
method CloseGrid;
end
;
implementation
const
ImageInfoField =
'_IMAGE_INFO_FIELD_'
;
constructor
TGridHelper(EasyIPConnection: TClientConnection; Grid: RadGrid; ASession: HttpSessionState);
begin
FEasyIPConnection := EasyIPConnection;
FSession := ASession;
FGridView := Grid;
FGridView
.
ItemDataBound += @ItemDataBound;
FGridView
.
ItemUpdated += @UpdateCommand;
FGridView
.
DeleteCommand += @DeleteCommand;
FGridView
.
CreateColumnEditor += @CreateColumnEditor;
FGridView
.
ItemCommand += @ItemCommand;
FGridView
.
UpdateCommand += @UpdateCommand;
end
;
function
TGridHelper
.
AddNewColumn(FieldName, HeaderText: String; IsReadOnly: Boolean): GridBoundColumn;
begin
Result := new GridBoundColumn;
Result
.
ReadOnly := IsReadOnly;
Result
.
HeaderText := HeaderText;
Result
.
DataField := FieldName;
Result
.
HeaderStyle
.
Wrap := FALSE;
Result
.
ItemStyle
.
Wrap := FALSE;
Result
.
UniqueName := FieldName;
if
HeaderText =
'Subnet icon'
then
begin
Result
.
HeaderText := "";
Result
.
HeaderStyle
.
Width :=
30
;
Result
.
ItemStyle
.
HorizontalAlign := Result
.
ItemStyle
.
HorizontalAlign
.
Center;
Result
.
Resizable :=
false
;
Result
.
Reorderable :=
false
;
end
else
Result
.
HeaderStyle
.
Width :=
350
;
FGridView
.
MasterTableView
.
Columns
.
Add(Result);
end
;
method TGridHelper
.
ItemDataBound(sender: System
.
Object; e: Telerik
.
Web
.
UI
.
GridItemEventArgs);
var
AGridItem: GridDataItem;
AValue: String;
NormalImageURL, SelectedImageURL: String;
i: Integer;
UserField: TUserField;
LookupItem: TUserFieldLookup;
Column: GridBoundColumn;
ImageInfos: TStringList;
begin
if
e
.
Item
is
GridDataItem
then
begin
AGridItem := GridDataItem(e
.
Item);
if
FTableType = TTableType
.
ttSubnets
then
begin
ImageInfos := new TStringList;
// CIDR_MASK, ADDRESS_COUNT, CHILD_COUNT, ITEM_TYPE, SECONDARY_ITEM_TYPE
for
each s:String
in
AGridItem[ImageInfoField].Text
.
Split([
','
])
do
ImageInfos
.
Add(s);
if
ImageInfos
.
Count =
5
then
begin
if
ImageInfos[
3
] =
'G'
then
GetNodeImages(NormalImageURL, SelectedImageURL,
TNodeType
.
ntGroup)
else
GetNodeImages(NormalImageURL, SelectedImageURL,
TNodeType
.
ntSubnet,
Integer
.
Parse(ImageInfos[
0
]),
ImageInfos[
1
] <>
'0'
,
ImageInfos[
2
] <>
'0'
);
AGridItem[ImageInfoField].Text := system
.
string
.
format(
'<img src="{0}" alt="" style="border-width:0px"/>'
, [NormalImageURL]);
end
else
AGridItem[ImageInfoField].Text :=
''
;
end
;
for
i :=
0
to
pred(FGridView
.
Columns
.
Count)
do
begin
if
FGridView
.
Columns[i]
is
GridBoundColumn
then
begin
Column := FGridView
.
Columns[i]
as
GridBoundColumn;
UserField := FEasyIPConnection
.
FindUserField(TableTypeToTableName(FTableType), Column
.
DataField);
if
Assigned(UserField)
then
begin
LookupItem :=
nil
;
for
LoopLookupItem
in
UserField
.
LookupList
do
if
LoopLookupItem
.
Caption = AValue
then
begin
LookupItem := LoopLookupItem;
Break;
end
;
if
Assigned(LookupItem)
then
begin
if
LookupItem
.
Description <>
''
then
AGridItem
.
Cells[i].Text := LookupItem
.
Description;
if
LookupItem
.
FontColour <>
nil
then
AGridItem
.
Cells[i].ForeColor := GetWebColor(Integer(LookupItem
.
FontColour));
if
LookupItem
.
BackgroundColour <>
nil
then
AGridItem
.
Cells[i].BackColor := GetWebColor(Integer(LookupItem
.
BackgroundColour));
AGridItem
.
Cells[i].Font
.
Bold := LookupItem
.
FontBold;
AGridItem
.
Cells[i].Font
.
Underline := LookupItem
.
FontUnderline;
AGridItem
.
Cells[i].Font
.
Italic := LookupItem
.
FontItalic;
end
else
begin
if
UserField
.
BackgroundColour <>
nil
then
AGridItem
.
Cells[i].BackColor := GetWebColor(Integer(UserField
.
BackgroundColour));
if
UserField
.
FontColour <>
nil
then
AGridItem
.
Cells[i].ForeColor := GetWebColor(Integer(UserField
.
FontColour));
AGridItem
.
Cells[i].Font
.
Bold := UserField
.
FontBold;
AGridItem
.
Cells[i].Font
.
Underline := UserField
.
FontUnderline;
AGridItem
.
Cells[i].Font
.
Italic := UserField
.
FontItalic;
end
;
end
;
end
;
end
;
end
;
end
;
method TGridHelper
.
UpdateCommand(source: System
.
Object; e: Telerik
.
Web
.
UI
.
GridUpdatedEventArgs);
var
EditedItem: GridEditableItem;
SubnetId, KeyValue: Int64;
NewValues: Hashtable;
FieldNames: List<String>;
FieldValues: List<Object>;
TableName: String;
i: Integer;
begin
EditedItem := e
.
Item
as
GridEditableItem;
KeyValue := Int64(e
.
Item
.
OwnerTableView
.
DataKeyValues[e
.
Item
.
ItemIndex][
'ID'
]);
NewValues := Hashtable
.
Create;
FieldNames := new List<String>;
FieldValues := new List<Object>;
//The GridTableView will fill the values from all editable columns in the hash
e
.
Item
.
OwnerTableView
.
ExtractValuesFromItem(NewValues, EditedItem);
for
Entry:KeyValuePair<String, Object>
in
NewValues
do
begin
FieldNames
.
Add(Entry
.
Key
.
ToString);
FieldValues
.
Add(Entry
.
Value);
end
;
case
FTableType
of
TTableType
.
ttAddresses: TableName :=
'ADDRESSES_USER_DATA'
;
TTableType
.
ttSubnets: TableName :=
'SUBNETS_USER_DATA'
;
end
;
// case
FEasyIPConnection
.
UpdateUserFields(TableName, KeyValue, FieldNames
.
ToArray, FieldValues
.
ToArray);
(* ChangedRow := ChangedRows[0];
ChangedRow.BeginEdit;
ATransaction := nil;
try
for Entry in newValues do
begin
FieldPropertiesItem := SessionHelper.FieldPropertiesList.GetFieldPropertiesItem(Session['TableName'].ToString, Entry.Key.ToString);
if (Assigned(FieldPropertiesItem)) and (FieldPropertiesItem.Mandatory) and ((not Assigned(Entry.Value)) or (Entry.Value.ToString = '')) then
raise EEasyIPError.Create(system.string.Format(GetLocalisationString(105), [Entry.Key.ToString]));
if not Assigned(entry.Value) then // Null cannot be assigned to ChangedRow
ChangedRow[entry.Key.ToString] := DBNULL.Value
else
try
ChangedRow[entry.Key.ToString] := entry.Value;
except
raise EEasyIPError.Create(system.string.format(GetLocalisationString(28), [entry.Value, entry.Key.ToString]));
end;
if SetSQL <> '' then
SetSQL := concat(SetSQL, ',');
SetSQL := system.string.format('{0}"{1}"=@P{2}', [SetSQL, entry.Key.ToString, ParamCounter.ToString]);
SessionHelper.DBConnection.SQLCommand.Parameters.Add(FBParameter.Create(system.string.format('@P{0}', [ParamCounter.ToString]), ChangedRow[entry.Key.ToString]));
inc(ParamCounter);
end;
UpdateText := system.string.format(UpdateText, [SetSQL]);
SessionHelper.ExecuteQuery(UpdateText);
ChangedRow.EndEdit;
SessionHelper.DBConnection.DataSet.AcceptChanges;
SessionHelper.CommitTransaction;
except
on ex:Exception do
begin
ChangedRow.CancelEdit;
e.Canceled := TRUE;
SessionHelper.RollbackTransaction;
With (e.Item as GridEditFormItem).FindControl('lblUpdateErrorTop') as &Label do
begin
Text := SessionHelper.DBConnection.TranslateException(ex);
Visible := TRUE;
end;
With (e.Item as GridEditFormItem).FindControl('lblUpdateErrorBottom') as &Label do
begin
Text := SessionHelper.DBConnection.TranslateException(ex);
Visible := TRUE;
end;
end;
end;
end;*)
end
;
procedure
TGridHelper
.
DeleteCommand(source: System
.
Object; e: GridCommandEventArgs);
var
EditedItem: GridEditableItem;
SubnetId, KeyValue: Int64;
begin
EditedItem := e
.
Item
as
GridEditableItem;
KeyValue := Int64(e
.
Item
.
OwnerTableView
.
DataKeyValues[e
.
Item
.
ItemIndex][
'ID'
]);
SubnetId := Int64(Session[
'LastDataGridSubnetId'
]);
FEasyIPConnection
.
DeleteIPAddressesById(SubnetId, [KeyValue]);
end
;
method TGridHelper
.
CloseGrid;
begin
FGridView
.
DataSource :=
nil
;
FGridView
.
Visible := FALSE;
end
;
method TGridHelper
.
OpenGrid(NodeType: TNodeType; AutonomousNetworkId, SubnetId: Int64);
begin
FDataSet :=
nil
;
FTableType := TTableType
.
ttSubnets;
case
NodeType
of
TNodeType
.
ntAutonomousNetwork:
begin
FDataSet := FEasyIPConnection
.
GetGridRootNodes(AutonomousNetworkId);
end
;
TNodeType
.
ntGroupWithChildren,
TNodeType
.
ntRestrictedGroupWithChildren,
TNodeType
.
ntSubnetWithChildren:
begin
FDataSet := FEasyIPConnection
.
GetGridChildNodes(AutonomousNetworkId, SubnetId);
end
;
TNodeType
.
ntSubnetWithIPAddresses:
begin
FDataSet := FEasyIPConnection
.
GetGridNodeIPAddresses(SubnetId);
FTableType := TTableType
.
ttAddresses;
end
;
end
;
// case
if
Assigned(FDataSet)
then
begin
FGridView
.
DataSource := FDataSet;
FGridView
.
MasterTableView
.
DataMember := FDataset
.
Tables[
0
].TableName;
FGridView
.
Visible := TRUE;
OpenGrid;
end
else
CloseGrid;
Session[
'LastDataGridSubnetId'
] := SubnetId;
end
;
method TGridHelper
.
OpenGrid;
const
IMAGE_COL_WIDTH =
30
;
var
UserFields:
array
of
TUserField;
NewButton: GridEditCommandColumn;
NewGridButtonColumn: GridButtonColumn;
KeyFieldNames: Array
of
String;
i, FixedColCount: Integer;
VisibleColumnCount, VisibleColumnIndex: Integer;
begin
FGridView
.
Columns
.
Clear;
FixedColCount :=
0
;
VisibleColumnCount :=
0
;
SetLength(KeyFieldNames,
1
);
KeyFieldNames[
0
] :=
'ID'
;
FGridView
.
MasterTableView
.
DataKeyNames := KeyFieldNames;
case
FTableType
of
TTableType
.
ttSubnets:
begin
FGridView
.
MasterTableView
.
EditFormSettings
.
CaptionDataField :=
'SHORT_SUBNET'
;
FGridView
.
MasterTableView
.
EditFormSettings
.
CaptionFormatString :=
'Subnet: <B>{0}</B>'
;
end
;
TTableType
.
ttAddresses:
begin
FGridView
.
MasterTableView
.
EditFormSettings
.
CaptionDataField :=
'SHORT_IP_ADDRESS'
;
FGridView
.
MasterTableView
.
EditFormSettings
.
CaptionFormatString :=
'IP Address: <B>{0}</B>'
;
end
;
end
;
FGridView
.
AutoGenerateEditColumn :=
true
;
FGridView
.
AllowAutomaticUpdates :=
false
;
// Create edit button
NewButton := GridEditCommandColumn
.
Create;
FGridView
.
Columns
.
Add(NewButton);
NewButton
.
ButtonType := Telerik
.
Web
.
UI
.
GridButtonColumnType
.
ImageButton;
NewButton
.
Groupable := FALSE;
NewButton
.
HeaderStyle
.
Width := IMAGE_COL_WIDTH;
NewButton
.
Reorderable := FALSE;
NewButton
.
Resizable := FALSE;
Inc(FixedColCount);
// Create delete button
if
FTableType = TTableType
.
ttAddresses
then
begin
NewGridButtonColumn := GridButtonColumn
.
Create;
FGridView
.
Columns
.
Add(NewGridButtonColumn);
NewGridButtonColumn
.
CommandName :=
'Delete'
;
NewGridButtonColumn
.
ConfirmText :=
'Are you sure you want to delete the selected IP address?'
;
NewGridButtonColumn
.
Text :=
'<img src="./Images/General/Delete.png" alt="x" style="border-width:0px"/>'
;
NewGridButtonColumn
.
HeaderStyle
.
Width := IMAGE_COL_WIDTH;
NewGridButtonColumn
.
Groupable := FALSE;
NewGridButtonColumn
.
Reorderable := FALSE;
NewGridButtonColumn
.
Resizable := FALSE;
Inc(FixedColCount);
end
;
// Find the fields for the selected table
UserFields := FEasyIPConnection
.
GetUserFields(TableTypeToTableName(FTableType));
for
UserField
in
UserFields
do
begin
if
((UserField
.
Selectable)
and
(
not
UserField
.
HiddenColumn))
or
((FTableType = TTableType
.
ttSubnets)
and
(UserField
.
FieldName = ImageInfoField))
then
begin
if
UserField
.
FixedColumn
then
Inc(FixedColCount);
if
UserField
.
DisplayName =
''
then
AddNewColumn(UserField
.
FieldName, Uncapitalise(UserField
.
FieldName), UserField
.
ReadOnly)
else
AddNewColumn(UserField
.
FieldName, UserField
.
DisplayName, UserField
.
ReadOnly);
if
not
UserField
.
ReadOnly
then
Inc(VisibleColumnCount);
end
;
end
;
FGridView
.
ClientSettings
.
Scrolling
.
FrozenColumnsCount := FixedColCount;
VisibleColumnIndex :=
0
;
for
i :=
0
to
pred(FGridView
.
Columns
.
Count)
do
if
(FGridView
.
Columns[i]
is
GridBoundColumn)
and
(GridBoundColumn(FGridView
.
Columns[i]).Visible)
and
(
not
GridBoundColumn(FGridView
.
Columns[i]).ReadOnly)
then
begin
GridBoundColumn(FGridView
.
Columns[i]).EditFormColumnIndex := Trunc((System
.
Double(FGridView
.
MasterTableView
.
EditFormSettings
.
ColumnNumber) / System
.
Double(VisibleColumnCount)) * System
.
Double(VisibleColumnIndex));
Inc(VisibleColumnIndex);
end
;
end
;
method TGridHelper
.
ItemCreated(sender: System
.
Object; e: Telerik
.
Web
.
UI
.
GridItemEventArgs);
//var
// lbl: &Label;
begin
{if (e.Item is GridEditFormItem) and (e.Item.IsInEditMode) then
begin
lbl := &Label.Create;
lbl.ID := 'lblUpdateErrorTop';
lbl.Visible := false;
lbl.CssClass := 'label_error';
(e.Item as GridEditFormItem).EditFormCell.Controls.AddAt(0, lbl);
lbl := &Label.Create;
lbl.ID := 'lblUpdateErrorBottom';
lbl.Visible := false;
lbl.CssClass := 'label_error';
(e.Item as GridEditFormItem).EditFormCell.Controls.Add(lbl);
end;}
end
;
method TGridHelper
.
CreateColumnEditor(sender: System
.
Object; e: Telerik
.
Web
.
UI
.
GridCreateColumnEditorEventArgs);
var
UserField: TUserField;
MaxLength: Integer;
FieldName, Skin: String;
ARadComboBoxItem: RadComboBoxItem;
ARadComboBox: RadComboBox;
begin
if
e
.
Column
is
GridBoundColumn
then
begin
MaxLength :=
0
;
UserField := FEasyIPConnection
.
FindUserField(TableTypeToTableName(FTableType), (e
.
Column
as
GridBoundColumn).DataField);
if
Assigned(UserField)
then
begin
FieldName := (e
.
Column
as
GridBoundColumn).DataField
.
ToString;
MaxLength := UserField
.
FieldSize;
if
UserField
.
FieldType
in
[TEIPDataType
.
edatString, TEIPDataType
.
edatWideString]
then
begin
if
UserField
.
LookupType <> TUserFieldLookupType
.
ltNone
then
begin
e
.
ColumnEditor := new TCustomColumnEditor(concat(
'DropDown_'
, FieldName), TEditorType
.
etComboBox);
ARadComboBox := ((e
.
ColumnEditor
as
TCustomColumnEditor).EditControl
as
RadComboBox);
ARadComboBox
.
AllowCustomText := UserField
.
LookupType = TUserFieldLookupType
.
ltEditable;
ARadComboBox
.
Items
.
Clear;
for
LookupItem
in
UserField
.
LookupList
do
begin
ARadComboBoxItem := new RadComboBoxItem;
ARadComboBoxItem
.
Value := LookupItem
.
Caption;
ARadComboBoxItem
.
Text := LookupItem
.
Caption;
if
LookupItem
.
FontColour <>
nil
then
ARadComboBoxItem
.
ForeColor := GetWebColor(Integer(LookupItem
.
FontColour));
if
LookupItem
.
BackgroundColour <>
nil
then
ARadComboBoxItem
.
BackColor := GetWebColor(Integer(LookupItem
.
BackgroundColour));
ARadComboBoxItem
.
Font
.
Bold := LookupItem
.
FontBold;
ARadComboBoxItem
.
Font
.
Underline := LookupItem
.
FontUnderline;
ARadComboBoxItem
.
Font
.
Italic := LookupItem
.
FontItalic;
ARadComboBox
.
Items
.
Add(ARadComboBoxItem);
end
;
ARadComboBoxItem := RadComboBoxItem
.
Create;
ARadComboBoxItem
.
Value :=
''
;
ARadComboBoxItem
.
Text :=
'[Blank]'
;
ARadComboBox
.
Items
.
Add(ARadComboBoxItem);
ARadComboBox
.
MaxLength := MaxLength;
end
else
if
UserField
.
EditMask <>
''
then
begin
e
.
ColumnEditor := new TCustomColumnEditor(concat(
'MaskEdit_'
, FieldName), TEditorType
.
etMaskedText);
((e
.
ColumnEditor
as
TCustomColumnEditor).EditControl
as
RadMaskedTextBox).Mask := UserField
.
EditMask;
((e
.
ColumnEditor
as
TCustomColumnEditor).EditControl
as
RadMaskedTextBox).MaxLength := MaxLength;
end
else
begin
e
.
ColumnEditor := new TCustomColumnEditor(concat(
'Edit_'
, FieldName), TEditorType
.
etText);
((e
.
ColumnEditor
as
TCustomColumnEditor).EditControl
as
RadTextBox).MaxLength := MaxLength;
end
;
end
else
begin
if
UserField
.
FieldType
in
[TEIPDataType
.
edatWideMemo, TEIPDataType
.
edatMemo]
then
e
.
ColumnEditor := new TCustomColumnEditor(concat(
'TextBox_'
, FieldName), TEditorType
.
etMemo, Skin);
end
;
end
;
end
;
end
;
method TGridHelper
.
FGridView_DeleteCommand(source: Object; e: GridCommandEventArgs);
begin
end
;
method TGridHelper
.
OpenGrid(
const
SearchText: String;
const
TableName: String; TableId: Int64; SearchOption: TSearchOption; FieldIds: Array
of
System
.
Int64);
begin
if
TableName =
'SUBNETS'
then
begin
FTableType := TTableType
.
ttSubnets;
FDatatable := FEasyIPConnection
.
SearchTableBasic(TableId,SearchText,SearchOption,FieldIds);
end
else
if
TableName =
'ADDRESSES'
then
begin
FTableType := TTableType
.
ttAddresses;
FDatatable := FEasyIPConnection
.
SearchTableBasic(TableId,SearchText,SearchOption,FieldIds);
end
else
if
TableName =
'GLOBAL ARP TABLE'
then
begin
FDatatable := FEasyIPConnection
.
SearchARPEntries(SearchText);
end
else
begin
// raise error
end
;
// Load FDataset here (FDataset := FEasyIPConnection.SearchTableBasic(....
if
FDatatable <>
nil
then
begin
FGridView
.
DataSource := FDatatable;
FGridView
.
MasterTableView
.
DataMember := FDatatable
.
TableName;
FGridView
.
Visible := TRUE;
OpenGrid;
end
;
end
;
method TGridHelper
.
OpenGrid(
const
TableName: String);
begin
FGridView
.
DataSource := FEasyIPConnection
.
GetUserFields(TableName
.
ToUpper());;;
FGridView
.
MasterTableView
.
DataMember := FDatatable
.
TableName;
FGridView
.
Visible := TRUE;
OpenGrid;
end
;
method TGridHelper
.
ItemCommand(sender: System
.
Object; e: Telerik
.
Web
.
UI
.
GridCommandEventArgs);
begin
if
e
.
CommandName = RadGrid
.
EditCommandName
then
begin
//OpenGrid;
end
;
if
e
.
CommandName = RadGrid
.
InitInsertCommandName
then
FGridView
.
MasterTableView
.
ClearEditItems();
if
e
.
CommandName = RadGrid
.
UpdateCommandName
then
begin
//UpdateCommand(sender,e);
//var str : String;
//str := "Update"
end
end
;
method TGridHelper
.
ItemUpdated(sender: System
.
Object; e: Telerik
.
Web
.
UI
.
GridUpdatedEventArgs);
var
EditedItem: GridEditableItem;
begin
EditedItem := e
.
Item
as
GridEditableItem;
end
;
method TGridHelper
.
UpdateCommand(sender: System
.
Object; e: Telerik
.
Web
.
UI
.
GridCommandEventArgs);
var
EditedItem: GridEditableItem;
Item : GridEditFormItem;
SubnetId, KeyValue: Int64;
NewValues: Hashtable;
FieldNames: List<String>;
FieldValues: List<Object>;
TableName,PlantName: String;
i: Integer;
begin
EditedItem := e
.
Item
as
GridEditableItem;
FGridView
.
MasterTableView
.
ClearEditItems();
KeyValue := Int64(e
.
Item
.
OwnerTableView
.
DataKeyValues[e
.
Item
.
ItemIndex][
'ID'
]);
NewValues := new Hashtable;
FieldNames := new List<String>;
FieldValues := new List<Object>;
if
e
.
Item
.
IsInEditMode =
true
then
begin
var
str : String;
str := "Edit";
end
;
//The GridTableView will fill the values from all editable columns in the hash
e
.
Item
.
OwnerTableView
.
ExtractValuesFromItem(NewValues, EditedItem);
var
IPAddress : String;
IPAddress := (editedItem["Location"].Controls[
1
]
as
TextBox).Text;
for
Entry:DictionaryEntry
in
NewValues
do
begin
FieldNames
.
Add(Entry
.
Key
.
ToString);
FieldValues
.
Add(Entry
.
Value);
end
;
case
FTableType
of
TTableType
.
ttAddresses: TableName :=
'ADDRESSES_USER_DATA'
;
TTableType
.
ttSubnets: TableName :=
'SUBNETS_USER_DATA'
;
end
;
// case
FEasyIPConnection
.
UpdateUserFields(TableName, KeyValue, FieldNames
.
ToArray, FieldValues
.
ToArray);
(* ChangedRow := ChangedRows[0];
ChangedRow.BeginEdit;
ATransaction := nil;
try
for Entry in newValues do
begin
FieldPropertiesItem := SessionHelper.FieldPropertiesList.GetFieldPropertiesItem(Session['TableName'].ToString, Entry.Key.ToString);
if (Assigned(FieldPropertiesItem)) and (FieldPropertiesItem.Mandatory) and ((not Assigned(Entry.Value)) or (Entry.Value.ToString = '')) then
raise EEasyIPError.Create(system.string.Format(GetLocalisationString(105), [Entry.Key.ToString]));
if not Assigned(entry.Value) then // Null cannot be assigned to ChangedRow
ChangedRow[entry.Key.ToString] := DBNULL.Value
else
try
ChangedRow[entry.Key.ToString] := entry.Value;
except
raise EEasyIPError.Create(system.string.format(GetLocalisationString(28), [entry.Value, entry.Key.ToString]));
end;
if SetSQL <> '' then
SetSQL := concat(SetSQL, ',');
SetSQL := system.string.format('{0}"{1}"=@P{2}', [SetSQL, entry.Key.ToString, ParamCounter.ToString]);
SessionHelper.DBConnection.SQLCommand.Parameters.Add(FBParameter.Create(system.string.format('@P{0}', [ParamCounter.ToString]), ChangedRow[entry.Key.ToString]));
inc(ParamCounter);
end;
UpdateText := system.string.format(UpdateText, [SetSQL]);
SessionHelper.ExecuteQuery(UpdateText);
ChangedRow.EndEdit;
SessionHelper.DBConnection.DataSet.AcceptChanges;
SessionHelper.CommitTransaction;
except
on ex:Exception do
begin
ChangedRow.CancelEdit;
e.Canceled := TRUE;
SessionHelper.RollbackTransaction;
With (e.Item as GridEditFormItem).FindControl('lblUpdateErrorTop') as &Label do
begin
Text := SessionHelper.DBConnection.TranslateException(ex);
Visible := TRUE;
end;
With (e.Item as GridEditFormItem).FindControl('lblUpdateErrorBottom') as &Label do
begin
Text := SessionHelper.DBConnection.TranslateException(ex);
Visible := TRUE;
end;
end;
end;
end;*)
end
;
method TGridHelper
.
FGridView_UpdateCommand(source: Object; e: GridCommandEventArgs);
begin
end
;
On RadGrid1_UpdateCommand method when i try to get new values i got an error.
e.Item.OwnerTableView.ExtractValuesFromItem(NewValues, editedItem); --- Here i got an error.