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

[Solved] Newbie with RadGrid question on manual insert/update

1 Answer 123 Views
Grid
This is a migrated thread and some comments may be shown as answers.
David
Top achievements
Rank 1
David asked on 16 Apr 2013, 08:44 PM
Hi,

I am converting a VS2008 application to use Telerik controls, and I am starting with RadGrid. In my test I have made a RadGrid that I populate from a linq query. The grid draws fine, paging works and the edit/insert/delete works from the user interface. When I try to do an insert or update I can't seem to get at the underlying data. I have tried a couple ways to do this (based on the online examples) and I'm stumped. I suspect I am missing something simple.

Here is the aspx:



<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/main.Master" CodeBehind="adminMetrics.aspx.vb" Inherits="BPS.adminMetrics" %>
<%@ Register src="controls/nav.ascx" tagname="nav" tagprefix="uc1" %>
<%@ Register src="controls/msg.ascx" tagname="msg" tagprefix="uc2" %>
<%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="body" runat="server">
    <uc1:nav ID="nav1" runat="server" />
    <uc2:msg ID="msg1" runat="server" />
    <telerik:RadScriptManager runat="server" ID="RadScriptManager1" />
    <telerik:RadSkinManager ID="QsfSkinManager" runat="server" ShowChooser="false" />
    <telerik:RadFormDecorator ID="QsfFromDecorator" runat="server" DecoratedControls="All" EnableRoundedCorners="false" />
     
     
    <telerik:RadCodeBlock ID="RadCodeBlock1" runat="server">
        <script type="text/javascript">
            function rowDblClick(sender, eventArgs)
            {
                sender.get_masterTableView().editItem(eventArgs.get_itemIndexHierarchical());
            }
        </script>
    </telerik:RadCodeBlock>
     
    <telerik:RadAjaxManager ID="RadAjaxManager1" DefaultLoadingPanelID="RadAjaxLoadingPanel1" runat="server">
        <AjaxSettings>
            <telerik:AjaxSetting AjaxControlID="rgMetrics">
                <UpdatedControls>
                    <telerik:AjaxUpdatedControl ControlID="rgMetrics"></telerik:AjaxUpdatedControl>
                    <telerik:AjaxUpdatedControl ControlID="RadWindowManager1" />
                    <telerik:AjaxUpdatedControl ControlID="RadInputManager1" />
                </UpdatedControls>
            </telerik:AjaxSetting>
             
        </AjaxSettings>
    </telerik:RadAjaxManager>
 
    <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server">
    </telerik:RadAjaxLoadingPanel>
     
    <telerik:RadGrid ID="rgMetrics" AllowPaging="True" runat="server" AutoGenerateColumns="false" PageSize="10" Width="500px">
        <MasterTableView DataKeyNames="MetricID" CommandItemDisplay="Top" InsertItemPageIndexAction="ShowItemOnCurrentPage"
                AllowPaging="True">
            <Columns>
                <telerik:GridBoundColumn DataField="MetricID" HeaderText="Metric ID" ReadOnly="true" ForceExtractValue="Always" ConvertEmptyStringToNull="true"/>
                <telerik:GridBoundColumn DataField="Name" HeaderText="Name" />
                <telerik:GridDropDownColumn DataSourceID="SqlMetricTypeSource" ListTextField="Name" ListValueField="MetricTypeID" UniqueName="MetricTypeDownDownColumn"
                SortExpression="Name" HeaderText="Metric Type" DropDownControlType="DropDownList" DataField="MetricTypeID"></telerik:GridDropDownColumn>
                <telerik:GridEditCommandColumn ButtonType="ImageButton" />
                <telerik:GridButtonColumn ConfirmText="Delete this metric?" ConfirmDialogType="RadWindow"
                    ConfirmTitle="Delete" ButtonType="ImageButton" CommandName="Delete" />
            </Columns>
            <EditFormSettings>
                <EditColumn ButtonType="ImageButton"/>
            </EditFormSettings>
       </MasterTableView>
       <PagerStyle Mode="NextPrevAndNumeric" />
        <ClientSettings>
            <ClientEvents OnRowDblClick="rowDblClick" />
        </ClientSettings>
    </telerik:RadGrid>
     
    <telerik:RadInputManager runat="server" ID="RadInputManager1" Enabled="true">
        <telerik:TextBoxSetting BehaviorID="TextBoxSetting1">
        </telerik:TextBoxSetting>
         
    </telerik:RadInputManager>
     
    <telerik:RadWindowManager ID="RadWindowManager1" runat="server" />
     
    <asp:SqlDataSource runat="server" ID="SqlMetricTypeSource" ConnectionString="<%$ ConnectionStrings:BPSConnectionString  %>"
        SelectCommand="SELECT MetricTypeID, name FROM bps_MetricType"></asp:SqlDataSource>
         
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="foot" runat="server">
</asp:Content>

Here is the .vb:
Imports Telerik.Web.UI
Imports System.Linq
 
