PDA

View Full Version : مشکل جستجو (فیلتر) دیتاتیبل با حرف (ی)فارسی



mahtab.kamali
سه شنبه 06 مرداد 1394, 17:05 عصر
باسلام

دیتاتیبلی داریم که از یک جدول در sql پر می شه و بخاطر یک سری ملاحضات قصد داریم این اطلاعات را درون datatable فیلتر کنیم

و از این دستور استفاده می کنم :


DataTable.Select("names like '%" TextBox2.Text "%'")
همه چیز خوب پیش می ره تا زمانی که می رسیم به حرف ( ی ) فارسی ،

وموقعیکه این حرف در تکست باکس مربوط به جستجو نوشته می شه دیگه هیچ ردیفی نمایش داده نمی شه

در کوئری با قراردادن حرف انگلیسی (N) در ابتدای فیلد مورد جستجو مشکل حل می شد:


SELECT FROM Students WHERE LastName LIKE N"%'+Nmae+'%"
اما در جستجو در داخل دیتاتیبل جواب نمی ده
آیا راه حلی به ذهنتون می رسه ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

davidrobert
سه شنبه 06 مرداد 1394, 18:16 عصر
من از این دستور جستجو استفاده میکنم تو فرم تو حروف فارسی قشنگ جواب میگیرم.
switch (comboBox1.Text)
{
case "نام":
{
query = "select * from Table1 where name like N'%" + textBox1.Text + "%'";
break;
}
case "نام خانوادگی":
{
query = "select * from Table1 where last like N'%" + textBox1.Text + "%'";
break;
}
case "سال":
{
query = "select * from Table1 where convert(varchar,year) like N'%" + textBox1.Text + "%'";
break;
}
default: { break; }
ولی تا حالا داخل dataset امکتحان نکردم و چون موقع جستجو با این حروف "ی" با مشکل بر خورد میکنید چون در لغت عربی موجود نیست عمل جستجو رو انجام نمیده.

mahtab.kamali
سه شنبه 06 مرداد 1394, 20:42 عصر
اساتید پیشنهادی ندارند ؟؟؟؟؟؟

alireza264
سه شنبه 06 مرداد 1394, 20:57 عصر
سلام
دلیل این مشکل اینه که حرف ی بصورت عربی ي (Shift + x) در دیتابیس ثبت میشه . راه حلش هم اینه که موقع جستجو چک کنی وقتی حرف ی زده شد بجاش ي رو به متن مورد نظرت اضافه کنه مثلا بجای کلمه علی کلمه علي تولید بشه

ali_md110
سه شنبه 06 مرداد 1394, 21:51 عصر
حروف ی و ک هردوشون مشکل دارند زمانیکه ی و ک بصورت عربی هستند
بهنره ابتدا تبدیل به معادل فارسی شده و توی دیتابیس ذخیره کنید


public ToFarsiChar(string str)
{
return str.Replace("ی", "ی").Replace("ک", "ک");
}


ی اولی میشه عربی و ی دومی میشه فارسی
اگر توی کنترل پنل زبان ویندوز یا یونی کد رو به عربی تغییر بدید میتونید ی عربی رو جایگذین گنید تا صحیح تر بشه ی عربی دوتا نقطه زیرش هست

mahtab.kamali
سه شنبه 06 مرداد 1394, 22:16 عصر
حروف ی و ک هردوشون مشکل دارند زمانیکه ی و ک بصورت عربی هستند
بهنره ابتدا تبدیل به معادل فارسی شده و توی دیتابیس ذخیره کنید


public ToFarsiChar(string str)
{
return str.Replace("ی", "ی").Replace("ک", "ک");


}


ی اولی میشه عربی و ی دومی میشه فارسی
اگر توی کنترل پنل زبان ویندوز یا یونی کد رو به عربی تغییر بدید میتونید ی عربی رو جایگذین گنید تا صحیح تر بشه ی عربی دوتا نقطه زیرش هست


ممنون از پاسختون
من از این ترفند استفاده کرده بودم :

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar.ToString() == "ی")
{
e.KeyChar = Convert.ToChar("ي");
}
}
فقط یه مشکلی هست اونهم اینه که جستجوی ما چند وجهی است یعنی با استفاده از یک سویچ می خواهیم کاری کنیم که از یک کادر متن بشه از چند تا جدول جستجو کرد
و بنابراین مشکل یاد شده تنها در یک جدول پیش میاد و بقیه جداول که مشکلی با حرف ی ندارند این بار دچار مشکل می شن

من خواستم در سمت سرور این کوئری رو اجرا کنم تا همه ( ي )های عربی رو به ی فارسی تبدیل کنم کوئری اجرا می شه اما چیزی تغییر نمی کنه :


update [dbwanta].[dbo].[Courses] set [Name] = Replace([Name],'ي','ی')

به نظرتون چطور می شه تمام اون ی ها رو به فارسی برگردوند؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟؟؟؟؟؟

mahtab.kamali
سه شنبه 06 مرداد 1394, 22:27 عصر
ویا اینکه می شه کاری کرد تا این کد بجای اینکه دررویداد KeyPress کادر متن باشه ، تبدیلش کنیم به یه متد که هر موقع لازم داشتیم ازش استفاده کنیم :متفکر:


private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar.ToString() == "ی")
{
e.KeyChar = Convert.ToChar("ي");
}
}

mahtab.kamali
سه شنبه 06 مرداد 1394, 22:42 عصر
حروف ی و ک هردوشون مشکل دارند زمانیکه ی و ک بصورت عربی هستند
بهنره ابتدا تبدیل به معادل فارسی شده و توی دیتابیس ذخیره کنید


public ToFarsiChar(string str)
{
return str.Replace("ی", "ی").Replace("ک", "ک");

}


ی اولی میشه عربی و ی دومی میشه فارسی
اگر توی کنترل پنل زبان ویندوز یا یونی کد رو به عربی تغییر بدید میتونید ی عربی رو جایگذین گنید تا صحیح تر بشه ی عربی دوتا نقطه زیرش هست


ممنون علی آقا جواب داد
به این شکل نوشتم :

recipe.DefaultView.RowFilter = string.Format(@"[_RowString] like '%" + ToFarsiChar(textBox1.Text )+ "%' ");

هورااا ممنونم از همتون درس شدددددددددددددددددددددددد ددددددددددددددددددددددددد دددددددددد