Ciao a tutti,
sto provando a migrare dal vecchio DataGrid al nuovo GridView di ASP.NET 2.0.
Mi è successa una cosa strana e tuttora non ho trovato una soluzione definitiva.
Ho una WebForm con una GridView:
Le colonne del datagrid le aggiungo dinamicamente a runtime sul Page_Load:codice:<asp:GridView ID="grvEsempio" runat="server"> <Columns> <asp:TemplateField> <ItemTemplate> <asp:Button ID="cmdPippo" runat="server" CausesValidation="false" CommandName="Pippo" Text="Pippo" CommandArgument='<%# Eval("field_1") %>' /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView>
Ho un gestore dell'evento RowCommand che funziona perfettamente:codice:Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load If (Not Page.IsPostBack) Then bindGrid() End If End Sub Private Sub bindGrid() dim dt as DataTable ' Riempio il datatable dt = ... ' Aggiungo le colonne al GridView For Each dc As DataColumn In dt.Columns Dim l_oCol As New BoundField l_oCol.DataField = dc.ColumnName l_oCol.HeaderText = dc.ColumnName grvDynamic.Columns.Add(l_oCol) Next grvEsempio.DataSource = dt grvEsempio.DataBind() End Sub
Se stranamente aggiungo le colonne prima della colonna con il pulsante anziché dopo con questo codice:codice:Private Sub grvEsempio_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles grvEsempio.RowCommand ' Riempio una label con il CommandName e il CommandArgument Select Case (e.CommandName) Case "Pippo" ' Faccio le mie operazioni ... End Select End Sub
L'evento RowCommand non scatta più.codice:Private Sub bindGrid() dim dt as DataTable ' Riempio il datatable dt = ... ' Aggiungo le colonne al GridView Dim l_iIdx As Integer = 0 For Each dc As DataColumn In dt.Columns Dim l_oCol As New BoundField l_oCol.DataField = dc.ColumnName l_oCol.HeaderText = dc.ColumnName grvDynamic.Columns.Insert(l_iIdx, l_oCol) l_iIdx += 1 Next grvEsempio.DataSource = dt grvEsempio.DataBind() End Sub
A voi vi è mai capitato? Come posso risolvere?
Grazie a tutti.

Rispondi quotando
