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;implementationmethod 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;implementationconst 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);beginend;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);beginend;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.