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

Can't get ExtractValuesFromItem to work...

1 Answer 53 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Kevin
Top achievements
Rank 1
Kevin asked on 28 Oct 2013, 03:30 PM
Hello All,
In searching the various Telerik webpages outthere I found:
http://www.telerik.com/help/aspnet-ajax/grid-updating-inplace-and-editforms.html , that has examples on how to use the builtin edit form to edit a row in the grid...  I've tried to get my code as close as possible, but I'm not getting very far.  When it gets to the line:
e.Item.OwnerTableView.ExtractValuesFromItem(newValues, editableItem)
It give me an error of "NullReferenceException occurred"

Here is my page and the code behind as well:
<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/Site.Master" ValidateRequest="false"
    CodeBehind="AppSettings.aspx.vb" Inherits="AdminTools.AppSettings" MaintainScrollPositionOnPostback="true" %>
 
<%@ MasterType VirtualPath="~/Site.Master" %>
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentHeader" runat="server">
    <style type="text/css">
        .div
        {
            clear: both;
            padding: 5px;
        }
         
        .col1
        {
            float: left;
            width: 75%;
            background-color: #E1E1E1;
            min-height: 700px;
        }
         
        .col2
        {
            float: left;
            width: 20%;
            background-color: #EFEFEF;
            min-height: 700px;
            padding-left: 10px;
        }
         
        .row
        {
            clear: both;
            padding: 5px;
        }
         
        .cell
        {
            float: left;
            min-width: 200px;
            padding-right: 15px;
        }
    </style>
    <script type="text/javascript">
 
        function ShowNewForm(element) {
            var objElement = $get(element);
            if (objElement.style.visibility == "hidden") {
                objElement.style.visibility = "visible";
                objElement.style.display = "";
            }
            else {
                objElement.style.visibility = "hidden";
                objElement.style.display = "none";
            }
        }
 
    </script>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <div id="PageMain">
        <div style="margin: 50px;">
            <div id="Applications" class="div">
                <div class="div">
                    Application:</div>
                <div>
                    <telerik:RadComboBox ID="cboApplication" runat="server" AutoPostBack="true" Width="200px">
                    </telerik:RadComboBox>
                </div>
            </div>
            <div id="Settings"  runat="server" class="div">
                <telerik:RadGrid
                    ID="dgvAppSettings" runat="server" skin="Outlook" AllowPaging="true" Pagesize="20"
                    AllowSorting="true"
                    AutoGenerateColumns="false"
                    OnNeedDataSource="dgvAppSettings_OnNeedDataSource"
                    OnItemCommand="dgvAppSettings_ItemCommand"
                    ShowStatusBar="true">
 
                    <ClientSettings EnableAlternatingItems="true" EnableRowHoverStyle="true" EnablePostBackOnRowClick="true"  >
                        <Selecting AllowRowSelect="true" />
                    </ClientSettings>
             
                    <MasterTableView
                        CommandItemDisplay="Bottom"
                        AutoGenerateColumns="false"
                        DataKeyNames="ID">
                        <Columns>
                            <telerik:GridEditCommandColumn AutoPostBackOnFilter="true" ButtonType="ImageButton" UniqueName="EditCommandColumn">
                            </telerik:GridEditCommandColumn>
                            <telerik:GridBoundColumn DataField="ID" HeaderText="ID" SortExpression="ID"
                                UniqueName="ID" Visible="false" MaxLength="5" ReadOnly="true">
                            </telerik:GridBoundColumn>
                            <telerik:GridBoundColumn DataField="AppID" HeaderText="AppID" SortExpression="AppID"
                                UniqueName="AppID" Visible="false" MaxLength="5">
                            </telerik:GridBoundColumn>
                            <telerik:GridBoundColumn DataField="SettingType" HeaderText="Setting Type"
                                UniqueName="SettingType" Visible="true" MaxLength="5">
                            </telerik:GridBoundColumn>
                            <telerik:GridBoundColumn DataField="SettingName" HeaderText="Setting Name"
                                UniqueName="SettingName" Visible="true" MaxLength="50">
                            </telerik:GridBoundColumn>
                            <telerik:GridBoundColumn DataField="SettingValue" HeaderText="Setting Value"
                                UniqueName="SettingValue" Visible="true">
                            </telerik:GridBoundColumn>
                        </Columns>
                        <EditFormSettings>
                            <EditColumn ButtonType="ImageButton" />
                        </EditFormSettings>
                    </MasterTableView>   
                </telerik:RadGrid>
                <asp:Label ID="Label1" runat="server" />
            </div>
        </div>
    </div>
</asp:Content>

and here is my code behind for the update event:
Protected Sub dgvAppSettings_UpdateCommand(sender As Object, e As Telerik.Web.UI.GridCommandEventArgs) Handles dgvAppSettings.UpdateCommand
    Dim editableItem = (DirectCast(e.Item, GridEditableItem))
 
    Dim SettingsTable As DataTable = Me.GridSource
    Dim changedRows As DataRow() = SettingsTable.Select("ID = " + editableItem.OwnerTableView.DataKeyValues(editableItem.ItemIndex)("ID").ToString())
    If changedRows.Length <> 1 Then
        e.Canceled = True
        Return
    End If
 
    Dim newValues As New Hashtable()
    ' ***
    ' It get past the "Dim of newValues..." just fine... however, on the next line it give me the error...
    ' ***
    e.Item.OwnerTableView.ExtractValuesFromItem(newValues, editableItem)
     
    changedRows(0).BeginEdit()
    Try
        For Each entry As DictionaryEntry In newValues
            changedRows(0)(DirectCast(entry.Key, String)) = entry.Value
        Next
        changedRows(0).EndEdit()
    Catch ex As Exception
        changedRows(0).CancelEdit()
        e.Canceled = True
    End Try
 
    Label1.Text += " Table to be updated: " + e.Item.OwnerTableView.DataMember + "<br>"
 
End Sub

OK all,  Any Ideas as to what the heck I'm doing wrong????  
as a caveat, I'm a total "Newbie" at the telerik controls, and it's been a long time since I've done any ASP programming, like back before ASP.Net, yes back in the classic days...

Thanks in advance,

Kevin Orcutt
Kevin.Orcutt@MatsomMoney.com

1 Answer, 1 is accepted

Sort by
0
Angel Petrov
Telerik team
answered on 31 Oct 2013, 11:45 AM
Hello Kevin,

Actually the setup seems correct and you should not experience such behavior. Using the provided code I have created a sample website in an attempt to reproduce the problem but was unable to do so. Please examine the attached test project and tell us what differs in your case. If you could modify it so that the problem is reproducible we should be able to precisely determine what is causing it.

Regards,
Angel Petrov
Telerik
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to the blog feed now.
Tags
Grid
Asked by
Kevin
Top achievements
Rank 1
Answers by
Angel Petrov
Telerik team
Share this question
or