Selezione in un datagrid

di il
29 risposte

Selezione in un datagrid

Ciao a tutti
ho bisogno di aiuto!!
ho un datagrid ke mi visualizza una tabella di un database. vorrei ke selezionando una riga e clikkando su un pulsante i valori dei campi della riga vengano scritti in alcuni textbox..come faccio?aiutatemi grazie

29 Risposte

  • Re: Selezione in un datagrid

    Ciao,
    Il tuo pulsante deve intercettare l'evento SelectedIndexChanged del datagrid. In tal modo puoi risalire alla riga selezionata e scrivere i valori che ti interessano. Es.:

    Public Sub TuaDataGrid_OnSelect(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TuaDataGrid.SelectedIndexChanged
    If TuaDataGrid.SelectedIndex >= 0 Then
    Dim Index As Integer
    Index = TuaDataGrid.SelectedIndex
    TuoTextBox1.Text = TuaDataGrid.Items(Index).Cells(n).Text
    TuoTextBox2.Text = TuaDataGrid.Items(Index).Cells(n1).Text

    End Sub
    Dove n,n1 rappresentano il numero associato alla colonna (ricorda che devi contare a partire da zero).

    Spero di aver capito ciò che intendevi.
    Ciao Loris.

    Loris
  • Re: Selezione in un datagrid

    Si hai beccato in pieno il problema solo ke non sono riuscito a risolverlo...ti spiego:
    I metodi SelectedIndexChanged e SelectedIndex non sono applicabili a datagrid in più in questo caso:

    TuoTextBox1.Text = TuaDataGrid.Items(Index).Cells(n).Text
    TuoTextBox2.Text = TuaDataGrid.Items(Index).Cells(n1).Text

    mi dice che non è possibile convertire un oggetto integer (Index)in un oggetto DataGridCell

    Se puoi aiutarmi te ne sono grato
    ciao e grazie
  • Re: Selezione in un datagrid

    Ciao, prova con questo evento... non sono pratico di VB ma dovrebbe andare comunque bene:

    private void dg_CurrentCellChanged(object sender, EventArgs e)
    {
    DataGrid dg=(DataGrid)sender;
    dg.Select(dg.CurrentCell.RowNumber);
    }

    e poi la dove ti serve conoscere il contenuto ed il dettaglio della riga selezionata inserisci il seguente:

    BindingManagerBase bm = this.BindingContext[dataGrid1.DataSource, dataGrid1.DataMember];
    dettaglioDataRow = ((DataRowView)bm.Current).Row;

    spero che vada bene questo aiutino

    ciao e buon lavoro

    Leonardo Miglietta
  • Re: Selezione in un datagrid

    Ma è un datagrid presente in un'applicazione vb.net classica oppure asp.net?.
    Se è asp.net non ho capito nulla, altrimenti se è vb.net prova con:

    Private Sub TuaDatGrid_RowClick(ByVal sender As Object, ByVal e As MouseEventArgs) Handles TuaDatGrid.MouseDown
    Dim myGrid As DataGrid = CType(sender, DataGrid)
    Dim hti As System.Windows.Forms.DataGrid.HitTestInfo
    hti = myGrid.HitTest(e.X, e.Y)
    Me.DgArticoli.Visible = False
    Me.RichTextBox1.Visible = False

    If hti.Type = System.Windows.Forms.DataGrid.HitTestType.RowHeader Then
    TuoTextBox1 = TuoDataSet.Tables("TuaTabella").Rows(hti.Row).Item("TuoCampo")
    End If
    End Sub

    In questo modo associ alla tua datagrid l'elento click del mouse,
    e se hai cliccato sull'intestazione di una riga allora l'indice hti.row corrisponde al record della tabella associata al datagrid.

    Ciao.
    Loris

    Loris
  • Re: Selezione in un datagrid

    Ciao Loris
    ho provato come dici tu ma mi dà un errore di un cast non valido in :
    TuoTextBox1 = TuoDataSet.Tables("TuaTabella").Rows(hti.Row).Item("TuoCampo")
    (Non pensare che non abbia sostituito i nomi dei componenti)

    e mi dici cosa devo sostituire al posto di DgArticoli e RichTextBox1?
  • Re: Selezione in un datagrid

    Devi usare il campo Text

    in c#

    TextBox1.Tex= DataSet.Tables[0].Rows[0].Items["TuoCampo"].ToString();

    in Vb è simile, devi solo metterre le tonde, ciao

    Andrea
  • Re: Selezione in un datagrid

    Grazie andrea funziona
  • Re: Selezione in un datagrid

    Hey raga ho bisogno ancora di voi...
    il textBox nel quale voglio inserire i dati si trova in un'altra form che viene già aperta in precedenza.quindi io voglio che selezionando una riga premo un tasto e la form con i textBox torni in primo piano. ho provato con questa sintassi ma non funziona:

    NomeForm.TextBox.Text = TDataSet.Tables("Tabella").Rows(hti.Row).Item("Campo")


    Ci capite qualcosa?
  • Re: Selezione in un datagrid

    Ciao,
    innazitutto scusami perchè ho saltato il .Text nell'esempio (il copia ed incolla non è il mio forte...).
    Per l'altro problema suppongo che tu apra il datagrid in una form separata in cui ci saanno anche 2 bottoni (conferma ed annulla). Se è così definisci una proprietà pubblica della form chiamata per ogni valore che devi restituire e poi quando la chiudi prelevi questo valore e lo poni nella tua form chiamante. Ossia nella form chiamata poni:

    Public Class FormChiamata
    Inherits System.Windows.Forms.Form
    Dim ValorediRitorno1 As String = String.Empty
    ......
    Public Property Valore1() As String
    Get
    Return ValorediRitorno1
    End Get
    Set(ByVal Value As String)
    ValorediRitorno1= Value
    End Set
    End Property
    ......
    Quando intercetti la riga del datagrid usa la routine attuale ponendo però i valori in ValorediRitorno1, ecc.
    Ricordati di attribuire alla proprietà acceptbutton della form il tuo botton di conferma ed il bottone annulla alla proprietà cancelbutton.
    Nella form chiamante:
    Dim Frm As New TuaFormChiamata()
    If Frm.DialogResult = DialogResult.OK Then
    TuoTextBox1.Text = Frm.Valore1
    ....
    ...
    End If

    E' una metodo che ho usato ampiamente e mi funziona.
    Se serve sai dove contattarmi.
    Ciao e fammi sapere.
    Loris.




    Loris
  • Re: Selezione in un datagrid

    Ciao Loris scusami se non ho capito niente...
    io ho una form chiamata gruppo in cui ci sono due txtBox e un pulsante ke mi apre la form Ricerca dove c'è il datagrid con i pulsanti ok e annulla.
    a questo punto voglio selezionare una riga nel dg premere ok e la form gruppo deve tornare in primo piano con i due txtbox riempiti...
    grazie e scusa l'ignoranza
  • Re: Selezione in un datagrid

    Non mi aiutate più?
  • Re: Selezione in un datagrid

    Ciao East,
    solo ora ho letto il tuo messaggio ed eccomi qui.
    La logica è questa:
    La form che esegue la ricerca (es... Frm_Ricerca) deve poter ritornare dei valori alla form chiamante (es.. Frm_Gruppo), la quale a sua volta deve capire se l'utente ha premuto il tasto Ok oppure Annulla.
    Ciò lo si fa in 4 passi:
    1) Dichiarando in Frm_Ricerca delle proprietà pubbliche che potranno essere lette e/o impostate da Frm_Gruppo
    2) Impostando la proprietà DialogResult dei bottoni a Ok e Cancel rispettivamente
    3) Associando alle proprietà AcceptButton e CancelButton della form i rispettivi bottoni
    3 Aprendo da Frm_Gruppo la form Frm_Ricerca con la 'modalita' ShowDialog.

    Cominciamo dalla form chiamata (es... Frm_Ricerca).

    Dopo la dichiarazione della form (Public Class Frm_Ricerca ...)
    definiamo le proprietà:

    Public Class Frm_Ricerca
    Inherits System.Windos.Forms.Form

    '
    ' Dichiaro i valori da ritornare
    '
    Dim m_v1 As String
    .....
    '
    ' Dichiaro le proprietà della form
    '
    Public Property v1 as String
    Get
    Return m_v1
    End get
    Set (Byval Value As String)
    m_v1 = value
    End Set
    End Property
    .....
    Seguono poi le tue procedure. In quella che intercetta la riga del datagrid poni i valori delle colonne nei valori di ritorno definiti (m_v1).
    Negli eventi dei bottoni ok ed annulla chiudi semplicemente la form con Me.Close.

    Nella form Frm_Gruppo quando intercetti il bottone ricerca:

    Dim Frm As New Frm_Ricerca()
    If Frm.ShowDialog = DialogResultOk Then
    ' l'utente ha premuto ok
    Me.TextBox1.Text = Frm.V1 ' recupero il valore della prima proprietà della from ricerca e lo pongo nel textbox
    ...
    Else
    ' l'utente ha premuto annulla
    ....
    End If

    Spero di essere stato più chiaro e mi dispiace per il ritardo della risposta perchè so come ti devi sentire (lo sperimento molto spesso).
    Ciao Loris.
    p.s.: siamo tutti 'ignoranti'.

    Loris
  • Re: Selezione in un datagrid

    Grazie per la risposta loris...solo una cosa. non ho capito bene questa parte:
    "Seguono poi le tue procedure. In quella che intercetta la riga del datagrid poni i valori delle colonne nei valori di ritorno definiti (m_v1)."
    non capisco cosa devo sostituire e dove.
    ciao e ancora grazie
  • Re: Selezione in un datagrid

    Ciao East,
    volevo intendere che la procedura che intercetta la selezione della riga del datagrid deve essere presente nella form chiamata e deve porre i valori delle colonne nelle variabili che usi come proprietà. Ossia se m_v1 è il primo valore che restituisci (coincide quindi con la proprietà v1 dell'esempio precedente) avrai un qualcosa del tipo:

    Private Sub TuaDatGrid_RowClick(ByVal sender As Object, ByVal e As MouseEventArgs) Handles TuaDatGrid.MouseDown
    Dim myGrid As DataGrid = CType(sender, DataGrid)
    Dim hti As System.Windows.Forms.DataGrid.HitTestInfo
    hti = myGrid.HitTest(e.X, e.Y)
    If hti.Type = System.Windows.Forms.DataGrid.HitTestType.RowHeader Then
    m_v1 = TuoDataSet.Tables("TuaTabella").Rows(hti.Row).Item("TuoCampo")
    End If
    End Sub

    Ciao.
    P.S.: occhio al tipo dati presente nelle colonne.


    Loris
Devi accedere o registrarti per scrivere nel forum
29 risposte