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

e.Item.OwnerTableView.ExtractValuesFromItem Not Working

1 Answer 348 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Kaushal
Top achievements
Rank 1
Kaushal asked on 25 Nov 2010, 06:51 AM
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

<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.

1 Answer, 1 is accepted

Sort by
0
Pavlina
Telerik team
answered on 25 Nov 2010, 10:22 AM
Hi Kaushal,

I noticed that you have opened a duplicate post on the same matter. Please, refer to the other forum ticket post for additional information. To avoid duplicate posts, you can continue the communication there

Greetings,
Pavlina
the Telerik team
Browse the vast support resources we have to jumpstart your development with RadControls for ASP.NET AJAX. See how to integrate our AJAX controls seamlessly in SharePoint 2007/2010 visiting our common SharePoint portal.
Tags
Grid
Asked by
Kaushal
Top achievements
Rank 1
Answers by
Pavlina
Telerik team
Share this question
or