PDA

View Full Version : جستجو براساس چک لیست ویو با Linq



Yanehsar
سه شنبه 08 دی 1394, 22:10 عصر
سلام
چطوری میشه براساس انتخاب کاربر از چک لیست ویو جستجو انجام داد ؟
با استفاده از کد زیر اطلاعاتم رو به چک لیست ویو بایند کردم چک لیست ویو به صورت مولتی سلکت هم هستش


var Q=(from p in db.Locations select p).ToArray();

for (int i = 0; i < Q.Length; i++)
{
listViewLocation.Items.Add(Q[i].nameLocation );
}


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

Mahmoud.Afrad
سه شنبه 08 دی 1394, 23:27 عصر
یک آیتم لیست ویو بساز و مقدار ID و یا خود شئ Q[i] رو در tag ذخیره کن. در رویداد SelectedIndexChanged میتونی تگ رو بخونی و ...

for (int i = 0; i < Q.Length; i++)
{
ListViewItem newItem = new ListViewItem
{
Text = Q[i].nameLocation,
Tag = Q[i].Id // Tag = Q[i]
};
listViewLocation.Items.Add(newItem);
}

Yanehsar
چهارشنبه 09 دی 1394, 18:44 عصر
یک آیتم لیست ویو بساز و مقدار ID و یا خود شئ Q[i] رو در tag ذخیره کن. در رویداد SelectedIndexChanged میتونی تگ رو بخونی و ...

for (int i = 0; i < Q.Length; i++)
{
ListViewItem newItem = new ListViewItem
{
Text = Q[i].nameLocation,
Tag = Q[i].Id // Tag = Q[i]
};
listViewLocation.Items.Add(newItem);
}


مرسی از راهنمائی شما از متوجه یه موضوع نیستم ! کاربر 5 تا فیلد رو انتخاب کرده چطوری براساس این 5 تا فیلد دستور جستجو بدم ؟؟؟؟
بیام تگ ها رو بریزم داخل آرایه من از آرایه داخل دستور جستجو استفاده کنم ؟؟

Mahmoud.Afrad
پنج شنبه 10 دی 1394, 02:08 صبح
اگر رابطه بین دو جدول ایجاد کردید پس خود شئ رو در tag قرار بدید و در جایی که میخواهید جستجو کنید مقدار تگ رو به موجودیت مورد نظر cast کنید و از طریق پراپرتی های اون در جدول دیگر جستجو کنید.
مثال: جدول Person و جدول Phone رو در نظر بگیرید که هر شخص میتواند چند شماره تلفن داشته باشد.
با کد زیر نام رو نمایش میدیم

foreach (Person p in db.Persons)
{
ListViewItem newItem = new ListViewItem();
newItem.Text = p.FirstName + @" " + p.LastName;
newItem.Tag = p;
listView1.Items.Add(newItem);
}

به صورت زیر هم میتونیم تلفن اشخاصی که سلکت شده اند را در دیتاگرید نمایش بدیم

if (listView1.SelectedItems.Count != 0)
{
List<Person> selectedPersons = new List<Person>();
foreach (ListViewItem item in listView1.SelectedItems)
{
Person p = item.Tag as Person;
selectedPersons.Add(p);
}

if (selectedPersons.Any())
{
var query =
from p in selectedPersons
from tell in p.Phones
select tell;

dataGridView1.DataSource = query.ToList();
}
}

حالا اگر نیاز به شرط خاصی بود کافیه قبل از سلکت کردن tell روی کوئری اعمال کنید.

Yanehsar
جمعه 11 دی 1394, 21:13 عصر
اگر رابطه بین دو جدول ایجاد کردید پس خود شئ رو در tag قرار بدید و در جایی که میخواهید جستجو کنید مقدار تگ رو به موجودیت مورد نظر cast کنید و از طریق پراپرتی های اون در جدول دیگر جستجو کنید.
مثال: جدول Person و جدول Phone رو در نظر بگیرید که هر شخص میتواند چند شماره تلفن داشته باشد.
با کد زیر نام رو نمایش میدیم

