PDA

View Full Version : مبتدی: listview filter



Ehsan_hetfield
پنج شنبه 11 فروردین 1390, 14:46 عصر
سلام به همه دوستان عزیز
من یه مشکلی دارم خیلی کلافه شدم در ضمن خیلی هم جستجو کردم ولی چیزی که میخواستم پیدا نکردم
میخوام لیست ویو خودم رو که ار دیتابیس پر میشه بر اساس event texchanged فیلتر کنم نمیدونم باید پیکار کنم ار like استفاده کنم یا یه متدی به اسم find که لیست ویو داره لطفا سورس بهم بدید ممنون

Ehsan_hetfield
پنج شنبه 11 فروردین 1390, 15:50 عصر
کسی تو این انجمن نیست جواب بده

Directx
پنج شنبه 11 فروردین 1390, 17:09 عصر
دیدم کسی جواب نداده گفتم بده بی جواب بمونی
دوست عزیز اول بهتر بود می گفتین که چه جوری لیست ویو رو بایند کردین در هر صورت می تونین این کارو بکنین

اولا که یه متد بنویسین برای پر کردن لیست ویو مثلا تو متد می تونین بنوسین که:
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
listView1.Items.Add(ds.Tables[0].Rows[i][1].ToString());
}
این ds دیتا ستیه که پر شده

خوب حالا می تونید برای رویداد textchang یه sqlcomman بنویسید که فقط اون متن نوشته شده رو از بانک انتخاب کنه مثلا
SqlCommand com = new SqlCommand("SELECT * FROM TABLE1 where FName like"+"'"+textBox1.Text + "%'", con);
خوب حالا که انتخاب شد می تونی لیست رو پر کنی

Ehsan_hetfield
پنج شنبه 11 فروردین 1390, 22:42 عصر
سلام من با کد زیر لیست ویو رو بایند کردم ولی کدی که گفتین کار نکرد
private void GetRecords()
{
listViewEx1.Items.Clear();
SqlCommand cmd = new SqlCommand();
cmd.Connection = new MyConnection().Cnn;
cmd.CommandText = "select * from faktor";
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
ListViewItem lvitem = listViewEx1.Items.Add(dr["id"].ToString());
lvitem.SubItems.Add(dr["mahsoolname"].ToString());
lvitem.SubItems.Add(dr["faktorprice"].ToString());
lvitem.SubItems.Add(dr["faktordate"].ToString());
lvitem.SubItems.Add(dr["forooshandename"].ToString());
lvitem.SubItems.Add(dr["faktornumber"].ToString());
lvitem.SubItems.Add(dr["masrafprice"].ToString());
}

Directx
پنج شنبه 11 فروردین 1390, 23:58 عصر
میشه بگید دقیقا کدوم قسمت ایراد می گیره در ضمن کدتون رو تو تگ #c بنویسید الان اصلا خوانا نیست .این کدو من قبلا ازش استفاده می کردم و خوب هم جواب می داد

Ehsan_hetfield
جمعه 12 فروردین 1390, 00:04 صبح
private void GetRecords()
{
listViewEx1.Items.Clear();
SqlCommand cmd = new SqlCommand();
cmd.Connection = new MyConnection().Cnn;
cmd.CommandText = "select * from faktor";
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
ListViewItem lvitem = listViewEx1.Items.Add(dr["id"].ToString());
lvitem.SubItems.Add(dr["mahsoolname"].ToString());
lvitem.SubItems.Add(dr["faktorprice"].ToString());
lvitem.SubItems.Add(dr["faktordate"].ToString());
lvitem.SubItems.Add(dr["forooshandename"].ToString());
lvitem.SubItems.Add(dr["faktornumber"].ToString());
lvitem.SubItems.Add(dr["masrafprice"].ToString());
}

}

راستش هیچ ایرادی نمیگیره ولی کد هم کار نمیکنه در واقع هیچ اتفاقی نمی افته

Ehsan_hetfield
جمعه 12 فروردین 1390, 00:17 صبح
دوستان کسی نیست من خیلی وقته گیر کردم تو این قضیه

Directx
جمعه 12 فروردین 1390, 00:30 صبح
دوست عزیز اینو الان نوشتم فقط بانکش برای SQL EXPRESS 2008 و با VS 2010 نوشته شده بانکشو attach کنید و استفاده کنید.

Directx
جمعه 12 فروردین 1390, 00:46 صبح
ببخشید تو مثال قبلی از data grid استفاده کرده بودم:لبخند:
بفرمایید اینم برای لیست ویو منتها بانکش همون بانک قلبیه

