Newsgroup: it.comp.lang.visual-basic
Titolo: [?][ASP.NET] DataItem Nothing?

Ciao a tutti, sono ancora alle prese con un controllo che eredita dalla
DataGrid...
... e sono bloccata su un problema.
Intercetto in una web form l'evento SelectedIndexChanged del DataGrid, la
mia intenzione è di ricavare l'elemento della fonte dati corrispondente alla
riga selezionata usando la proprietà DataItem dell'oggetto DataGridItem...
ma questa mi ritorna sempre Nothing!
Debuggando, vedo tra l'altro che il DataSource del DataGrid (una collection
personalizzata)  non è Nothing, e nemmeno gli oggetti contenuti...
Qualcuno può aiutarmi?
Grazie in anticipo a chiunque mi risponderà.
                        Ciao
                                        Zephiross

 personalizzata)  non è Nothing, e nemmeno gli oggetti contenuti...
Ho un datagrid alimentato da un dataset. Tutto OK
All'evento
 Private Sub DG1_SelectedIndexChanged(ByVal sender As Object, ByVal e As
System.EventArgs) Handles DG1.SelectedIndexChanged
        Dim dg As DataGrid = DirectCast(sender, DataGrid)
        Me.lblMessaggio.Text = _
           "Col 1: " & dg.SelectedItem.Cells(1).Text & "<br>" & _
           "Col 2: " & dg.SelectedItem.Cells(2).Text & "<br>" & _
           "Col 3: " & dg.SelectedItem.Cells(3).Text & "<br>"
    End Sub
Al click, non viene rilevato nessun valore.
Lo strano che il seguente funziona. Provare a copiare e incollare in una web
form:
 <%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Data" %>
<%@ Page Language="VB" AutoEventWireup="True"%>
<HTML>
 <HEAD>
  <script runat="server">
      Function CreateDataSource() As ICollection
         ' Create sample data for the DataGrid control.
         Dim dt As DataTable = New DataTable()
         Dim dr As DataRow
         ' Define the columns of the table.
         dt.Columns.Add(New DataColumn("IntegerValue", GetType(Integer)))
         dt.Columns.Add(New DataColumn("StringValue", GetType(String)))
         dt.Columns.Add(New DataColumn("CurrencyValue", GetType(Double)))
         ' Populate the table with sample values.
         Dim i As Integer
         For i = 0 to 8
            dr = dt.NewRow()
            dr(0) = i
            dr(1) = "Item " & i.ToString()
            dr(2) = 1.23 * (i + 1)
            dt.Rows.Add(dr)
         Next i
         ' Create a DataView from the DataTable.
         Dim dv As DataView = New DataView(dt)
         Return dv
      End Function
      Sub Page_Load(sender As Object, e As EventArgs)
         ' Load sample data only once when the page is first loaded.
         If Not IsPostBack Then
            ItemsGrid.DataSource = CreateDataSource()
            ItemsGrid.DataBind()
         End If
      End Sub
      Sub IndexChange_Command(sender As Object, e As EventArgs)
         ' Display the details of the selected item.
         DetailsLabel.Text = _
            "Item Number: " & ItemsGrid.SelectedItem.Cells(1).Text & "<br>"
& _
            "Description: " & ItemsGrid.SelectedItem.Cells(2).Text & "<br>"
& _
            "Price: $" & ItemsGrid.SelectedItem.Cells(3).Text & "<br>"
      End Sub
  </script>
 </HEAD>
 <body>
  <form runat="server" ID="Form1">
   <h3>Declarative BaseDataList SelectedIndexChanged Example</h3>
   Select an item:
   <br>
   <br>
   <asp:DataGrid id="ItemsGrid" BorderColor="Black" ShowFooter="False"
CellPadding="3" CellSpacing="0"
    HeaderStyle-BackColor="#aaaadd"
OnSelectedIndexChanged="IndexChange_Command" runat="server">
    <Columns>
     <asp:ButtonColumn Text="Select" CommandName="Select" />
    </Columns>
   </asp:DataGrid>
   <hr>
   <table border="1" bordercolor="black" cellspacing="0">
    <tr bgcolor="#aaaadd">
     <td>
      Details
     </td>
    </tr>
    <tr>
     <td>
      <asp:Label id="DetailsLabel" runat="server" Text="No item selected."
/>
     </td>
    </tr>
   </table>
  </form>
 </body>
</HTML>
Perchè il secondo funziona e il primo no ?
Ave
giuseppeD

 Perchè il secondo funziona e il primo no ?
Strano
in una seconda web form, stessa costruzione, codice simile, stessa
funzionalità,
funziona.
Devo trovare il motivo della differenza.
Ave
giuseppeD