Partial Public Class adminMetrics
    Inherits BaseWebPage
 
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not emp.HasPemission("Administer Groups") Then
            Response.Redirect("login.aspx")
        End If
 
    End Sub
 
    Private Sub rgMetrics_NeedDataSource(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridNeedDataSourceEventArgs) Handles rgMetrics.NeedDataSource
        Dim m As New metric
        rgMetrics.DataSource = m.GetMetrics
    End Sub
 
    Private Sub rgMetrics_UpdateCommand(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridCommandEventArgs) Handles rgMetrics.UpdateCommand
        Dim editableItem = (DirectCast(e.Item, GridEditableItem))
        Dim MetricID = DirectCast(editableItem.GetDataKeyValue("MetricID"), Integer)
 
        Dim x As New metric
        x.LoadMetric(MetricID)
 
        editableItem.UpdateValues(x.data)
 
        x.Update()
    End Sub
 
    Private Sub rgMetrics_DeleteCommand(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridCommandEventArgs) Handles rgMetrics.DeleteCommand
        RadAjaxManager1.ResponseScripts.Add(String.Format("window.radalert(""Sorry, deleting tasks is not supported!"")"))
    End Sub
 
    Private Sub rgMetrics_InsertCommand(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridCommandEventArgs) Handles rgMetrics.InsertCommand
        Dim editableItem = (DirectCast(e.Item, GridEditableItem))
 
        Dim o As Object
 
        ' Tesing to see if I can manually find a control! (Nope, didn't work)
        For Each o In editableItem.Controls
            If TypeOf o Is TextBox Then
                RadAjaxManager1.ResponseScripts.Add(String.Format("window.radalert(""Found a textbox with a value of " & o.text & """)"))
            End If
        Next
 
        Dim values As New Hashtable()
        editableItem.ExtractValues(values)
 
        Dim x As New metric
        x.data.name = DirectCast(values("name"), String)
        x.data.MetricTypeID = Integer.Parse(values("MetricTypeID").ToString)
        x.Update()
 
    End Sub
 
    Private Sub rgMetrics_ItemCreated(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridItemEventArgs) Handles rgMetrics.ItemCreated
        If TypeOf e.Item Is GridEditableItem AndAlso (e.Item.IsInEditMode) Then
            Dim editableItem As GridEditableItem = DirectCast(e.Item, GridEditableItem)
            SetupInputManager(editableItem)
        End If
 
    End Sub
 
    Private Sub SetupInputManager(ByVal editableItem As GridEditableItem)
        ' style and set ProductName column's textbox as required
        Dim textBox = (DirectCast(editableItem.EditManager.GetColumnEditor("Name"), GridTextBoxColumnEditor)).TextBoxControl
 
        Dim inputSetting As InputSetting = RadInputManager1.GetSettingByBehaviorID("TextBoxSetting1")
        inputSetting.TargetControls.Add(New TargetInput(textBox.UniqueID, True))
        inputSetting.InitializeOnClient = True
        inputSetting.Validation.IsRequired = True
 
        '' style UnitPrice column's textbox
        'textBox = (DirectCast(editableItem.EditManager.GetColumnEditor("UnitPrice"), GridTextBoxColumnEditor)).TextBoxControl
 
        'inputSetting = RadInputManager1.GetSettingByBehaviorID("NumericTextBoxSetting1")
        'inputSetting.InitializeOnClient = True
        'inputSetting.TargetControls.Add(New TargetInput(textBox.UniqueID, True))
 
        '' style UnitsInStock column's textbox
        'textBox = (DirectCast(editableItem.EditManager.GetColumnEditor("UnitsInStock"), GridTextBoxColumnEditor)).TextBoxControl
 
        'inputSetting = RadInputManager1.GetSettingByBehaviorID("NumericTextBoxSetting2")
        'inputSetting.InitializeOnClient = True
        'inputSetting.TargetControls.Add(New TargetInput(textBox.UniqueID, True))
    End Sub
 
    Protected Sub rgMetrics_ItemDeleted(ByVal source As Object, ByVal e As Telerik.Web.UI.GridDeletedEventArgs) Handles rgMetrics.ItemDeleted
        If e.Exception IsNot Nothing Then
            e.ExceptionHandled = True
            ShowErrorMessage()
        End If
    End Sub
 
    Protected Sub rgMetrics_ItemInserted(ByVal source As Object, ByVal e As Telerik.Web.UI.GridInsertedEventArgs) Handles rgMetrics.ItemInserted
        If e.Exception IsNot Nothing Then
            e.ExceptionHandled = True
            ShowErrorMessage()
        End If
    End Sub
 
    Protected Sub rgMetrics_ItemUpdated(ByVal source As Object, ByVal e As Telerik.Web.UI.GridUpdatedEventArgs) Handles rgMetrics.ItemUpdated
        If e.Exception IsNot Nothing Then
            e.ExceptionHandled = True
            ShowErrorMessage()
        End If
    End Sub
 
    ''' <summary>
    ''' Shows a <see cref="RadWindow"/> alert if an error occurs
    ''' </summary>
    Protected Sub ShowErrorMessage()
        RadAjaxManager1.ResponseScripts.Add(String.Format("window.radalert(""Please enter valid data!"")"))
    End Sub
 
 
 
    Protected Sub rgMetrics_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles rgMetrics.PreRender
        If (Not IsPostBack AndAlso rgMetrics.MasterTableView.Items.Count > 0) Then
            rgMetrics.MasterTableView.Items(1).Expanded = True
        End If
    End Sub
 
     
End Class

Thanks for any help, I'm stumped!

1 Answer, 1 is accepted

Sort by
0
Vasil
Telerik team
answered on 19 Apr 2013, 12:42 PM
Hello David,

Check this help topic about accessing controls inside the RadGrid:
http://www.telerik.com/help/aspnet-ajax/grid-accessing-cells-and-rows.html
Also examine the code of this online demo, which shows how to get the values of the controls when handling the UpdateCommand event.
http://demos.telerik.com/aspnet-ajax/grid/examples/dataediting/editmodes/defaultvb.aspx

Regards,
Vasil
the Telerik team
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 their blog feed now.
Tags
Grid
Asked by
David
Top achievements
Rank 1
Answers by
Vasil
Telerik team
Share this question
or