Ehsan_hetfield
جمعه 12 فروردین 1390, 01:00 صبح
دوست عزیز ممنون تا یه حد زیادی مشکلم حل شد فقط وقتی از تکس باکس متنی که نوشتم پاک میکنم لیست ویو درست کار نمیکنه و فقط ردیف اول رو نشون میده

Directx
جمعه 12 فروردین 1390, 01:02 صبح
خوب یه شرط بزاری که وقتی تکس باکس خالی باشه بیاد و همه ی رکورد ها رو انتخاب کنه

Ehsan_hetfield
جمعه 12 فروردین 1390, 01:04 صبح
راستش مشکل اینجاست که وقتی شماره رو میزنم توتکس باکس فقط ردیف اول رو میاره اینو چیکار کنم هرچی میزنم فقط ردیف اول میاد

Directx
جمعه 12 فروردین 1390, 01:06 صبح
ردیف اول چی ؟میشه دقیق تر بگید

Ehsan_hetfield
جمعه 12 فروردین 1390, 01:10 صبح
خوب لیست ویو من چندتا ستون داره وقتی من کد فاکتور رو وارد میکنم این کد تو یکی از ستون هاست ولی تمام ستون ها فیلتر نمیشه فقط یکی ار ستون ها رو زیر هم نشون میده فکر کنم تو حلقه for مشکل دارم

Directx
جمعه 12 فروردین 1390, 01:28 صبح
اگه کد بدین شاید بشه کاری کرد من هنوز هم متوجه مشکل شما نشدم

Ehsan_hetfield
جمعه 12 فروردین 1390, 01:30 صبح
SqlCommand cmd = new SqlCommand();
cmd.Connection = new MyConnection().Cnn;
cmd.CommandText = ("SELECT * from faktor where faktornumber like'" + textBox1.Text + "%'");
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet DS = new DataSet();
adapter.Fill(DS);
listViewEx1.Items.Clear();
for (int i = 0; i < DS.Tables[0].Rows.Count; i++)
{
listViewEx1.Items.Add(DS.Tables[0].Rows[i][0].ToString());
listViewEx1.Items.Add(DS.Tables[0].Rows[i][1].ToString());
listViewEx1.Items.Add(DS.Tables[0].Rows[i][2].ToString());
listViewEx1.Items.Add(DS.Tables[0].Rows[i][3].ToString());
listViewEx1.Items.Add(DS.Tables[0].Rows[i][4].ToString());
listViewEx1.Items.Add(DS.Tables[0].Rows[i][5].ToString());
listViewEx1.Items.Add(DS.Tables[0].Rows[i][6].ToString());
}

Ehsan_hetfield
جمعه 12 فروردین 1390, 01:32 صبح
فکر کنم حلقه for جوری که من نوشتم مشکل داره چون سرچ انجام میشه ولی همه نتیجه میره تو ستون اول لیست ویو

Directx
جمعه 12 فروردین 1390, 01:40 صبح
خوب از اول این کد رو می ذاشتین مشکل شما تو همون حلقه ی for ه اولا که اگر می خواستین تمام فیلد ها یا بخش زیادی رو نشون بدین بهتر بود که از data griad استفاده می کردین خوب در هرصورت می تونین از دو تا حلقه استفاده کنید مثل کد پایین البته اصلا من این روش رو پیشنهاد نمی کنم چون اگه تعداد داده زیاد باشه خیلی برنامه performanc پایینی داره به دلیل استفاده از دوتا حلقه ی تودرتو

for (int i = 0; i < DS.Tables[0].Rows.Count; i++)
{
for (int j = 0; j < 7; j++)
{
listViewEx1.Items.Add(DS.Tables[0].Rows[i][j].ToString());
}
}

این کد هم مثلا فقط برای نشون دادن فیلد دوم یا همون ایندکس 1

