PDA

View Full Version : جستجو در گريد از فرم ديگر



debugger
جمعه 23 مرداد 1388, 08:59 صبح
سلام دوستان
من يه DataGridView دارم روي فرم 1 حالا يه دكه جستجو گذاشتم روي فرمم

وقتي روي جستجو كليك مي كنم يه فرم ديگه به نام فرم 2 باز ميشه حالا تون اين فرم مثلا يه ايتمي را توي textbox جستجو مي كنم . حالا كه روي دكمه جستجو در فرم 2 كليك مي كنم ميخوام فرم 2 بسته بشه و نتيجه اون در DataGridView فرم 1 ظاهر بشه ولي هيچ اتفاقي نمي افتد

در حالي كه همين كد ها را وقتي روي فرم 1 مي نويسم جواب مي دهد

اين كد هايي هست كه در فرم 2 نوشتم




Form1 f1 = new Form1();
if (comboBox1.Text == "¬êں©ى ©§ïه")
{
string radif="SELECT * FROM pakat where radif LIKE('" + txtFind.Text.Trim() + "')";
f1.loadDataGrid(radif);
f1.Refresh();
Close();
}


loadDataGrid يك تابع براي لود كردن گريد هست كه در فرم 1 نوشتم و از نوع public هست

دوستان لطفا كمك كنيد

asefy2008
جمعه 23 مرداد 1388, 10:00 صبح
دوست من بهتر نیست محتویات اون تکست باکسی رو که می خوایید در بانک جست و جو کنید به فرم اولتون بفرستید و بعد جست و جو رو انجام بدید.
این (http://barnamenevis.org/forum/showthread.php?t=91138&highlight=ObjectRelations) رو یه نگاه بنداز البته به سوال شما ربطی نداره ولی مطالعش کنید.

debugger
جمعه 23 مرداد 1388, 10:17 صبح
دوست من بهتر نیست محتویات اون تکست باکسی رو که می خوایید در بانک جست و جو کنید به فرم اولتون بفرستید و بعد جست و جو رو انجام بدید.
این (http://barnamenevis.org/forum/showthread.php?t=91138&highlight=ObjectRelations) رو یه نگاه بنداز البته به سوال شما ربطی نداره ولی مطالعش کنید.

اين يعني اينكه از همون فرم 1 جستجو كنم . خب اينطوري كه ديگه به فرم 2 نيازي نيست از همون فرم 1 جستجو را انجام ميدم تموم ميشه

ولي من الان توي فرم يك هيچ جايي ندارم براي جستجو ( نمي خواتم فرم زياد شلوغ بشه )

اين لينكي كه معرفي كردين قبلا ديدم

من بين ارسال مقادير و پاس دادن انها بين فرم ها هيچ مشكلي ندارم

من كد هاي update و insert را از فرم ديگر براحتي مي تونم انجام بدم

الان مشكل اينه نتيجه جستجو در گريد نشون داده نميشه . در حالي كه همه چي درسته

من يه query را از فرم 2 به تابع loadDataGrid در فرم 1 پاس ميدم ولي نتيجه نمايان نميشه

Debug هم كردم (خط به خط) همه چي درست بود ولي نمي دونم چرا نشون نميده

sd.CSharpProgrammer
جمعه 23 مرداد 1388, 11:39 صبح
خوب تو اين مساله اي كه شما ميگين وجود فرم2 اضافيه! ميتوني همون تكست باكس رو تو فرم1 بگذاري تا كاربر از همونجا جستجو رو انجام بده.
ولي اگه خيلي به اين موضوع اصرار داري ميتوني از اين روش استفاده كني :
اول يه پراپرتي تو فرم2 تعريف كن كه مقدار تكست باكست رو برگردونه :



public string TextBoxValue
{
get { return textBox1.text; }
}


و براي دكمه جستجو تو فرم2 اين كد رو بنويس :



this.DialogResult = DialogResult.OK;


حالا تو فرم1 براي دكمه جستجو كه فرم2 رو باز ميكنه اين كد رو بنويس :



string searchValue = null;
Form2 form2 = new Form2();

if (form2.ShowDialog == DialogResult.OK)
searchValue = form2.TextBoxValue;


حالا تو متغير searchValue مقدار تكست باكس فرم2 رو داري و ميتوني براساس اون عمل جستجو رو انجام بدي. البته من اينجا متغير searchValue رو تو رويداد دكمه جستجو نوشتم ولي تو بايد بالاي همه كدها به عنوان يك متغير عمومي تعريفش كني.
نكته قابل توجه : اين روش وقتي كاربرد داره كه بخواي فرم2 رو ShowDialog بكني يعني به شكل يك DialogBox به كاربر نشون بدي.

موفق باشي

Atena_k
جمعه 23 مرداد 1388, 12:31 عصر
سلام دوستان
من يه DataGridView دارم روي فرم 1 حالا يه دكه جستجو گذاشتم روي فرمم

وقتي روي جستجو كليك مي كنم يه فرم ديگه به نام فرم 2 باز ميشه حالا تون اين فرم مثلا يه ايتمي را توي textbox جستجو مي كنم . حالا كه روي دكمه جستجو در فرم 2 كليك مي كنم ميخوام فرم 2 بسته بشه و نتيجه اون در DataGridView فرم 1 ظاهر بشه ولي هيچ اتفاقي نمي افتد

در حالي كه همين كد ها را وقتي روي فرم 1 مي نويسم جواب مي دهد

اين كد هايي هست كه در فرم 2 نوشتم




Form1 f1 = newForm1();
if (comboBox1.Text == "¬êں©ى ©§ïه")
{
string radif="SELECT * FROM pakat where radif LIKE('" + txtFind.Text.Trim() + "')";
f1.loadDataGrid(radif);
f1.Refresh();
Close();
}


loadDataGrid يك تابع براي لود كردن گريد هست كه در فرم 1 نوشتم و از نوع public هست

دوستان لطفا كمك كنيد


سلام
روش کد نویسیتون کاملا غلطه!
اول اینکه نحوه query نوشتن شما مستعد sqlinjection می باشد. البته من نمی دونم که محتویات متد loadDataGrid چی هست ولی اگر این query را مستقیما execute می کنید باید بگم که فاتحه برنامتون خوانده شده است!!!
دوم اینکه شما دارید یک نمونه جدید از فرم1 ایجاد می کنید. پس این نمونه هیچ ارتباطی با نمونه قبل شما ندارد!به همین دلیل است که فکر می کنید هیچ اتفاقی نمی افتد.
من فکر می کنم شما در این زمینه مطالعات بیشتر و عمقی تری انحام دهید.
برای جستجو روش های مختلفی وجود دارد.شما باید روشی را انتحاب کنید که user freindly تر باشد.ShowDialog کردن فرم جستجو کار مناسبی در برخی از شرایط نیست.البته این بستگی به سناریوی مسئله دارد.
اما فرض کنید کاربر برنامه بخواهد برای هر جستجو مجبور به باز کردن فرم 2 باشد. این کار برای مواقعی که تعداد جستجو ها زیاد است خوب نیست.
من این جمله را از آقای کیانی همیشه به یاد خواهم داشت که "در مورد هر مسئله ای سعی کنید نمونه مشابه آن را در کلاس های دات نت پیدا کنید" در این صورت خواهید توانست راه حل مناسبی هم برای آن ارائه کنید.

یکی از مواقعی که event ها (event های سفارشی) قدرت نمائی می کنند همین مورد شما می باشد. در موردش فکر کنید!

asefy2008
جمعه 23 مرداد 1388, 14:20 عصر
این روش شما مناسب نیست شما به این پست (http://barnamenevis.org/forum/showpost.php?p=343419&postcount=14) و این (http://barnamenevis.org/forum/showpost.php?p=343465&postcount=15) یکی نگاه کنید همین روشی که شما به کاربردید رو انجام داد.
شما کار مورد نظرتون رو یا کاملا در فرم اولت انجام بده یا اگر می خواهی در فرم دوم این کار رو انجام بدی (که البته من هم با نظر دوستمون در پست قبلی موافقم که این برای کاربرتون مشکل ساز میشه) یه کلاس بنویس و از اون طریق کارت رو انجام بده،تازه اون موقع هم فکر کنم با مشکل روبرو بشی.
موفق باشی

debugger
شنبه 24 مرداد 1388, 09:49 صبح
با تشكر از تمامي دوستان

مشكلم حل شد

دوست عزيز Atena_k ميشه يه نمونه كد براي جلوگيري از sqlinjection بزارين

ممنونم

ab1000
جمعه 19 مهر 1392, 20:56 عصر
فایده ش چیه ؟ شما مشکلت حل شد ولی فکر بقیه رو نکردی لااقل واسه بقیه هم بگو!!