foreach (Person p in db.Persons)
{
ListViewItem newItem = new ListViewItem();
newItem.Text = p.FirstName + @" " + p.LastName;
newItem.Tag = p;
listView1.Items.Add(newItem);
}

به صورت زیر هم میتونیم تلفن اشخاصی که سلکت شده اند را در دیتاگرید نمایش بدیم

if (listView1.SelectedItems.Count != 0)
{
List<Person> selectedPersons = new List<Person>();
foreach (ListViewItem item in listView1.SelectedItems)
{
Person p = item.Tag as Person;
selectedPersons.Add(p);
}

if (selectedPersons.Any())
{
var query =
from p in selectedPersons
from tell in p.Phones
select tell;

dataGridView1.DataSource = query.ToList();
}
}

حالا اگر نیاز به شرط خاصی بود کافیه قبل از سلکت کردن tell روی کوئری اعمال کنید.
مرسی از راهنمائی شما .
موافق نشدم اگر امکانش هستش برای نمونه بذارید!!
منظورتون از اینکه خود شی رو در tag قرار بدم چیه ؟؟یعنی در هنگام لود کرد لیستم این کار رو بکنم ؟؟؟؟(که شک دارم منظورتون این باشد )
من اومدم IDمتناظر با دیتابیس رو در tag قرار دادم(شبیه کاری که در کمبوباکس میکنیم) الان که میخوام جستجو کنم باید در جدول دوم که فیلد خارجی داره بگم IDLocation برابر با cast???


if (listViewLocation.SelectedItems.Count != 0)
{
List<personal> selectedPersons = new List<personal>();
foreach (ListViewItem item in listViewLocation.SelectedItems)
{
personal p = item.Tag as personal;
selectedPersons.Add(p);
}

if (selectedPersons.Any())
{
var query =
from p in selectedPersons
from tell in p.Location where
select tell;
var Q=(from p in db.personals where p.IDLocation select p).Cast(selectedPersons).ToList();
//var Q=(from p in db.personals where p.IDLocation==selectedPersons.Cast select p).ToList();
//dataGridView1.DataSource = query.ToList();
}
}

این کارهای بود که من انجام دادم هیج کدوم هم جواب ندادش!!! جستجو هم کردم هیچ مثلی پیدا نکردم در این زمینه.
ممنون میشم راهنمائی کنید

Mahmoud.Afrad
جمعه 11 دی 1394, 23:36 عصر
فکر کنم متوجه نشدی من چی گفتم. شما اسکریپت دو جدول رو بزار و بگو چه اتفاقی قراره بیفته.

Yanehsar
شنبه 12 دی 1394, 18:51 عصر
فکر کنم متوجه نشدی من چی گفتم. شما اسکریپت دو جدول رو بزار و بگو چه اتفاقی قراره بیفته.
بله حق با شماست متوجه نشدم
لینک دانلود برنامه و دیتابیس که بک آپ گرفتم ازش

http://cdn.persiangig.com/download/CfjW1W9D3v/J-Reza.zip/dl (http://cdn.persiangig.com/download/CfjW1W9D3v/J-Reza.zip/dl)

کاری میخوام انجام بشه اینه :
یک سری لیست باکس دارم که در فرم frmexportdata قرار داره ، از جدوال محله ، معرف و... پر میشه میخوام اطلاعات رو از جدول پرسنل که با این جدوال رابطه دارن واکشی کنم .چک لیست باکس قابلیت مولتی سلکت داره .
با کمک شما بارگذاری اولیه اطلاعات انجام شد .من مقادیر tag لیست باکس ها رو رو از id محله ، معرف پر کردم که داخل جدول پرسنل ذخیره میشه(فیلدخارجی)
دستور جستجو براساس لینک رو بلد نیستم .دستور sql به این شکل هستش البته تقریبا !!!


select * from personal where IDLocation in (1,2,8,9,10) and IDMoaref in(5,9) and IDAcademic_Degree in(*)

ممنون میشم راهنمائیم کنید .

Mahmoud.Afrad
شنبه 12 دی 1394, 23:02 عصر
اینو نگاه کن
http://s3.picofile.com/file/8231310342/J_Reza.rar.html