PDA

View Full Version : مشکل در استفاده از like (میخوام در تکست باکس وارد کنم در گرید نمایش بدم ولی درست جرا نمیشه)



csharpprogramer88
یک شنبه 10 بهمن 1389, 11:22 صبح
سلام

من میخوام چیزی را در تکست باکس وارد میکنم در گرید نشون بدم

مثلا در جستجوی فیلد lname اگر در تکست باکس مختاری نوشتم ، با نوشتن هر یک از کلمات اون فیلد اگر وجود داره بیاد

اگر م وارد شد هر چیزی که توش م وجود داره بیاد

اگر کاراکتر بعدی خ وارد شد هرچیزی توی اون مخ داره بیاد

اگر کاراکتر بعد ت وارد شد هر چییزی توی اون مخت داره بیاد

........



هر کاراکتری که وارد تکست باکس میشه محتویات رکورد در گرید نمایش داده شه که کد زیر را دارم در txtsearchname_TextChanged مینویسم






private void txtsearchname_TextChanged(object sender, EventArgs e)
{
if (txtsearchname.Text.Length > 0)
{
DataSet ds = DataLayer.ostad.Selectlastname(txtsearchname.Text) ;
if (ds.Tables["ostad"].Rows.Count > 0)
{
dataGridView1.DataSource = ds.Tables["ostad"].DefaultView;
}
}
}



البته من با sp نوشتم که در زیر می آرم :





ALTER procedure [dbo].[sp_ostad_lastname]
@lname nvarchar
As
Begin
Select
[ID],
[Name],
[Lname],
[pedar],
[BirthDay],
[taahol],
[Tedadfarzand],
[Mobile],
[tel_home],
[City],
[Detailsaddress],
[vazeeat_home],
[vazeeat_mashin],
[maharat]
From ostad

where Lname like N'%' +@lname + '%'









الان در این کد م را وارد میکنم هر چیزی که توش م وجود داره میاره مثلا : مختاری – کریمی و ....

حالا میخوام وقتی خ را وارد کردم و محتویات تکست باکس شده مخ فقط دنبال واژه هایی که در اون مخ بصورت پیوسته وجود داره بیاد .

ولی نمی دونم چرا هیچ تغیییری نمیکنه



اشتباه نکنم بخاطر txtsearchname_TextChanged هست



دوستان لطفا کمک کنید



با تشکر

sds1920
یک شنبه 10 بهمن 1389, 17:44 عصر
بهتره به جای اینکه مدام یک دیتاست درست کنید از دیتاویو استفاده کرده و فیلتر کنید.


DataView DV = new DataView();
DV.Table = DataSet1.Tables["Ostad"];
DV.RowFilter="name Like "+txtsearchname.Text;

موفق باشید

csharpprogramer88
سه شنبه 12 بهمن 1389, 08:15 صبح
بهتره به جای اینکه مدام یک دیتاست درست کنید از دیتاویو استفاده کرده و فیلتر کنید.


DataView DV = new DataView();
DV.Table = DataSet1.Tables["Ostad"];
DV.RowFilter="name Like "+txtsearchname.Text;

موفق باشید

اگرممکنه طبق چیزی که گفتم بهم کمک کنید

با تشکر

csharpprogramer88
چهارشنبه 13 بهمن 1389, 21:15 عصر
دوستان یکی جواب بده

debugger
چهارشنبه 13 بهمن 1389, 21:59 عصر
اون N را پاک کن اون دیگه چیه نوشتی . من اصلا N نمی نویسم همیشه هم درست جواب میده

Lname like N'%' +@lname + '%'

nathan
پنج شنبه 14 بهمن 1389, 01:48 صبح
ببينيد دوست عزيز استفاده از ديتا ويو درست تره من هم اگه بخوام براتون توضيح بدم فقط همين را رو بلدم اگه مي خواين بگم؟

ACorvinus
پنج شنبه 14 بهمن 1389, 08:17 صبح
سلام.
در sp دستور شرط رو به اینصورت تغییر بده.


where Lname like (N'' + @lname + '%')

csharpprogramer88
پنج شنبه 14 بهمن 1389, 08:23 صبح
سلام.
در sp دستور شرط رو به اینصورت تغییر بده.


where Lname like (N'' + @lname + '%')

تشکر که جواب دادی
من فعلا تا غروب به vs دسترسی ندارم ولی اگر اشتباه نکنم این کد بر اساس حرف اول کار میکنه

یاد آوری:
این برام مهمه :
وقتی م را وارد میکنم هر چی توش م داره بیاد وقتی خ را وارد میکنم هرچیزی مخ و وقتی ت را وارد میکنم مخت
و .....

لطفا به رویداد txtsearchname_TextChanged هم توجه کنید شاید ایراد از اینم باشه

با تشکر از شما

ACorvinus
پنج شنبه 14 بهمن 1389, 08:25 صبح
سلام.


اون N را پاک کن اون دیگه چیه نوشتی . من اصلا N نمی نویسم همیشه هم درست جواب میده


رفیق خود میکروسافت داره میگه برای جستجوی Unicode Characters به اولش یه N که برگرفته از Natrual هستش رو اضافه کنین.
من احتمال میدم شما همش کاراکترهای English-Alphabet رو جستجو می کردین به همین دلیل مشکلی پیش نمیومده.

به هر حال موفق باشین.

ACorvinus
پنج شنبه 14 بهمن 1389, 08:28 صبح
این برام مهمه :
وقتی م را وارد میکنم هر چی توش م داره بیاد وقتی خ را وارد میکنم هرچیزی مخ و وقتی ت را وارد میکنم مخت
و .....



من معذرت میخوام فکر کردم میخواین هر کلمه ای که اولش با حرفی که میخواین شروع بشه رو جستجو کنین. پس همون دستور خودتون درسته.

morteza271
پنج شنبه 14 بهمن 1389, 08:44 صبح
شما اول یه دیتا ست درست کنید و به دیتا گرید ویو یه SqlDataAdapter بدهید.
سپس در رویداد تکست چنج تکست باکس بنویسید:

this.BindingSource.Filter = "name like '%" + TextBox1.Text + "%'";

csharpprogramer88
پنج شنبه 14 بهمن 1389, 09:57 صبح
شما اول یه دیتا ست درست کنید و به دیتا گرید ویو یه SqlDataAdapter بدهید.
سپس در رویداد تکست چنج تکست باکس بنویسید:

this.BindingSource.Filter = "name like '%" + TextBox1.Text + "%'";

من دارم با stored procedure کار میکنم

این روش جواب میده ؟

Reza_Yarahmadi
پنج شنبه 14 بهمن 1389, 13:22 عصر
دوست عزیز مشکل در تعریف ورودی SP شماست. وقتی برای ورودی اندازه تعیین نمیکنید فقط یک کاراکتر رو در نظر میگیره یعنی شما چه 'مخ' بفرستید و چه 'مختا' SP پارامتر رو 'م' در نظر میگیره.
با تغییر ورودی بصورت زیر مشکل برطرف میشه.

ALTER procedure [dbo].[sp_ostad_lastname]
@lname nvarchar(250)
As
Begin
...