PDA

View Full Version : سوال: انتقال اطلاعات از DataGridView به TextBox های یک فرم دیگر



cse.Abdali
سه شنبه 14 شهریور 1391, 17:04 عصر
با سلام
دو فرم دارم
در فرم اصلی عبارت جستجو وارد و با انتخاب دکمه جستجو، نتایج در DataGridView در فرم دوم نمایش داده می شود
در فرم دوم ردیف مورد نظر انتخاب و با کلیک روی دکمه ویرایش در پایین صفحه، فیلدهای مربوطه از GridView به TextBoxهای فرم اول انتقال می یابد
با چه کدی می تونم این کار را انجام بدهم؟ (با استفاده از معماری سه لایه)
آیا امکان پذیر است در GridView فقط تعدادی از فیلدهای مربوط به یک موجودیت را داشته باشیم ولی بخواهیم با انتخاب آن سطر "همه" فیلدهای فرم اصلی پر شود؟
با سپاس فراوان

behnam_khademi
سه شنبه 14 شهریور 1391, 20:15 عصر
می تونید در رویداد DoubleClick، گرید استفاده کنید
تا اون فیلد هایی رو که میخواهید رو به فرم دیگه انتقال بدید.
برای مثال:

Edit_stockRoom
editStockRoom = newEdit_stockRoom();
editStockRoom.txtprice.Text = GridviewSearch.SelectedRows[0].Cells["IDPiece"].Value.ToString();
editStockRoom.TxtDate1.Text = GridviewSearch.SelectedRows[0].Cells["Dateloginlogout"].Value.ToString();


در مورد سوال دوم هم میتونید id اون سطر رو بگیرید و دوباره جستجو رو بر اساس اون انجام بدید و هر فیلدی رو که میخواهید انتقال بدید.
امید وارم تونسته باشم منظورم رو برسونم.

cse.Abdali
سه شنبه 14 شهریور 1391, 22:30 عصر
در مورد کدی که نوشتید اگه درست متوجه شده باشم

ابتدا یک نمونه از فرم اصلی می سازیم؛ که در مورد پروژه من به صورت زیر است

frmCourse frm = new frmCourse();
frm.Show();


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

حالا یکی از سطرهای گرید ویو را انتخاب می کنیم

در رویداد کلیک دکمه ویرایش که در این فرم است باید کدی نوشته بشه که تکست باکس های فرم اول را پر کنه

کدی که نوشتید سطر اول را انتخاب میکنه. چطور بهش بگم سطری که من انتخاب کردم را اطلاعاتش را برگردونه

می دونم اگه داخل خود گریدویو باشم با
dgvCourseResultSearch.Rows[e.RowIndex]

میشه شماره سطر را بدست آورد ولی از خارجش بلد نیستم

cse.Abdali
سه شنبه 14 شهریور 1391, 22:32 عصر
در مورد سوال دوم
نیاز به متدی برای جستجو دارم که خروجی این متد یک DataTable است
چطور می تونم این DataTable را به چند تکست باکس انتقال بدم؟

behnam_khademi
سه شنبه 14 شهریور 1391, 23:02 عصر
گفتم که میتونی از رویداد DoubleClick، استفاده کنی تا سطری رو که میخوای به textbox هات اعمال کنی.

afshines
چهارشنبه 15 شهریور 1391, 00:00 صبح
private void btnGhaza_Click(object sender, EventArgs e)
{

bool flag = false;

for (int i = 0; i < Application.OpenForms.Count; i++)
{
if (Application.OpenForms[i].Name == "Rec_Mavad")
{
Application.OpenForms["Rec_Mavad"].BringToFront();
flag = true;
break;
}
}

if (!flag)
{

Rec_Mavad rec_Mavad = new Rec_Mavad();
//پر کردن فیلد
rec_Mavad.Show(this);
}
}



این در مورد ساختن یا نساختن دوباره شی فرم

afshines
چهارشنبه 15 شهریور 1391, 00:04 صبح
ولی در مورد پر کردن فیلد فرمی که بازه می تونی در کد بالا قبل
Application.OpenForms["Rec_Mavad"].BringToFront();
این کدرو برای مثال بنویسی
Application.OpenForms["Rec_Mavad"].Controls["nameControl"].Text = "مقدار";

cse.Abdali
چهارشنبه 15 شهریور 1391, 08:28 صبح
گفتم که میتونی از رویداد DoubleClick، استفاده کنی تا سطری رو که میخوای به textbox هات اعمال کنی.
ببخشید حق با شماست، من اشتباه متوجه شدم
ولی من میخوام با کلیک روی دکمه ویرایش این اتفاق بیفته و از بیرون گرید ویو بلد نیستم چطور شماره سطر را باید بدست بیارم

hamidkh
چهارشنبه 15 شهریور 1391, 08:40 صبح
سلام
اول خاصیت selectionMode گرید رو fuulrowselect کن و بعدش هم که کلیک میکنی روی سطر مورد نظر برای ویرایش میتونی از این کد برای دسترسی به محتوای خونه های گرید استفاده کنی
dataGridView1.CurrentRow.Cells[0].Value

cse.Abdali
چهارشنبه 15 شهریور 1391, 08:43 صبح
ممنون afshines
همه چیز رو همون طور که گفتید نوشتم ولی زمانی که روی دکمه ویرایش کلیک می کنم دیباگر این پیغام را میده

NullRefrenceException was unhandled

Object reference not set to an instance of an object

cse.Abdali
چهارشنبه 15 شهریور 1391, 08:45 صبح
سلام
اول خاصیت selectionMode گرید رو fuulrowselect کن و بعدش هم که کلیک میکنی روی سطر مورد نظر برای ویرایش میتونی از این کد برای دسترسی به محتوای خونه های گرید استفاده کنی
dataGridView1.CurrentRow.Cells[0].Value
یه سوال
نمیشه از خارج از گرید ویو شماره سطرش را بدست آورد؟

hamidkh
چهارشنبه 15 شهریور 1391, 09:00 صبح
dataGridView1.CurrentRow.Index
یا
dataGridView1.SelectedRows[0].Index

cse.Abdali
چهارشنبه 15 شهریور 1391, 09:31 صبح
dataGridView1.CurrentRow.Index
یا
dataGridView1.SelectedRows[0].Index

از راهنمایی تون واااااقعا ممنونم، کمک خیلی خوبی بهم کردید
سوال بعدیم را هم لطف کنید جواب بدید ممنون میشم
1. در مورد جواب afshines که برای نمایش نتایج جستجو یک فرم جدید باز نشه که کد ایشون این کار را میکنه ولی جایی که

Application.OpenForms["Rec_Mavad"].Controls["nameControl"].Text = "مقدار";



را اضافه می کنم دیباگر پیغام میده
2. من در گرید ویو فقط تعداد محدودی ستون میخوام داشته باشم ولی در فرمم تعداد بیشتری فیلد
می دونم که این کار باید از طریق یک متد جستجو باید انجام بشه اما نمی دونم چطور DataTable که خروجی متد جستجو هست را به تکست باکس ها انتقال بدم

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

hamidkh
چهارشنبه 15 شهریور 1391, 09:52 صبح
ببینید جای Rec_Mavad اسم فرمی که میخواهید مقادیر توش نشون بدین بزنین و جای nameControl نام تکست باکس.اگر خطا میده باز هم پیغام خطا روبذارید.
در مورد دوم هم 2 راه دارین یکی اینکه بیاین هر چی فیلد لازم دارین توی گرید بذارین و نمایشش ندین. راه بعدی که همون DataTable است وقتی اطلاعات رو از دیتا بیس خوندین و توی DataTable قرار دادین از این کد استفاده کنید

textBox1.Text = objDataTable.Rows[0]["fieldName"].ToString();

cse.Abdali
چهارشنبه 15 شهریور 1391, 09:56 صبح
ببینید جای Rec_Mavad اسم فرمی که میخواهید مقادیر توش نشون بدین بزنین و جای nameControl نام تکست باکس. اگر خطا میده باز هم پیغام خطا روبذارید.
دقیقا همین کار را انجام دادم و این پیغام را داد

در مورد دوم هم 2 راه دارین یکی اینکه بیاین هر چی فیلد لازم دارین توی گرید بذارین و نمایشش ندین.
اگه منظورتون اینه که تیک Visible را بردارم، این کار را کردم اما نشد، ظاهرا کلا دیگه اون ستون را نمی شناخت

راه بعدی که همون DataTable است وقتی اطلاعات رو از دیتا بیس خوندین و توی DataTable قرار دادین از این کد استفاده کنید

textBox1.Text = objDataTable.Rows[0]["fieldName"].ToString();

امتحان می کنم ببینم جواب میده یا نه

mjzsoft25
چهارشنبه 15 شهریور 1391, 11:34 صبح
دوست عزیز کد زیر رو توی رویداد دابل کلیک گرید ویوت بنویس:
(Application.OpenForms["Form1"].Controls["TextBox1"] as TextBox).Text = dataGridView1.SelectedCells[0].OwningRow.Cells["Name"].Value.ToString();
Form1= اسم فرمی که میخواهی اطلاعات توش وارد بشه.
TextBox1= اسم تکست باکست.
["Name"]= نام ستونی که می خواهی ازش اطلاعات خونده بشه.
توجه:
با کلیک روی هر سلول اطلاعات ردیف خونده میشه.

cse.Abdali
چهارشنبه 15 شهریور 1391, 17:43 عصر
یااااااافتم... !!!:تشویق:
برنامه را به این صورت ویرایش کردم. (پیغام دیباگر را با خط 7 و 8 رفع کردم)
با این کد شما اطلاعاتی را جستجو می کنید و با کلیک روی دکمه جستجو، نتایج جستجو را در گرید ویو در یک فرم جدید نشان میدهید. با کلیک روی دکمه ویرایش در پایین این فرم اطلاعات را از گرید ویو میگیرید و در همان فرم قبلی نشان میدهید تا کاربر بتونه آنها را ویرایش کنه

bool flag = false;
for (int i = 0; i < Application.OpenForms.Count; i++)
{
if (Application.OpenForms[i].Name == "frmCourse")
{
int j = dgvCourseResultSearch.CurrentRow.Index;
frmCourse frm = (frmCourse)Application.OpenForms["frmCourse"];
frm.BringToFront();
frm.txtCourseCode.Text = dgvCourseResultSearch.Rows[j].Cells["clmCourseCode"].Value.ToString();
frm.txtCourseName.Text = dgvCourseResultSearch.Rows[j].Cells["clmCourseName"].Value.ToString();
flag = true;
break;
}
}


if (!flag)
{
frmCourse frm = new frmCourse();
int j = dgvCourseResultSearch.CurrentRow.Index;
frm.txtCourseCode.Text = dgvCourseResultSearch.Rows[j].Cells["clmCourseCode"].Value.ToString();
frm.Show(this);
}

این کد را در رویداد کلیک مربوط به دکمه ویرایش نوشتم
با تشکر فراوان از همه دوستانی که تا اینجا کمکم کردند

بهاری باش
سه شنبه 29 اردیبهشت 1394, 17:15 عصر
چطور میشه اطلاعات ازچند تا textboxتوی فرم1رو به یک datagridview توی فرم 2 انتقال داد؟

ebrahim.rayatparvar
سه شنبه 29 اردیبهشت 1394, 17:28 عصر
سلام.
راه زیاده منظور شما به چه صورت است.
منظور شما به این صورت است ؟ فرم 1 من 1 گرید داره. دکمه اضافه کردن رو که زدیم فرم 2 باز میشه حالا زمانی که تو فرم 2 اطلاعات رو که وارد کردیم دکمه ذخیره رو که زدیم به گرید فرم زیری اضافه بشه.
منظور شما به این صورته؟

ebrahim.rayatparvar
سه شنبه 29 اردیبهشت 1394, 17:35 عصر
این لینک رو ببین اگه منظورت چیزه دیگه ای هست بیشتر توضیح بده ببینیم مشکل چیه

@liReza11800
جمعه 22 خرداد 1394, 15:05 عصر
اول خاصیت Modifiers دیتاگرید رو بذار روی Public و بعد توی دکمه ی فرم اول که با زدنش میری تو فرم دوم این کد رو بنویس

Form2 f2 = new Form2();
f2.dataGridView1.Rows.Add(textBox1.Text, textBox2.Text, textBox3.Text);
f2.ShowDialog();

qweeqw
جمعه 25 تیر 1395, 19:02 عصر
سلام چطوری
با یه کلید روی یک سطر از دیتاگریدویو در فرم 2 مقادیر را یه خانه های مشخصی از دیتاگرید در فرم 1 انتقال بدم
و هر با هر بار کلید روی هر سطر دلخواه از دیتاگرید فرم 2 یک سطر به دیتاگرید فرم 1 اضافه کنه

amp_1356
سه شنبه 22 تیر 1400, 18:58 عصر
با سلام خدمت دوستان
من هم مشکل مشابه ایشون دارم
ببنید این کد که بسیار عالی هست فقط روی TextBox ها و Label هایی که در نمای Design روی فرم قرار می گیرند کار می کنه:

Application.OpenForms["Rec_Mavad"].Controls["nameControl"].Text = "مقدار";

اما من از طریق کد نویسی روی فرم Label تعریف کردم :

Label l12 = new Label();l12.Name = "len";
l12.Text = "";
l12.Name = "lNamAmozeshgah";
this.Controls.Add(l12);

ولی خط کد بالا روی این Label کار نمی کنه و خطا می ده
لطفا خواهشا کمک کنید!