PDA

View Full Version : سوال: راهنمایی - مقدار datagridview وابسته به checkbox



ramin005
پنج شنبه 11 خرداد 1391, 08:18 صبح
با سلام
بنده در دیتابیسم برای ورود اطلاعات کارمندان سه حالت دارم
status:
0 : در حال کار
1 : قطع کار
2 : ماموریت
(Status فیلد وضعیت در دیتابیس است از نوع int )
در فرم هم 3تا چک باکس قرار دادم
حالا میخوام با تیک خوردن یا نخوردن چک باکس ها لیست کارمندای آن قسمت وارد دیتاگرید بشه یا از دیتاگرید حذف بشه!

اگر امکان داشته باشه راهنمایی بفرمایید
با تشکر

omid_csh
پنج شنبه 11 خرداد 1391, 10:25 صبح
سلام
میتونید هر کدوم از چک باکس هارو چک کنید و اگه تیک خورده بود در شرط where اونو بیارین.
string query = "SELECT * FROM Employee WHERE";

if (checkBox1.Checked == true)
query = query + " status = 0 AND";
if (checkBox2.Checked == true)
query = query + " status = 1 AND";
if (checkBox3.Checked == true)
query = query + " status = 2 ";

if (query.EndsWith("WHERE"))
query = query.Substring(0, query.LastIndexOf("WHERE"));

if (query.EndsWith("AND"))
query = query.Substring(0, query.LastIndexOf("AND"));

ramin005
جمعه 12 خرداد 1391, 12:59 عصر
ممنون
شما کمکای خوبی به بنده میکنید.

من از linq استفاده میکنم
query هم بر اساس linq نوشتم.
یک سوال
آیا باید از AND استفاده کنم (&&) یا OR (||)؟
در ضمن لطفا در مورد دو دستور IF آخر کمی توضیح بدهید.
الان هر بارکه تیک چک باکس را برمیدارم دیتاگرید خالی میشه و با تیک زدن دوباره دیتاگرید همچنان خالی میمونه
اگر امکان داشته باشه علت این مشکل را نیز بفرمایید.
بنده خیلی مشتاق هستم که سی شارپ را به صورت حرفه ای بیاموزم.

omid_csh
جمعه 12 خرداد 1391, 17:56 عصر
سلام
PersonLinqDataContext pers = new PersonLinqDataContext();
//شماره استاتوس ها
List<int?> IdsToFind = new List<int?>() {0, 1, 2};

//در صورت تیک نخوردن هر یکی از اون چک باکس ها از لیست حذف میشوند
if (checkBox1.Checked == false)
IdsToFind.Remove(0);
if (checkBox2.Checked == false)
IdsToFind.Remove(1);
if (checkBox3.Checked == false)
IdsToFind.Remove(2);

//نوشتن کوئری و نوشتن شرط ها
var query = pers.Persons.Where(u => IdsToFind.Contains(u.Status));

dataGridView1.DataSource = query;
موفق باشید.

mahdi.bagheri
جمعه 12 خرداد 1391, 18:29 عصر
دوست عزیز سلام
شما باید AutoPoskBack چک باکس رو true کنید تا یک پست بک انجام بگیره تا بتونید دستوراتتون رو اجرا کنید.

ramin005
شنبه 13 خرداد 1391, 09:57 صبح
دوست عزیز سلام
شما باید AutoPoskBack چک باکس رو true کنید تا یک پست بک انجام بگیره تا بتونید دستوراتتون رو اجرا کنید.

اگر امکان داشته باشه بیشتر توضیح بدید چون همچین خاصیتی در چک باکس ها بنده مشاهده نکردم

در صورت امکان در مورد سوال بنده درباره farsilibrary نیز راهنمایی نمایید.

لینک تاپیک (http://barnamenevis.org/showthread.php?343849-%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C%DB%8C-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%AA%D9%88%D8%A7%D8%A8%D8%B9-farsi-library-%D8%AF%D8%B1-VS2010&highlight=farsilibrary)


با تشکر

omid_csh
شنبه 13 خرداد 1391, 10:16 صبح
الان هر بارکه تیک چک باکس را برمیدارم دیتاگرید خالی میشه و با تیک زدن دوباره دیتاگرید همچنان خالی میمونه
اگر امکان داشته باشه علت این مشکل را نیز بفرمایید.
سلام
برای اینکه با تغییر تیک خوردن چک باکس ها خروجی ( محتویات دیتا گرید) هم تغییر کنه میتونی از رویداد CheckedChange استفاده کنی.

private void Form2_Load(object sender, EventArgs e)
{
checkBox1.CheckedChanged += new EventHandler(checkBox_CheckedChanged);
checkBox2.CheckedChanged += new EventHandler(checkBox_CheckedChanged);
checkBox3.CheckedChanged += new EventHandler(checkBox_CheckedChanged);
}

private void checkBox_CheckedChanged(object sender, EventArgs e)
{
PersonLinqDataContext pers = new PersonLinqDataContext();

//شماره استاتوس ها
List<int?> IdsToFind = new List<int?>() { 0, 1, 2 };

//در صورت تیک نخوردن هر یکی از اون چک باکس ها از لیست حذف میشوند
if (checkBox1.Checked == false)
IdsToFind.Remove(0);

if (checkBox2.Checked == false)
IdsToFind.Remove(1);

if (checkBox3.Checked == false)
IdsToFind.Remove(2);

//نوشتن کوئری و نوشتن شرط ها
var query = pers.Persons.Where(u => IdsToFind.Contains(u.Status));

dataGridView1.DataSource = query;
}

mahdi.bagheri
شنبه 13 خرداد 1391, 10:28 صبح
اگر امکان داشته باشه بیشتر توضیح بدید چون همچین خاصیتی در چک باکس ها بنده مشاهده نکردم

در صورت امکان در مورد سوال بنده درباره farsilibrary نیز راهنمایی نمایید.

لینک تاپیک (http://barnamenevis.org/showthread.php?343849-%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C%DB%8C-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%AA%D9%88%D8%A7%D8%A8%D8%B9-farsi-library-%D8%AF%D8%B1-VS2010&highlight=farsilibrary)


با تشکر

سلام
با عرض پوزش، من بحث وب رو مطرح کرده بودم.
آقای omid_csh کد درست رو به شما گفتن.