Altro problema. Vedo questo codice nell'evento
Form_Load:
DataTable data = new DataTable();
SqlDataAdapter adapter = new SqlDataAdapter(command);
adapter.Fill(data);
dataGridView1.DataSource = data;
Hai dichiarato una variabile locale "data" che rappresenta un DataTable, poi ne hai messa un'altra a livello di Form:
readonly DataTable data = new DataTable();
Una direi che è sufficiente, o comunque sono da codificare allo stesso modo per evitare conflitti, ad esempio riempire la prima e visualizzare la seconda, come penso accada esattamente, infatti nel
button3_Click (metti dei nomi significativi!) hai scritto
SqlDataAdapter adapter = new SqlDataAdapter(command);
adapter.Fill(data);
dataGridView1.DataSource = data;
quindi stai usando la variabile dichiarata a livello di Form, e non quella locale.
Anche in questo contesto
private void textBox1_TextChanged(object sender, EventArgs e)
{
DataView dv = data.DefaultView;
dv.RowFilter = "CodiceArticolo LIKE '" + textBox1.Text + "%'";
dataGridView1.DataSource = dv;
}
stai sempre lavorando con quella definita come campo del Form.
In poche parole, ne riempi una, ma poi ne usi un'altra e filtri su questa: non vedrai mai nulla a video.
In conclusione: ripulisci il codice, attribuisci alle variabili e ai controlli (quindi anche agli eventi) dei nomi significativi e fai debug passo passo per verificare eventuali problemi.
Ciao!