Problema DataGrid e RowFilter

venerdì 28 ottobre 2005 - 18.24

tamamma Profilo | Newbie

Salve a tutti, spero che qualcuno riesca ad aiutarmi a risolvere questo problema. Ho fatto una form nella quale c'è un DataGrid che carica i dati da MSDE e poi visualizza la riga selezionata in campi textBox. Funziona tutto correttamente, solo che ho voluto inserire 2 textbox ed un tasto di ricerca tramite il quale, attraverso RowFilter chiamato sul DataSet faccio visualizzare solo i record risultanti dall'applicazione del filtro. Solo che dopo aver eseguito il filtro non funziona più il binding dei campi textBox con il DataSet ovvero non mi aggiorna + i campi textBox readonly che ho impostato e che fino a prima di eseguire il filtro erano perfettamente Bindati.
Grazie a tutti in anticipo.

Allego il codice:
Questo è il Load:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim frmStatusMessage As New frmStatus

If Not didPreviouslyConnect Then
frmStatusMessage.Show("Connecting to SQL Server")
End If

Dim isConnecting As Boolean = True
While isConnecting
Try
Dim databaseConnection As New SqlConnection(connectionString)

Dim dataAdapter As New SqlDataAdapter("select * from Soci", databaseConnection)

SociDataSet.Clear()

dataAdapter.Fill(SociDataSet, NOME_TABELLA)
'Applico stile al DataGrid
FormatGridWithBothTableAndColumnStyles()

'dgSoci.DataSource = SociDataSet.Tables(NOME_TABELLA)
dgSoci.DataSource = SociDataSet
dgSoci.DataMember = NOME_TABELLA
isConnecting = False


Catch ex As Exception
MessageBox.Show(CONNECTION_ERROR_MSG, _
"Connessione Fallita!", MessageBoxButtons.OK, _
MessageBoxIcon.Error)

End Try

End While

frmStatusMessage.Close()

'collego i campi text dei textBox alle colonne del dataset
txtTesseraOut.DataBindings.Add("Text", SociDataSet, "Soci.Tessera")
txtNomeOut.DataBindings.Add("Text", SociDataSet, "Soci.Nome")
txtCognomeOut.DataBindings.Add("Text", SociDataSet, "Soci.Cognome")
txtDocumentoOut.DataBindings.Add("Text", SociDataSet, "Soci.Documento")
End Sub


e questa è la sub che mi esegue la ricerca:

Private Sub BtnCerca_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCerca.Click

Const MESSAGEBOX_CAPTION As String = "Filtro"

' Verifico che ci sono i dati prima di filtrare
Debug.Assert(Not SociDataSet.Tables(NOME_TABELLA) Is Nothing, _
"Non ci sono soci caricati in SociDataSet.Tables(NOME_TABELLA)")
With SociDataSet.Tables(NOME_TABELLA)

' Filtro per vedere solo i soci in base alla ricerca per Tessera
' o per Cognome.


If Not IsValidForm() Then
Exit Sub
End If

If txtCognome.Text <> "" Then

.DefaultView.RowFilter = "Cognome like '" & txtCognome.Text & "%'"

ElseIf txtTessera.Text <> "" Then
Dim tessera As Integer = Int32.Parse(txtTessera.Text)
.DefaultView.RowFilter = "Tessera = " & tessera & ""
End If

' Ci sono valori corrispondenti?
If .DefaultView.Count = 0 Then
MessageBox.Show("Non ci sono soci corrispondenti.", _
MESSAGEBOX_CAPTION, _
MessageBoxButtons.OK, _
MessageBoxIcon.Information)
End If

' Collegando il dataGrid con li DataView la griglia visualizzerà
' solo le righe corrispondenti.
dgSoci.DataSource = .DefaultView
txtTessera.Enabled = True

Cteniza Profilo | Guru

Secondo me potresti provare ad utilizzare una dataview.
Definisci un dataview a livello di modulo
Imposta la tabella come source del dataview
Metti il binding su dataview
Utilizza il dataview per filtrare


tamamma Profilo | Newbie

Ciao, perdona l'ignoranza ma potresti postarmi un esempio di ciò che mi hai scritto oppure almeno la modifica da fare al codice che ho postato io? Grazie mille

Cteniza Profilo | Guru

Credo che le indicazioni che ti ho dato siano sufficienti.
Comunque:
Con l'ide prendi un dataview e mettilo nella form
Imposta la datasource del dataview = alla tua tabella da gestire
Imposta il datasource (da solo) della tua datagrid sulla dataview


Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5