for (int i = 0; i < DS.Tables[0].Rows.Count; i++)
{
listViewEx1.Items.Add(DS.Tables[0].Rows[i][1].ToString());

Ehsan_hetfield
جمعه 12 فروردین 1390, 01:44 صبح
بازم کار نکرد دقیقا همون جوری شد:عصبانی++:
راستی حالا که داری زحمت کار مارو میکشی اگه بخوام navigator برای لیست ویو درست کنم چیکار میشه کرد میخوام صفحه بندی کنم

Directx
جمعه 12 فروردین 1390, 01:49 صبح
اقا اصلا به جای لیست یه dara draid بذار ببین جواب می ده اگه جواب داد مشکل از لیستته اگر بازم درست نشد پروژتو بده ببینیم چه مرگشه

Ehsan_hetfield
جمعه 12 فروردین 1390, 02:02 صبح
دوست عزیز حجم پروژه زیاده نمیشه بفرستم با گرید هم نمیخوام کار کنم چون کل پروژه با لیست هست بازم ممنون از راهنماییت

Directx
جمعه 12 فروردین 1390, 02:15 صبح
راستی حالا که داری زحمت کار مارو میکشی اگه بخوام navigator برای لیست ویو درست کنم چیکار میشه کرد میخوام صفحه بندی کنم

خوب از currency manager مربوط به فرم استفاده کن البته برای لیست من خودم هم استفاده نکردم تا حالا (به صورت دستی .بهترین و ساده ترین راه):لبخند:

Ehsan_hetfield
جمعه 12 فروردین 1390, 02:17 صبح
من با این چیزی که گفتی آشنا نیستم اگه میشه بیشتر توضیح بده برام کجا باید فعال کنم این مورد رو

Directx
جمعه 12 فروردین 1390, 02:24 صبح
راستش هر منبع داده ای که تو فرم تعریف بشه مثل dataset یا ... فرم براش یک شی currency manager نسبت می ده و این شیئ مکان رکورد جاری رو نگه میداره (یکی از کاراش) تو خاصیت position ش ما با استفاده از این شی می تونیم مطمئن باشیم که در حال حاضر همه ی کنترل های ما دارن یه رکورد رو نشون می دن حالا ما مثلا می تونیم با اضافه کردن عدد 1 به position اون به داده ی بعدی بریم و....(مختصر و مفید)

اگه خواستین می تونم براتون یه مثال ساده بنویسم

Ehsan_hetfield
جمعه 12 فروردین 1390, 02:27 صبح
اگه مثالشو بنویسی ممنون میشم

Directx
جمعه 12 فروردین 1390, 03:00 صبح
بفرمایید فقط بانکش همون بانک مثال قبله

Ehsan_hetfield
شنبه 13 فروردین 1390, 22:27 عصر
سلام یه مشکل جدید برام پیش اومده فیلدهای فارسی رو پیدا نمیکنه موقع سرچ هیچ خطایی هم ندارم از کد زیر دارم استفاده میکنم
cmd.CommandText = ("SELECT * from faktor where mahsoolname like'" + textBox1.Text + "%'");
راستی فیلدهای من Nvarchar هستن

Ehsan_hetfield
شنبه 13 فروردین 1390, 23:44 عصر
چرا کسی جواب نمیده

Ehsan_hetfield
یک شنبه 14 فروردین 1390, 13:37 عصر
آقا خواهشنا یکی جواب بده من خیلی گیر کردم سر این موضوع

Directx
یک شنبه 14 فروردین 1390, 13:59 عصر
میشه بیشتر توضیح بدین
منظورتون اینه که اسم فیلد ها فارسیه یا داده شون اگه اسم فیلدها فارسیه که باید (بهتره) که اونها رو انگلیسی کنید اگر داده شون فارسیه و پیدا نمی کنید احتمالا collation مربوط به بانکت فارسی نیست بهتره collation ه بانکت رو persian_100_ci_as انتخاب کنید

Ehsan_hetfield
یک شنبه 14 فروردین 1390, 17:13 عصر
سلام بله داده فارسی هست و پیدا نمیکنه راستی تو دستور sql اگه N بزارم درست میشه ؟؟؟؟ البته فیلدهای من nvarchar هست راستی N رو کجای دستور بزارم تو همین دستوری که تو تاپیک هست برام بزاری ممنون میشم
cmd.CommandText = ("SELECT * from faktor where mahsoolname like'" + textBox1.Text + "%'");

Ehsan_hetfield
یک شنبه 14 فروردین 1390, 19:22 عصر
میشه بیشتر توضیح بدین
منظورتون اینه که اسم فیلد ها فارسیه یا داده شون اگه اسم فیلدها فارسیه که باید (بهتره) که اونها رو انگلیسی کنید اگر داده شون فارسیه و پیدا نمی کنید احتمالا collation مربوط به بانکت فارسی نیست بهتره collation ه بانکت رو persian_100_ci_as انتخاب کنید

دیتابیس من فایلی هست نمیدونم چطوری باید collation رو تغییر بدم

Directx
دوشنبه 15 فروردین 1390, 00:20 صبح
دیتابیس من فایلی هست نمیدونم چطوری باید collation رو تغییر بدم

متوجه نمی شم
یعنی از نوع compact ه ؟در این صورت که نباید (اگه با VS ایجادش کردین) مشکلی داشته باشه یه راهش اینه که اگه sql server managment studio دارین می تونید با کلیک راست روی بانک از قسمت options نوع collation رو ببینید و تغییرش بدید