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:
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>
Le colonne del datagrid le aggiungo dinamicamente a runtime sul Page_Load:
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
Ho un gestore dell'evento RowCommand che funziona perfettamente:
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
Se stranamente aggiungo le colonne prima della colonna con il pulsante anziché dopo con questo codice:
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
L'evento RowCommand non scatta più.
A voi vi è mai capitato? Come posso risolvere?
Grazie a tutti.