PDA

View Full Version : سوال: قرار دادن مقدار یک سلول از دیتا گرید درون متغیری از نوع string



nedaaaa
شنبه 31 مرداد 1388, 23:06 عصر
با سلام
دوستان من دو تا صفحه دارم تو صفحه 1 دیتا گرید دارم که modifiers اون رو public کردم تا بتونم تو فرم های دیگه هم به اون دسترسی داشته باشم. حالا می خوام مقادیر مورد نیازم رو از تک تک سلول های دیتا گرید بخونم و درون کنترل های موجود در فرم 2 که شامل تکست باکس و کمبو و رادیو باتن و... نمایش بدم
حالا تو فرم 2 یک متغیر از نوع فرم 1 تعریف کردم و نوشتم:
student st = new student();
string s=st.dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
textBox1.Text = s;
اما از خط دوم خطا میگیره خطاش هم اینه:
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
چی کار باید بکنم:لبخندساده::قلب:

tthenry14plus
یک شنبه 01 شهریور 1388, 00:13 صبح
روش اصولی اینکار اینه که
شما وقتی که میخوایید فرم 2 رو فراخوانی کنید، باید فرم 1 رو به نحوی به فرم 2 ارسال کنید تا بتونید از فرم 2 به فرم 1 دسترسی داشته باشید.


روش استفاده از الگوی سینگلتون 1 (http://barnamenevis.org/forum/showthread.php?t=174310&highlight=%D8%A7%D9%84%DA%AF%D9%88%DB%8C+%D8%B3%DB %8C%D9%86%DA%AF%D9%84%D8%AA%D9%88%D9%86)
روش استفاده از الگوی سینگلتون 2 (http://barnamenevis.org/forum/showthread.php?t=164011&highlight=%D8%A7%D9%84%DA%AF%D9%88%DB%8C+%D8%B3%DB %8C%D9%86%DA%AF%D9%84%D8%AA%D9%88%D9%86)خوب حالا کد رو اصلاح میکنیم:

هنگام فراخوانی فرم2 از فرم1:

در اینجا ما فرم1 (this) را با استفاده از تگ فرم2 به همان فرم (فرم2) ارسال میکنیم.


Form2 frm2 = new Form2();
frm2.Tag = this;
frm2.Tag = this;
frm2.Show();
برای دسترسی به دیتاگرید فرم1 از فرم2:

فرم1 با استفاده از تگ فرم جاری یعنی فرم2 (this.Tag) قابل دسترسی است.


Form1 frm1 = this.Tag as Form1;
string s = frm1.dataGridView1[0, 0].Value.ToString();
textBox1.Text = s;
موفق و پیروز باشید.

saeeedft
یک شنبه 01 شهریور 1388, 00:20 صبح
شما این کار رو انجام بده،توی فرم اولیتون تمامی فیلدهای دیتا گرید رو استاتیک تعریف کنید بعد توی لودفرم دومتون اون متغیر های استایک تون رو به کنترلی که میخواهید نسبت بدین
مثال:

;public static string s

s=datagridview1.currentrows.cell[0].value



بعد در فرم دوم s رو توی textbox بریزید

s=textbox1.text;

nedaaaa
یک شنبه 08 شهریور 1388, 23:31 عصر
روش اصولی اینکار اینه که
شما وقتی که میخوایید فرم 2 رو فراخوانی کنید، باید فرم 1 رو به نحوی به فرم 2 ارسال کنید تا بتونید از فرم 2 به فرم 1 دسترسی داشته باشید.

خوب حالا کد رو اصلاح میکنیم:

هنگام فراخوانی فرم2 از فرم1:

در اینجا ما فرم1 (this) را با استفاده از تگ فرم2 به همان فرم (فرم2) ارسال میکنیم.


Form2 frm2 = new Form2();
frm2.Tag = this;
frm2.Tag = this;
frm2.Show();
برای دسترسی به دیتاگرید فرم1 از فرم2:

فرم1 با استفاده از تگ فرم جاری یعنی فرم2 (this.Tag) قابل دسترسی است.


Form1 frm1 = this.Tag as Form1;
string s = frm1.dataGridView1[0, 0].Value.ToString();
textBox1.Text = s;
موفق و پیروز باشید.
خب از لطفتون ممنونم. من می خواستم مقادیری که توی این متغیر رشته ای میشینه و در اصل داده های بانک هستن هر کدوم توی کنترل مربوط به خودش بشینه که شد به لطف راهنمایی شما. مثلا کد ملی سر جای خودش و ....
حالا هدفم از این کار اینه که رکوردی رو از دیتا گرید انتخاب کنم و دکمه ویرایش رو بزنم تا اطلاعات به صفحه مد نظر بره که خب میره اما حالا که مثلا مقدار فیلد نام رو عوض می کنم بعد ثبت می زنم خطا میده
البته رکورد اولی رو درست ثبت می کنه اما رمورد بعدی رو که می خوام ویرایش کنم خطا می ده خطاش هم اینه


Violation of PRIMARY KEY constraint 'PK_student'. Cannot insert duplicate key in object 'student'.
The statement has been terminated
اصلا خیلی عجیب غریبه در ظاهر همه چیز درست به نظر می رسه
ببخشید داره طولانی میشه اما می خوام کامل توضیح بدم.
گفتم اگه این صفحه برای ویرایش باز شد (چون تو همون صفحه ای که برای ثبت رکورد جدید هست اطلاعات رو میارم برای ویرایش) اول رکوردی رو که اطلاعاتش اومده تو این صفحه از بانک حذف کن با استفاده از کد ملی که کلیده بعد دوباره همون اطلاعات ویرایش شده روثبت کن چون در غیر این صورت خب خطای تکراری بودن مقدار فیلد کلید رو میده
:اشتباه:
خلاصه اگه می تونین کمکم کنین:خجالت::لبخندساده:

elahe1364
پنج شنبه 13 خرداد 1389, 10:14 صبح
اگه درست متوجه شده باشم
شما به جای حذف یک رکورد و درج مجدد باید با استفاده از کلید اصلی رکورد (مثلا کد ملی) عمل update رو در بانک انجام بدید.


update مقدار فیلد=نام فیلد where کلید اصلی=@X