Hi, Telerik. I have a little problem. I'm trying to create a radgrid at runtime take definition of grid from a DB.
I haven't problem to show data, I'm able to create pop edit form but I'm not able to retrive modified data.
These is my code:
- this is ASCX code that define grid control
- This is the code behind that generate grid colums
in particular in this part of code we obtain the folowing error when evaluate this instruction:
e.Item.OwnerTableView.ExtractValuesFromItem(returnValue, editedItem)
Editor cannot be initialized for column: {our_field_name}
- In the end this is class for definition of template fields:
I wait for a response.
Thank you
Gianluigi
I haven't problem to show data, I'm able to create pop edit form but I'm not able to retrive modified data.
These is my code:
- this is ASCX code that define grid control
| <%@ Control Language="VB" AutoEventWireup="false" CodeFile="anagrafiche.ascx.vb" Inherits="GestioneAnagrafiche_anagrafiche" %> |
| <%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %> |
| <link href="../CSS/RadAnagrafiche.css" rel="stylesheet" type="text/css" /> |
| <script type="text/javascript" src="../Griglie/Script/TelerikTools.js"></script> |
| <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:RadAjaxLoadingPanel EnableEmbeddedSkins="False" Skin="3iSkin" ID="RadAjaxLoadingPanel1" runat="server" /> |
| <telerik:RadGrid ID="RadGridAnagrafiche" EnableEmbeddedSkins="False" Skin="3iSkin" runat="server" |
| AllowAutomaticDeletes="False" AllowAutomaticUpdates="False" AllowAutomaticInserts="True" |
| AutoGenerateColumns="False" GridLines="None" EnableViewState="true"> |
| <HeaderContextMenu EnableEmbeddedSkins="False" Skin="3iSkin" /> |
| <FilterMenu EnableEmbeddedSkins="False" Skin="3iSkin" /> |
| <PagerStyle Mode="NextPrevAndNumeric" /> |
| <MasterTableView Width="100%" HorizontalAlign="NotSet" AutoGenerateColumns="False" EditMode="PopUp" ShowFooter="true"> |
| <Columns> |
| <telerik:GridEditCommandColumn ButtonType="ImageButton" UniqueName="EditCommandColumn" |
| EditText="Modifica riga" EditImageUrl="../Griglie/Immagini/edit.gif" |
| UpdateText="Salva cambiamenti" UpdateImageUrl="../Griglie/Immagini/save.gif" |
| CancelText="Annulla Modifiche" CancelImageUrl="../Griglie/Immagini/cancel.gif" > |
| <ItemStyle CssClass="MyImageButton" Width="15px" /> |
| </telerik:GridEditCommandColumn> |
| </Columns> |
| <EditFormSettings ColumnNumber="1" CaptionFormatString="Modifica Record"> |
| <FormTableItemStyle Wrap="False" /> |
| <FormCaptionStyle CssClass="EditFormHeader" /> |
| <FormMainTableStyle GridLines="None" CellSpacing="0" CellPadding="3" BackColor="White" Width="100%" /> |
| <FormTableStyle CellSpacing="0" CellPadding="2" Height="110px" BackColor="White" /> |
| <FormTableAlternatingItemStyle Wrap="False" /> |
| <EditColumn ButtonType="ImageButton" UniqueName="EditCommandColumn1" |
| InsertText="Nuovo Record" InsertImageUrl="../Griglie/Immagini/piu.gif" |
| UpdateText="Aggiorna Record" UpdateImageUrl="../Griglie/Immagini/save.gif" |
| CancelText="Annulla Modifiche" CancelImageUrl="../Griglie/Immagini/cancel.gif" /> |
| <FormTableButtonRowStyle HorizontalAlign="Right" CssClass="EditFormButtonRow" /> |
| </EditFormSettings> |
| </MasterTableView> |
| <ClientSettings> |
| <ClientEvents OnRowDblClick="RowDblClick" /> |
| </ClientSettings> |
| </telerik:RadGrid> |
- This is the code behind that generate grid colums
| Imports System |
| Imports System.Collections |
| Imports System.ComponentModel |
| Imports System.Data |
| Imports System.Data.OleDb |
| Imports System.Web |
| Imports System.Web.SessionState |
| Imports System.Web.UI |
| Imports System.Web.UI.WebControls |
| Imports System.Web.UI.HtmlControls |
| Imports Telerik.Web.UI |
| Imports System.Drawing |
| Imports CalcolaScontoRiga |
| Imports ITemplateEditColumn |
| Partial Class GestioneAnagrafiche_anagrafiche |
| Inherits System.Web.UI.UserControl |
| Public Event AggiornataGriglia() |
| Private taAnaAcl As New dsRestrizioniTableAdapters.taTabGriglieAnaACL |
| Private taAnaGri As New GriglieTableAdapters.taTabGriglieAna |
| Private taAnaCol As New GriglieTableAdapters.taTabGriglieAnaColonne |
| Private GridSettings As New ParamGriglie.ParamGriglie |
| Private MyUtil As New General.General |
| Private Utility As New genericFunction |
| Private colTemplate As GridTemplateColumn |
| Private colBound As GridBoundColumn |
| Private colButton As GridButtonColumn |
| Private colDateTime As GridDateTimeColumn |
| Private colEdit As GridEditCommandColumn |
| Private DefaultColumnWidth As Integer = 50 |
| Private NomeTabella As String |
| Private SqlRecuperoDati As String |
| Private SqlUpdateDati As String |
| Private ChiaveGriglia As String = "" |
| Dim dtAnaACL As dsRestrizioni.TabGriglieAnaACLDataTable |
| Dim dtAnaGri As Griglie.TabGriglieAnaDataTable |
| Dim dtAnaCol As Griglie.TabGriglieAnaColonneDataTable |
| Public Sub ReloadCarrello() |
| RaiseEvent AggiornataGriglia() |
| End Sub |
| Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load |
| Dim idACL, grInsert, grEdit, grDelete, grEsporta As Integer |
| Dim CampoDb, TestoHeader As String |
| Dim Visibile, Editabile, Larghezza, Filtro, TipoDato, Ordine, IsKey As Integer |
| Dim ds As New Data.DataSet |
| If Not Utility.CheckSession(HttpContext.Current) Then Me.Response.Redirect("~/default.aspx") |
| Me.MyUtil.ConnectionString = GridSettings.DataConn |
| Me.MyUtil.DataBase = GridSettings.dbTypeData |
| dtAnaACL = New dsRestrizioni.TabGriglieAnaACLDataTable |
| dtAnaGri = New Griglie.TabGriglieAnaDataTable |
| dtAnaCol = New Griglie.TabGriglieAnaColonneDataTable |
| 'In base al parametro TAB capisco quale tabella modificare |
| NomeTabella = Request.QueryString("TAB") |
| RadGridAnagrafiche.Columns.Clear() |
| colEdit = New GridEditCommandColumn |
| colEdit.ButtonType = GridButtonColumnType.ImageButton |
| colEdit.UniqueName = "EditCommandColumn" |
| colEdit.EditText = "Modifica riga" |
| colEdit.EditImageUrl = "../Griglie/Immagini/edit.gif" |
| colEdit.UpdateText = "Salva cambiamenti" |
| colEdit.UpdateImageUrl = "../Griglie/Immagini/save.gif" |
| colEdit.CancelText = "Annulla Modifiche" |
| colEdit.CancelImageUrl = "../Griglie/Immagini/cancel.gif" |
| colEdit.ItemStyle.CssClass = "MyImageButton" |
| colEdit.ItemStyle.Width = Unit.Pixel(15) |
| RadGridAnagrafiche.MasterTableView.Columns.Add(colEdit) |
| If (Not String.IsNullOrEmpty(NomeTabella)) Then |
| 'Controllo se l'utente ha i permessi per Visualizzare/Inserire/Modificare i record |
| 'Recupero i parametri della griglia |
| dtAnaACL = taAnaAcl.Get_GriglieAnaACL(NomeTabella, Me.Session("CodDip")) |
| If (dtAnaACL.Rows.Count = 1) Then |
| 'Recupero i permessi associati a questa tabella |
| idACL = dtAnaACL.Rows(0).Item("id") |
| grInsert = dtAnaACL.Rows(0).Item("grInsert") |
| grEdit = dtAnaACL.Rows(0).Item("grEdit") |
| grDelete = dtAnaACL.Rows(0).Item("grDelete") |
| grEsporta = dtAnaACL.Rows(0).Item("grEsporta") |
| 'Recupero i dati della griglia |
| dtAnaGri = taAnaGri.Get_TabGriglieAna(NomeTabella) |
| SqlRecuperoDati = dtAnaGri.Rows(0).Item("SQL") |
| 'Recupero le colonne da visualizzare nella griglia |
| dtAnaCol = taAnaCol.Get_TabColGriglieAna(idACL) |
| If (dtAnaCol.Rows.Count > 0) Then |
| For i = 0 To dtAnaCol.Rows.Count - 1 |
| CampoDb = dtAnaCol.Rows(i).Item("Campodb") |
| TestoHeader = dtAnaCol.Rows(i).Item("Testoheader") |
| IsKey = dtAnaCol.Rows(i).Item("isKey") |
| Visibile = dtAnaCol.Rows(i).Item("Visible") |
| Editabile = dtAnaCol.Rows(i).Item("Editable") |
| Larghezza = dtAnaCol.Rows(i).Item("Widthcol") |
| Filtro = dtAnaCol.Rows(i).Item("Filtro") |
| TipoDato = dtAnaCol.Rows(i).Item("TipoDato") |
| Ordine = dtAnaCol.Rows(i).Item("Ordine") |
| If (IsKey = 1) And (i = 0) Then |
| ChiaveGriglia = CampoDb.ToString |
| ElseIf (IsKey = 1) And (i > 0) Then |
| ChiaveGriglia += "," + CampoDb.ToString |
| End If |
| 'A questo punto, aggiungo le colonne alla griglia |
| RadGridAnagrafiche.AllowSorting = True |
| Select Case TipoDato |
| Case 1 'campo data |
| If Editabile = 0 Then |
| colDateTime = New GridDateTimeColumn |
| colDateTime.ReadOnly = True |
| colDateTime.MaxLength = 10 |
| colDateTime.DataType = System.Type.GetType("System.DateTime") |
| colDateTime.DataFormatString = "{0:dd/MM/yyyy}" |
| colDateTime.HeaderStyle.HorizontalAlign = HorizontalAlign.Center |
| colDateTime.UniqueName = CampoDb |
| colDateTime.HeaderText = TestoHeader |
| 'ordine |
| colDateTime.OrderIndex = Ordine + 1 |
| 'dati |
| colDateTime.DataField = CampoDb |
| 'ordinamento |
| colDateTime.SortExpression = CampoDb |
| 'raggruppamento |
| colDateTime.Groupable = False |
| 'filtro |
| If Filtro = 1 Then |
| colDateTime.AllowFiltering = True |
| Else |
| colDateTime.AllowFiltering = False |
| End If |
| 'larghezza colonna |
| If Larghezza > 0 Then |
| colDateTime.HeaderStyle.Width = Unit.Pixel(Larghezza) |
| colDateTime.ItemStyle.Width = Unit.Pixel(Larghezza) |
| colDateTime.FilterControlWidth = Unit.Pixel(Larghezza - 15) |
| Else |
| colDateTime.HeaderStyle.Width = Unit.Pixel(DefaultColumnWidth) |
| colDateTime.ItemStyle.Width = Unit.Pixel(DefaultColumnWidth) |
| colDateTime.FilterControlWidth = Unit.Pixel(DefaultColumnWidth - 15) |
| End If |
| If (Visibile = 0) Then colDateTime.Visible = False |
| RadGridAnagrafiche.MasterTableView.Columns.Add(colDateTime) |
| Else |
| colTemplate = New Telerik.Web.UI.GridTemplateColumn |
| colTemplate.ReadOnly = False |
| colTemplate.UniqueName = CampoDb |
| colTemplate.HeaderText = TestoHeader |
| colTemplate.OrderIndex = Ordine + 1 |
| colTemplate.SortExpression = CampoDb |
| colTemplate.DataType = System.Type.GetType("System.DateTime") |
| colTemplate.HeaderStyle.HorizontalAlign = HorizontalAlign.Center |
| colTemplate.ItemStyle.HorizontalAlign = HorizontalAlign.Center |
| colTemplate.ItemTemplate = New ITemplateEditColumn(CampoDb, IType._Label, "dd/MM/yyyy") |
| colTemplate.EditItemTemplate = New ITemplateEditColumn(CampoDb, IType._RadDatePicker, "dd/MM/yyyy") |
| RadGridAnagrafiche.MasterTableView.Columns.Add(colTemplate) |
| End If |
| Case Else 'campo stringa |
| If Editabile = 0 Then |
| colBound = New GridBoundColumn |
| colBound.UniqueName = CampoDb |
| colBound.HeaderText = TestoHeader |
| colBound.ReadOnly = True |
| colBound.OrderIndex = Ordine + 1 |
| colBound.DataField = CampoDb |
| colBound.SortExpression = CampoDb |
| If Larghezza > 0 Then |
| colBound.HeaderStyle.Width = Unit.Pixel(Larghezza) |
| colBound.ItemStyle.Width = Unit.Pixel(Larghezza) |
| Else |
| colBound.HeaderStyle.Width = Unit.Pixel(DefaultColumnWidth) |
| colBound.ItemStyle.Width = Unit.Pixel(DefaultColumnWidth) |
| End If |
| If (Visibile = 0) Then colBound.Visible = False |
| RadGridAnagrafiche.MasterTableView.Columns.Add(colBound) |
| Else |
| colTemplate = New Telerik.Web.UI.GridTemplateColumn |
| colTemplate.UniqueName = CampoDb |
| colTemplate.HeaderText = TestoHeader |
| colTemplate.ReadOnly = False |
| colTemplate.OrderIndex = Ordine + 1 |
| colTemplate.DataField = CampoDb |
| colTemplate.SortExpression = CampoDb |
| colTemplate.HeaderStyle.HorizontalAlign = HorizontalAlign.Center |
| colTemplate.ItemStyle.HorizontalAlign = HorizontalAlign.Center |
| colTemplate.ItemTemplate = New ITemplateEditColumn(CampoDb, IType._Label) |
| colTemplate.EditItemTemplate = New ITemplateEditColumn(CampoDb, IType._TextBox) |
| RadGridAnagrafiche.MasterTableView.Columns.Add(colTemplate) |
| End If |
| End Select |
| Next |
| End If |
| End If |
| End If |
| Try |
| RadGridAnagrafiche.MasterTableView.DataKeyNames = New String() {ChiaveGriglia} |
| ds.Tables.Add(MyUtil.getDataTable(CommandType.Text, SqlRecuperoDati, "Contenuto")) |
| RadGridAnagrafiche.DataSource = ds.Tables("Contenuto") |
| Catch ex As Exception |
| End Try |
| End Sub |
| Protected Sub RadGridAnagrafiche_UpdateCommand(ByVal source As Object, ByVal e As Telerik.Web.UI.GridCommandEventArgs) Handles RadGridAnagrafiche.UpdateCommand |
| Dim editedItem As GridEditableItem = CType(e.Item, GridEditableItem) |
| Dim id As String = editedItem.GetDataKeyValue(ChiaveGriglia).ToString() |
| Dim returnValue As Hashtable = New Hashtable |
| e.Item.OwnerTableView.ExtractValuesFromItem(returnValue, editedItem) |
| Dim RigaOrdine As New Data.DataTable |
| Dim myRow As Integer = CType(e.Item.DataSetIndex, Double) |
| Dim CampoDb As String |
| Dim IsKey As Integer |
| Dim Editabile As Integer |
| Dim TipoDato As Integer |
| Dim EditControllo As String |
| Dim StrWhere As String |
| SqlUpdateDati = "UPDATE " + NomeTabella.ToString + " SET DATAMODIFICA=Getdate(), UTENTEMODIFICA=" |
| For i = 0 To dtAnaCol.Rows.Count - 1 |
| CampoDb = dtAnaCol.Rows(i).Item("Campodb") |
| IsKey = dtAnaCol.Rows(i).Item("isKey") |
| Editabile = dtAnaCol.Rows(i).Item("Editable") |
| TipoDato = dtAnaCol.Rows(i).Item("TipoDato") |
| If IsKey = 1 Then |
| StrWhere = " WHERE " + CampoDb.ToString + "='" + id.ToString + "'" |
| Else |
| Select Case TipoDato |
| Case 0 'campo string |
| EditControllo = "MyTxt" + CampoDb.ToString |
| SqlUpdateDati += ", " + CampoDb.ToString + "='" + returnvalue + "' " |
| Case 1 'campo data |
| EditControllo = "MyRTP" + CampoDb.ToString |
| SqlUpdateDati += ", " + CampoDb.ToString + "='" + returnvalue + "' " |
| End Select |
| End If |
| Next |
| End Sub |
| End Class |
e.Item.OwnerTableView.ExtractValuesFromItem(returnValue, editedItem)
Editor cannot be initialized for column: {our_field_name}
- In the end this is class for definition of template fields:
| Imports Microsoft.VisualBasic |
| Imports Telerik.Web.UI |
| Imports System.Data |
| Imports System.Web.UI |
| Public Class ITemplateEditColumn |
| Implements IBindableTemplate |
| Private colName As String |
| Private colFormat As String |
| Private colTipo As Integer |
| Protected rtp As RadDatePicker |
| Protected txt As TextBox |
| Protected lbl As Label |
| Public Enum IType As Integer |
| _TextBox = 0 |
| _RadDatePicker = 1 |
| _Label = 99 |
| End Enum |
| Public Sub New(ByVal cName As String, ByVal cTipo As IType, Optional ByVal cFormato As String = "") |
| colName = cName |
| colTipo = cTipo |
| colFormat = cFormato |
| End Sub |
| Public Function ExtractValues(ByVal container As Control) As System.Collections.Specialized.IOrderedDictionary Implements IBindableTemplate.ExtractValues |
| Dim od As OrderedDictionary = New OrderedDictionary |
| Select Case colTipo |
| Case 0 '_Txtbox |
| od.Add(colName, CType(container.FindControl("MyTxt" + colName), TextBox).Text) |
| Case 1 '_RadDatePicker |
| od.Add(colName, CType(container.FindControl("MyRTP" + colName), RadDatePicker).SelectedDate) |
| End Select |
| Return od |
| End Function |
| Public Sub InstantiateIn(ByVal container As System.Web.UI.Control) Implements System.Web.UI.ITemplate.InstantiateIn |
| Select Case colTipo |
| Case 0 '_Txtbox |
| txt = New TextBox |
| txt.ID = "MyTxt" + colName.ToString |
| AddHandler txt.DataBinding, AddressOf TextBoxBinding |
| container.Controls.Add(txt) |
| Case 1 '_RadDatePicker |
| rtp = New RadDatePicker |
| rtp.ID = "MyRTP" + colName.ToString |
| rtp.EnableEmbeddedSkins = False |
| rtp.Skin = "3iSkin" |
| rtp.Width = Unit.Pixel(100) |
| rtp.DateInput.ID = "txtData" |
| rtp.DateInput.DateFormat = colFormat |
| rtp.DateInput.EnableEmbeddedSkins = False |
| rtp.DateInput.Skin = "3iSkin" |
| AddHandler rtp.DataBinding, AddressOf RadDatePickerBinding |
| container.Controls.Add(rtp) |
| Case 99 '_Label |
| Dim lbl As New Label |
| lbl.ID = "MyLbl" + colName.ToString |
| AddHandler lbl.DataBinding, AddressOf LabelBinding |
| container.Controls.Add(lbl) |
| End Select |
| End Sub |
| Private Sub LabelBinding(ByVal sender As Object, ByVal e As EventArgs) |
| Dim lbl As Label |
| lbl = CType(sender, Label) |
| Dim iContainer As Object |
| Dim drv As DataRowView |
| iContainer = lbl.NamingContainer |
| drv = iContainer.DataItem |
| If Not (IsDBNull(drv.Item(colName))) Then |
| If (colFormat.Length > 0) Then |
| lbl.Text = Format(drv.Item(colName), colFormat) |
| Else |
| lbl.Text = drv.Item(colName).ToString |
| End If |
| End If |
| End Sub |
| Private Sub TextBoxBinding(ByVal sender As Object, ByVal e As EventArgs) |
| Dim txt As TextBox |
| txt = CType(sender, TextBox) |
| Dim iContainer As Object |
| Dim drv As DataRowView |
| iContainer = txt.NamingContainer |
| drv = iContainer.DataItem |
| If Not (IsDBNull(drv.Item(colName))) Then |
| If (colFormat.Length > 0) Then |
| txt.Text = Format(drv.Item(colName), colFormat) |
| Else |
| txt.Text = drv.Item(colName).ToString |
| End If |
| End If |
| End Sub |
| Private Sub RadDatePickerBinding(ByVal sender As Object, ByVal e As EventArgs) |
| Dim rtp As RadDatePicker |
| rtp = CType(sender, RadDatePicker) |
| Dim iContainer As Object |
| Dim drv As DataRowView |
| iContainer = rtp.NamingContainer |
| drv = iContainer.DataItem |
| If Not (IsDBNull(drv.Item(colName))) Then |
| If (colFormat.Length > 0) Then |
| rtp.SelectedDate = Format(DateTime.Parse(drv.Item(colName)), colFormat) |
| Else |
| rtp.SelectedDate = drv.Item(colName).ToString |
| End If |
| End If |
| End Sub |
| End Class |
I wait for a response.
Thank you
Gianluigi