Mon filtrage, pas trop "certain". Besoin d'aide s.v.p [Résolu]

Signaler
Messages postés
187
Date d'inscription
mercredi 24 mai 2006
Statut
Membre
Dernière intervention
28 août 2015
-
Messages postés
187
Date d'inscription
mercredi 24 mai 2006
Statut
Membre
Dernière intervention
28 août 2015
-
private void btnFind_Click(object sender, EventArgs e)
{
string searchFor = "Julien";
int results = 0;

DataRow[] returnedRows;

returnedRows = ds1.Tables["workers"].Select("last_name='" + searchFor + "'");

results = returnedRows.Length;

if (results > 0)
{
DataRow dr1;

dr1 = returnedRows[0];
//montrera la donnée filtrée sur mon "messageBox"
MessageBox.Show(dr1["job_title"].ToString());

//montrera la donnée filtrée sur "textbox3"
//textBox3.Text = dr1.ItemArray.GetValue(3).ToString();
//montrera la donnée filtrée sur "combobox"
//comboBox1.Text = dr1.ItemArray.GetValue(3).ToString();


}
else
{
MessageBox.Show("Pas d'enregistrement trouvé");
}
}


Developper est une dimension pour moi.
Leader2000

11 réponses

Messages postés
187
Date d'inscription
mercredi 24 mai 2006
Statut
Membre
Dernière intervention
28 août 2015

Salut!

J'ai resolu ce problème de filtrage!
Merci à tous ceux qui m'ont envoyé leurs codes. Ça m'a inspiré.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>



</configuration>



Then store the emp.mdb in bin folder.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
namespace Search
{
public partial class Form1 : Form
{
string ConnectionString = System.Configuration.ConfigurationSettings.AppSettings["dsn"];
OleDbCommand com;
OleDbDataAdapter oledbda;
DataSet ds;
string str;
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
OleDbConnection con = new OleDbConnection(ConnectionString);
con.Open();
str = "select * from student where sname like '%" + textBox1.Text + "%'";
com = new OleDbCommand(str, con);
oledbda = new OleDbDataAdapter(com);
ds = new DataSet();
if (Convert.ToBoolean(oledbda.Fill(ds, ("student"))))
{
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "student";
MessageBox.Show("match found");
}
else
{
MessageBox.Show("match not found");

}
con.Close();
}
}
}


Developper est une dimension pour moi.
Leader2000
Messages postés
187
Date d'inscription
mercredi 24 mai 2006
Statut
Membre
Dernière intervention
28 août 2015

PARDON! J'AI FAIT UNE GROSSE BETISSE. J'AVAIS PAS BIEN POSER MA QUESTION. LA VOICI BIEN EXPLIQUE. ENCORE UNE FOIS, PARDON.
Salut à TOUS!

Je suis un novice dans le language C#. Mais ayant quelques bases fondamentals posées. Bien qu'il faut encore les dominées sérieusement.
j'utilise du VS 2010 et j'ai une preocupation sur le filtrage de données.

Sur mon form, j'ai un dbGrid ayant 6 enregistrements et un TButton sur lequel j'ai écrit de codes de recherche par exemple d'un enregistrement. Ma valeur de recherche est faite sur "julien". Ça marche bien! Mon MessageBox me dit qui est "Julien". Mais curieusement, mon DbGrid continue a m'afficher tous les 6 dits enregistrements. Du moins, en me montrant une ou deux données supplémentaires de "julien" sur le dit Messagebox. Que veux-je? J'aimerai voir s'afficher seulement sur mon DbGrid un seul enregistrement qu'est "Julien".

----------------
Juste une question de filtrage qui decapote tout. Besoin d'aide s.v.p

private void btnFind_Click(object sender, EventArgs e)
{
string searchFor = "Julien";
int results = 0;

DataRow[] returnedRows;

returnedRows = ds1.Tables["workers"].Select("last_name='" + searchFor + "'");

results = returnedRows.Length;

if (results > 0)
{
DataRow dr1;

dr1 = returnedRows[0];
//montrera la donnée filtrée sur mon "messageBox"
MessageBox.Show(dr1["job_title"].ToString());

//montrera la donnée filtrée sur "textbox3"
//textBox3.Text = dr1.ItemArray.GetValue(3).ToString();
//montrera la donnée filtrée sur "combobox"
//comboBox1.Text = dr1.ItemArray.GetValue(3).ToString();


}
else
{
MessageBox.Show("No record found");
}
}

Developper est une dimension pour moi.
Leader2000
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
12
Salut,

dans ton code à aucun moment tu n'agis sur le contrôle DataGrid, comment veux-tu qu'il y ait un changement dans son affichage ? Alors je suis pas un expert des DataGrid et autres contrôles d'affichage de données prédéfinis, mais le comportement que tu décris ne me choque pas aux vues de ton code.
Messages postés
187
Date d'inscription
mercredi 24 mai 2006
Statut
Membre
Dernière intervention
28 août 2015

Merci d'avoir repondu. C'est pour cela que j'ai besoin d'aide dessus. Je sais que je n'ai écris aucun code sur les données à afficher sur mon dbgrid. Du moins, il y a un éclaircissement dans mes codes. Je crois qu'à partir de là on peut comprendre mon problème.

Developper est une dimension pour moi.
Leader2000
Messages postés
219
Date d'inscription
mercredi 26 octobre 2011
Statut
Membre
Dernière intervention
22 juin 2017
9
Bonjour,

A mon avis le Datasource de ton datagrid doit être ton returnedRows.

Et de plus le returnedRows devrait être défini dans la classe de la fenêtre contenant ton datagrid et pas localement à la fonction de traitement de bouton.

Bonne journée



Faites simple, aussi simple que possible, mais pas simpliste.
A. Einstein.
Messages postés
187
Date d'inscription
mercredi 24 mai 2006
Statut
Membre
Dernière intervention
28 août 2015

J'ai comme l'impression que personne ne peut me faire quelques bons éclairciseements dessus.


Developper est une dimension pour moi.
Leader2000
Messages postés
219
Date d'inscription
mercredi 26 octobre 2011
Statut
Membre
Dernière intervention
22 juin 2017
9
Bonjour,

Qu'as tu mis dans le DataSource de ton Datagrid ?





Faites simple, aussi simple que possible, mais pas simpliste.
A. Einstein.
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
12
perso je connais quelqu'un qui pourrait te faire tous les éclaircissements que tu souhaites, je m'y réfère très souvent : MSDN
Messages postés
219
Date d'inscription
mercredi 26 octobre 2011
Statut
Membre
Dernière intervention
22 juin 2017
9
Bonjour,

ton


DataRow[] returnedRows;

returnedRows = ds1.Tables["workers"].Select("last_name='" + searchFor + "'");

te renvoie le liste d'enregistrement pour last_name = '<searchFor>' dans returnedRows.

mais ne modifie pas ds1.Tables["workers"] qui est en pricipe le datasource de ton datagrid.

pourquoi veux-tu que ton datagrid change.

test ceci cela devrait marcher :

TonDataGrid.DataSource = ds1.Tables["workers"].Select("last_name='" + searchFor + "'");


Les données de ta datatable viennent d'ou ? d'un dataadapteur ?

Bonne journée



Faites simple, aussi simple que possible, mais pas simpliste.
A. Einstein.
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
7
Salut,

Si ton DataGrid affiche les données de la table "workers" de ton DataSet, il te suffit de "filtrer" les données de ton DataSet :

ds1.Tables["workers"].DefaultView.RowFilter = "last_name='" + searchFor + "'";
Messages postés
187
Date d'inscription
mercredi 24 mai 2006
Statut
Membre
Dernière intervention
28 août 2015

Salut!

Vraiment, je n'en peux rien je suis obligé d'envoyer tous les codes.
Venez moi en aide s'il vous plait:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Zemirah
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
System.Data.SqlClient.SqlConnection con;
System.Data.SqlClient.SqlDataAdapter da;
DataSet ds1;

int MaxRows = 0;
int inc = 0;

private void Form1_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'myWorkersDataSet1.tblWorkers' table. You can move, or remove it, as needed.
this.tblWorkersTableAdapter.Fill(this.myWorkersDataSet1.tblWorkers);
con = new System.Data.SqlClient.SqlConnection();
ds1 = new DataSet();

con.ConnectionString = @"Data Source=.\SQLEXPRESS; AttachDbFilename =C:\EXERCICIOS_C#_2010\ZEMIRAH\ZEMIRAH\MYWORKERS.MDF;Integrated Security=True;Connect Timeout=30;User Instance=True";

con.Open();
string sql = "Select * from tblWorkers";
da = new System.Data.SqlClient.SqlDataAdapter(sql, con);
da.Fill(ds1, "Workers");
NavigateRecords();
MaxRows = ds1.Tables["Workers"].Rows.Count;
con.Close();
//con.Dispose();
}

private void NavigateRecords()
{

DataRow dRow = ds1.Tables["Workers"].Rows[inc];
textBox1.Text = dRow.ItemArray.GetValue(1).ToString();
textBox2.Text = dRow.ItemArray.GetValue(2).ToString();
textBox3.Text = dRow.ItemArray.GetValue(3).ToString();
}

private void btnNext_Click(object sender, EventArgs e)
{
if (inc != MaxRows - 1)
{
inc++;
NavigateRecords();
}
else
{
MessageBox.Show("No more row(s)");
}
}

private void button1_Click(object sender, EventArgs e)
{
if (inc > 0)
{
inc--;
NavigateRecords();
}
else
{
MessageBox.Show("First Row");
}
}

private void btnLast_Click(object sender, EventArgs e)
{
if (inc != MaxRows - 1)
{
inc = MaxRows - 1;
NavigateRecords();
}
else
{
MessageBox.Show("Last row");
}
}

private void button1_Click_1(object sender, EventArgs e)
{
if (inc != 0)
{
inc = 0;
NavigateRecords();
}
}

private void btnAddNew_Click(object sender, EventArgs e)
{
textBox1.Clear();
textBox2.Clear();
textBox3.Clear();
}

private void btnSave_Click(object sender, EventArgs e)
{

System.Data.SqlClient.SqlCommandBuilder cb;
cb = new System.Data.SqlClient.SqlCommandBuilder(da);


DataRow dRow = ds1.Tables["workers"].NewRow();

dRow[1] = textBox1.Text;
dRow[2] = textBox2.Text;
dRow[3] = textBox3.Text;

ds1.Tables["workers"].Rows.Add(dRow);

MaxRows = MaxRows + 1;
inc = MaxRows - 1;

da.Update(ds1, "workers");
MessageBox.Show("Entry Added");

}

private void btnDelete_Click(object sender, EventArgs e)
{
System.Data.SqlClient.SqlCommandBuilder cb;
cb = new System.Data.SqlClient.SqlCommandBuilder(da);

ds1.Tables["workers"].Rows[inc].Delete();
MaxRows--;
inc = 0;
NavigateRecords();

da.Update(ds1, "workers");
MessageBox.Show("Record deleted");
}
//le problème commence très exactement ici////////////
private void btnFind_Click(object sender, EventArgs e)
{
//search from code writing a name
//string searchFor = "julien";

//search from a textbox
string searchFor = textBox1.Text;

int results = 0;

DataRow[] returnedRows;

//returnedRows = ds1.Tables["workers"].Select("last_name='" + searchFor + "'");
dataGridView1.DataSource ds1.Tables["workers"].DefaultView.RowFilter "last_name='" + searchFor + "'";

//ds1.Tables["workers"].DefaultView.RowFilter = "last_name='" + searchFor + "'";

results = returnedRows.Length;

if (results > 0)
{
DataRow dr1;

dr1 = returnedRows[0];
//will show data filtered on a "messageBox"
MessageBox.Show(dr1["job_title"].ToString());

//will show data filtered on "textbox3"
//textBox3.Text = dr1.ItemArray.GetValue(3).ToString();

//comboBox1.Text = dr1.ItemArray.GetValue(3).ToString();



}
else
{
MessageBox.Show("No record found");
}
}



}
}


Developper est une dimension pour moi.
Leader2000