Telerik radGrid - possible d'utiliser AllowAutomaticUpdates lorsque Datasource = un jeu de données?
-
20-08-2019 - |
Question
Je suis en train de définir la source de données de mon radGrid sur un jeu de données (que j'ai stocké en session). J'ai activé AllowAutomaticUpdates et EnableViewState, implémenté NeedDataSource, défini DatakeyNames, etc. (voir le code ci-dessous)
Cependant, lorsque j'appuie sur le bouton Éditer, que je modifie et que je clique sur le lien Mettre à jour, l'enregistrement ne se met pas à jour et quitte le mode Édition ... il reste simplement en mode Édition et aucune erreur ne se produit.
La question est donc de savoir si quelqu'un sait si radGrid avec EnableViewstate prend même en charge AutomaticUpdates. Ainsi, les modifications apportées à la grille seront automatiquement insérées dans le jeu de données auquel il est lié.
On pourrait penser que vous pourriez lire la documentation, mais je n’ai pas pu trouver de réponse définitive.
Merci
<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
La solution
En résumé, un problème clé est en jeu ici:
Le " automatique " les opérations ne sont prises en charge que lorsque vous utilisez un contrôle de source de données pour lier la grille. Cela inclut ObjectDataSource afin que vous puissiez utiliser votre DAL avec ODS, puis prendre en charge les upserts / mises à jour / suppressions automatiques.
Lorsque vous liez directement à une table de données, vous devez gérer les mises à jour manuellement. C’est parce que ce sont les contrôles de source de données, et non le RadGrid, qui fournissent le & "Auto &"; logique pour les opérations CRUD. Heureusement, il n'est pas difficile de gérer la mise à jour manuellement si c'est le chemin que vous préférez. Découvrez quelques exemples sur Telerik.com:
http://demos.telerik.com/ aspnet-ajax / grid / examples / dataediting / editmodes / defaultcs.aspx
Vous pouvez également utiliser RadGrid avec ViewState désactivé si vous le souhaitez. La meilleure façon de le faire est d'utiliser le support de la grille pour la liaison de données côté client (bien que cela nécessite que vous exposiez votre DAL via une couche de service). Découvrez les démos de cette approche ici:
J'espère que ça aide! -Todd
Autres conseils
Votre question a déjà été répondue sur les forums Telerik: