156 messaggi dal 01 dicembre 2010
Ho un GridView di nome "GV1"
Ho un textBox di nome "TB1"
Ho un altro TextBox di nome "TB2"

GV1 ammette la Selezione
Il campo chiave di GV1 si chiama "TeId"
Un altro campo generico di GV1 si chiama "TeSoc" ( si trova al 3° posto )

Voglio con l'evento di Selezione su GV1 che:
-- TB1 venga popolato con il valore del TeId selezionato ( questo riesco )
-- TB2 venga popolato con il valore del TeSoc selezionato ( IL PROBLEMA E' QUESTO )

quindi faccio
Protected Sub GV1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles GV1.SelectedIndexChanged

   Me.TB1.Text = Me.GV1.SelectedValue  ' Questo va bene
        
   ' cosa scrivo qui sotto per avere il valore di TeSoc nel 3° campo ???
   Me.TB2.Text = Me.GV1.SelectedRow.Controls(3).??????

End Sub



Grazie
Modificato da nman il 20 luglio 2014 17.42 -
Modificato da nman il 20 luglio 2014 17.45 -
Modificato da nman il 20 luglio 2014 17.52 -
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
anziché prelevare il valore dalle celle della riga selezionata, prova a leggerlo direttamente dalla fonte, e cioè dalla Datasource della GridView.
Qualche giorno fa c'è stato un quesito simile, in cui si doveva recuperare il valore di una cella dal SelectedIndexChanged. Vedi se puoi trarne qualche spunto.
http://forum.aspitalia.com/forum/post/404101/Encoding-Caratteri-Accentati.aspx?PageIndex=2#404365

ciao,
Moreno

Enjoy learning and just keep making
156 messaggi dal 01 dicembre 2010
Grazie, :)

In effetti anch'io pensavo di avere risolto con
Me.GV1.SelectedRow.Cells(3).Text

ma avevo lo stesso problema dei caratteri accentati
e anche dei valori Null.


Questa sera provo la alternativa che proponi passando dal DataSource e ti faccio sapere

.
Modificato da nman il 22 luglio 2014 06.53 -
Modificato da nman il 22 luglio 2014 06.56 -
156 messaggi dal 01 dicembre 2010
Mmmmhhhh !!
è dura se si voglono fare le cose per bene.

Ho provato cosi,
Protected Sub GV1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles GV1.SelectedIndexChanged
' .......
Dim row = CType(GV1.DataSource, DataTable).Rows(GV1.SelectedIndex)
Dim valore = row("TeSoc")
Me.TB2.Text = valore
' ......

Sembra semplice e lineare ma mi va in errore sulla 1° riga
( Eccezione di tipo 'System.NullReferenceException' in App_Web_a2ze5wh1.dll non gestita nel codice utente )


__________________________________________________________


Sarei riuscito invece andando a leggere i valori in tabella
e usando il "Me.GV1.SelectedValue" come parametro,
ma ho la sensazione che mi sto complicando troppo
una cosa elementare :-(
 
Protected Sub GV1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles GV1.SelectedIndexChanged 

' ........   
  Using conn As New SqlConnection("Data Source=PCI80;Initial Catalog=NomeDB;Persist Security Info=True;User ID=xxxx;Password=xxxxxx")

      Dim StrSelect As String = "SELECT TeSoc FROM Te WHERE TeId=@Par;"

      Using CmdSelect As New SqlCommand(StrSelect, conn)
          CmdSelect.Parameters.AddWithValue("@Par", Me.GV1.SelectedValue)

          conn.Open()

          Using reader As SqlDataReader = CmdSelect.ExecuteReader()

              '  Non riesco a togliere il ciclo,  Devo leggere solo 1 record
              While reader.Read()
                  TB2.Text = reader("TeSoc")
              End While

          End Using
          conn.Close()
      End Using
  End Using

' .........



Come posso semplificare/correggere il tutto ??

Grazie

.
Modificato da nman il 23 luglio 2014 06.36 -
3.939 messaggi dal 28 gennaio 2003
questo è solo un esempio.

Ho legato la griglia ad un DataTable

Nell'evento SelectedIndexChanging metto:


Dim gv As GridView = DirectCast(sender, GridView)
gv.SelectedIndex = e.NewSelectedIndex
Dim key As Integer = CInt(gv.DataKeys(e.NewSelectedIndex)(0))
Dim keyName As String = gv.DataKeyNames(0).ToString

Dim dt As DataTable = DirectCast(gv.DataSource, DataTable)
dt.DefaultView.RowFilter = String.Format("{0} = {1}", keyName, key)

adesso, in dt.DefaultView, posso recuperare i campi che mi interessano


ps. se ti interessano i dati di una tabella correlata, devi fare come hai fatto tu

ciao
Modificato da pietro09 il 23 luglio 2014 10.08 -
156 messaggi dal 01 dicembre 2010
Purtroppo sono ancora troppo "acerbo" per capire tutti i consigli che mi date.
pero ci arrivero
ma intanto riuscire a capire ( senza copiaincollare ) solo il 20% per me è gia importante

Non mi servono dati da tabelle correlate, pero mi sono reso conto che non tutti i campi che mi interessano sono nel GridViev

percio sono andato a pescarmeli in tabella modificando cosi la mia idea iniziale : ( ho eliminato il ciclo sul reader perché il filtro su Id mi garantisce di avere 1 solo campo )
        Using conn As New SqlConnection("Data Source=NomeServer;Initial Catalog=DFWFa;Persist Security Info=True;User ID=xxxx;Password=xxxxx")
            Dim StrSelect As String = "SELECT TeSoc, TeDesc, Telef, TeFax, TeMail, TeVia, TeCit, TeOrd, TeNote, TeNow, TeId, TeUt FROM Te WHERE TeId=@Par;"
            Using CmdSelect As New SqlCommand(StrSelect, conn)
                CmdSelect.Parameters.AddWithValue("@Par", Me.GV1.SelectedValue)    'Alternativa  Me.GV1.SelectedDataKey.Value
                conn.Open()
                Using rea As SqlDataReader = CmdSelect.ExecuteReader()
                    rea.Read()
                    'While rea.Read()
                    Me.TMSoc.Text = If(Len(rea("TeSoc") + "") = 0, "", rea("TeSoc"))
                    Me.TMDes.Text = If(Len(rea("TeDesc") + "") = 0, "", rea("TeDesc"))
                    ' ........eccetera per tutti i campi
                    'End While
                End Using
                conn.Close()  '<<<<  Serve chiudere la conn  ?????
            End Using
        End Using



Faccio una ulteriore domanda sempre legata al problema.
a un certo punto del codice ho messo " conn.Close() "
ma ho il dubbio che si tratti di un refuso di copia e incolla di altri post su questo forum,
in quanto usando "Using" tutti gli oggetti aperti al suo interno dovrebbero chiudersi automaticamente

Mmmhhh!!! pero "conn" è stata aperta senza "Using"

Una opinione?

Grazie

.
Modificato da nman il 24 luglio 2014 09.05 -
252 messaggi dal 03 novembre 2003
Ma io in genere, se devo prelevare dei dati da una riga di GridView,
imposto i valori in un evento della stessa Grid:


Nel mio codice passo l'oggetto da una classe 'p_entity' in quanto la griglia si carica da collection:

Al click di una riga, si chiama una funzione JS openReview(MyID){...}
e da lì elaboro i valori...


#region GESTIONE RIGA PER RIGA REPORT
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType.ToString().ToLower() == "datarow")
        {
            intCont++;
            e.Row.Attributes.Add("id", "row_" + intCont.ToString() + "");
            e.Row.Attributes.Add("onclick", "openReview('" + ((ObjectModel.p_entity)(e.Row.DataItem)).CampoId + "','" + "')");
            
        }
        else if (e.Row.RowType.ToString().ToLower() == "pager")//FOOTER
        {
            e.Row.Attributes.Add("noexcel", "True");
        }
    }
    #endregion



it's not difficult to write, but is difficult write that you mean

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.