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 .vb:
Thanks for any help, I'm stumped!
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.UIImports System.LinqPartial 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 ClassThanks for any help, I'm stumped!