Telerik radGrid: ¿es posible usar AllowAutomaticUpdates cuando Datasource = un conjunto de datos?
-
20-08-2019 - |
Pregunta
Estoy configurando la fuente de datos de mi radGrid en un conjunto de datos (que he almacenado en la sesión). He habilitado AllowAutomaticUpdates y EnableViewState, he implementado NeedDataSource, configuré DatakeyNames, etc. (vea el código a continuación)
Sin embargo, cuando presiono el botón Editar y hago un cambio y presiono el enlace Actualizar, el registro no se actualiza y sale del Modo de edición ... simplemente permanece en el modo de edición, y no ocurre ningún tipo de error.
Entonces, la pregunta es ... ¿Alguien sabe si radGrid con EnableViewstate incluso admite AutomaticUpdates, por lo que los cambios en la cuadrícula se insertarán automáticamente en el conjunto de datos al que está vinculado?
Uno podría pensar que podría leer la documentación, pero no he podido encontrar una respuesta definitiva.
Gracias
<telerik:Radgrid id="grid" runat="server" AllowPaging="True" AllowSorting="True" AllowAutomaticUpdates="true"
AutoGenerateEditColumn="True" GridLines="None" >
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
Dim data As New DataGateway
Dim ds As DataSet = data.GetEmployeesByProgram(Year:=2009, ProgramName:="Long Term Incentive Stock Program")
Dim dt As DataTable = ds.Tables(0)
ds.Tables(0).PrimaryKey = New DataColumn() {dt.Columns("EmployeeNum"), dt.Columns("ProgramName"), dt.Columns("Year")}
Session("datasource") = ds
With Me.grid
.AllowAutomaticUpdates = True
.AutoGenerateColumns = True
.AllowSorting = True
.AutoGenerateEditColumn = True
.EnableViewState = True 'IS REQUIRED!!!
Me.grid.MasterTableView.AllowAutomaticUpdates = True
Me.grid.MasterTableView.EditMode = GridEditMode.InPlace
End With
End If
End Sub
Private Sub grid_NeedDataSource(ByVal source As Object, ByVal e As Telerik.Web.UI.GridNeedDataSourceEventArgs) Handles grid.NeedDataSource
Debug.WriteLine("NeedDataSource: " & e.RebindReason.ToString)
Dim ds As DataSet = CType(Session("datasource"), DataSet)
Me.grid.MasterTableView.DataKeyNames = New String() {"EmployeeNum", "ProgramName", "Year"}
Me.grid.DataSource = ds
End Sub
Solución
En resumen, hay un problema clave en juego aquí:
El " automático " las operaciones solo son compatibles cuando está utilizando un control de Fuente de datos para vincular la cuadrícula. Eso incluye el ObjectDataSource, por lo que puede usar su DAL con el ODS y luego admitir actualizaciones / eliminaciones / actualizaciones automáticas.
Cuando se vincula directamente a una tabla de datos, debe manejar las actualizaciones manualmente. Esto se debe a que son los controles de origen de datos, no el RadGrid, los que proporcionan & Quot; auto & Quot; lógica para operaciones CRUD. Afortunadamente, no es difícil manejar la actualización manualmente si esa es la ruta que prefieres. Echa un vistazo a algunas de las demostraciones en Telerik.com para ver ejemplos:
http://demos.telerik.com/ aspnet-ajax / grid / examples / dataediting / editmodes / defaultcs.aspx
También puede usar RadGrid con ViewState deshabilitado si lo desea. La mejor manera de hacerlo es utilizar el soporte de Grid para el enlace de datos del lado del cliente (aunque eso requiere que exponga su DAL a través de una capa de servicio). Echa un vistazo a las demostraciones de ese enfoque aquí:
¡Espero que ayude! -Todd
Otros consejos
Su pregunta ya ha sido respondida en los foros de Telerik: