PDA

View Full Version : سوال: مشکل جستجو در datagridview



elvishman
سه شنبه 09 تیر 1394, 22:55 عصر
سلام .. با عرض معذرت خدمت اساتید و مدیران محترم سایت . خواهشمندم در صورتی که جای سوال درست نیست تاپیک رو نبندید و اجازه بدید پاسخ مشکلم رو پیدا کنم .
من چند سال پیش برنامه نویسی c# انجام میدادم .. و بعد از چند سال دوری با استفاده از تکه سورس کدها یه برنامه ای رو برای بانک نوشتم . کار این برنامه جستجو و فیلتر کردن کلمات ورودی به تکست باکس هست که فیلتر رو از طریق فیلد کومبو باکس انجام میده و جستجو رو در کولومن انتخابی انجام میده . مشکل اینجاست که جستجو در این برنامه فقط در بین کلمات اول انجام میشه . به فرض دیتا بیس من دارای عبارت " دفاتر معین اداره معاملات ریالی " هست . در این برنامه جستجو فقط برای کلمه دفاتر ممکن هست و برای سایر کلمات جستجو دارای نتیجه نیست . من سورس کامل برنامه رو وارد میکنم . تا دوستان و اساتید محترم راهنمایی کنند . ممنونم .



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


namespace dgv_filter
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
String connect = @"provider=microsoft.jet.oledb.4.0;" + @"data source=" + Application.StartupPath + "/dbs.mdb";
OleDbConnection con;
OleDbCommand command;
OleDbDataAdapter adapter;
DataTable objDataTable;



private void load()
{
try
{
con = new OleDbConnection(connect);
con.Open();
string query = "select madde,family,name,ncode,emha from zirna";
command = new OleDbCommand();
command.CommandText = query;
command.Connection = con;
adapter = new OleDbDataAdapter();
adapter.SelectCommand = command;
objDataTable = new DataTable();
adapter.Fill(objDataTable);

con.Close();
dataGridView1.DataSource = objDataTable;
dataGridView1.Columns[0].HeaderText = "ماده";
dataGridView1.Columns[0].Width = 80;



dataGridView1.Columns[1].HeaderText = "ردیف";
dataGridView1.Columns[1].Width = 100;




dataGridView1.Columns[2].HeaderText = "بند";
dataGridView1.Columns[2].Width = 70;




dataGridView1.Columns[3].HeaderText = "شرح مواد آئین نامه";
dataGridView1.Columns[3].Width = 70;


dataGridView1.Columns[4].HeaderText = "وضعیت امحاء";
dataGridView1.Columns[4].Width = 70;
}
catch { MessageBox.Show("سیستم به بانک اطلاعاتی وصل نشده است"); this.Dispose(); }
}
private void Form1_Load(object sender, EventArgs e)
{
load();
}
void serach()
{
string query = null;
try
{
switch (comboBox1.Text)
{
case "بند": { query = "SELECT name,family,ncode,madde,emha FROM zirna WHERE name LIKE '" + textBox1.Text + "%'"; break; }
case "ردیف": { query = "SELECT name,family,ncode,madde,emha FROM zirna WHERE family LIKE '" + textBox1.Text + "%'"; break; }
case "شرح مواد آئین نامه": { query = "SELECT name,family,ncode,madde,emha FROM zirna WHERE ncode like '" + textBox1.Text + "%'"; break; }
case "ماده": { query = "SELECT name,family,ncode,madde,emha FROM zirna WHERE madde LIKE '" + textBox1.Text + "%'"; break; }
case "وضعیت امحاء": { query = "SELECT name,family,ncode,madde,emha FROM zirna WHERE emha LIKE '" + textBox1.Text + "%'"; break; }


default: { break; }
}


con = new OleDbConnection(connect);
con.Open();
command = new OleDbCommand();
command.CommandText = query;
command.Connection = con;
adapter = new OleDbDataAdapter();
adapter.SelectCommand = command;
objDataTable = new DataTable();
adapter.Fill(objDataTable);
con.Close();
dataGridView1.DataSource = objDataTable;
}
catch { }
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{

}


private void textBox1_TextChanged(object sender, EventArgs e)
{
serach();
}


private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{


}


private void button4_Click(object sender, EventArgs e)
{
System.Diagnostics.Process.Start(@"C:\1.pdf");
}


private void button5_Click(object sender, EventArgs e)
{
Form3 f3 = new Form3();
f3.Show();
}


private void button3_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();
}


private void button1_Click(object sender, EventArgs e)
{
if (MessageBox.Show(" مطمئن هستید که قصد خروج دارید ؟", "خروج از برنامه", MessageBoxButtons.OKCancel) == DialogResult.OK)
{


Application.Exit();


}
}


private void groupBox1_Enter(object sender, EventArgs e)
{


}
}
}




تصویر محیط برنامه :

132789

Yanehsar
سه شنبه 09 تیر 1394, 23:10 عصر
سلام .. با عرض معذرت خدمت اساتید و مدیران محترم سایت . خواهشمندم در صورتی که جای سوال درست نیست تاپیک رو نبندید و اجازه بدید پاسخ مشکلم رو پیدا کنم .

سلام به شخصه از این روش استفاده می کنم تا حالا هم مشکلی نداشتم
برای لود اطلاعات :


try
{
this.KeyPreview = true;
if (con.State != ConnectionState.Open)
con.Open();
da = new OleDbDataAdapter("select * from tbl", con);
da.Fill(ds, "tbl");
dv.Table = ds.Tables["tbl"];
dgv.DataSource = dv;
dgv.Columns["Heder.UID"].HeaderText = "کد ";
dgv.Columns["Heder.UID"].Width = 100;
dgv.Columns["TBImar.UName"].HeaderText = "نام";
dgv.Columns["TBImar.UName"].Width = 100;
dgv.Columns["uidBime"].HeaderText = "شماره بیمه";
dgv.Columns["uidBime"].Width = 100;
dgv.Columns["LastDate"].HeaderText = "تاریخ آخرین جلسه";
dgv.Columns["LastDate"].Width = 100;
dgv.Columns["PriceBimar"].Width = 100;
dgv.Columns["Date"].Visible = false;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
if (con.State != ConnectionState.Closed)
con.Close();
}


و برای جستجو در قسمت TextChanged از کد زیر استفاده می کنم


try
{
dv.RowFilter = "TBImar.Uname like '%" + txtSerach.Text + "%' or uidBime like '%" + txtSerach.Text + "%' or LastDate like '%" + txtSerach.Text + "%'";
dgv.DataSource = dv;
}
catch (Exception ex_
)
{
MessageBox.Show(ex_.Message);
}

با استفاده از کد بالا و به کار گیری چند فیلد با استفاده از OR می تونید روی چند فیلد فیلتر گذاری کنید .
اگر کمبوباکس هم برای شما اهمیت داره می تونید در انتها از And هم استفاده کنید که فیلتر گذاری زودتر به نتیجه برسه

elvishman
چهارشنبه 10 تیر 1394, 09:12 صبح
با تشکر از دوست عزیز Yanehsar (http://barnamenevis.org/member.php?156314-Yanehsar)
دوستان اگر راه حل دیگه ای هم دارن که مبتنی بر سورس کد خود برنامه که بالا نوشتم هست ارائه کنند لطفا . خدا خیرتون بده انشاا...