PDA

View Full Version : بدست آوردن Position رکورد



Fastdesign
سه شنبه 19 دی 1391, 13:07 عصر
با سلام خدمت دوستان

توضیح کلی : تو برنامه دو تا فرم دارم . تو فرم اول یک گرید دارم . و از طریق فرم دوم اطلاعات رو به جدول اضافه می کنم .
کد اضافه کردن رکورد از فرم دوم و نمایش آن در گرید فرم اول :
con.Open();
string s = "insert into basij(Gender,F_name,L_name)values('"+comboBox1.Text+"','"+textBox1.Text+"','"+textBox2.Text+"')";
OleDbCommand addq = new OleDbCommand(s,con);//برای اجرای دستوارت SQL
addq.ExecuteNonQuery();
ds.Clear();
da.Fill(ds,"Basij");
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "basij";
con.Close();
this.Close();

هدف : حالا می خوام با انتخاب رکورد (از گرید) در فرم اول و با کلیک باتن مربوطه رکورد انتخابی رو در فرم دوم نمایش بدم .
کد :
Form2 f2 = new Form2();
int pos = bs.CurrencyManager.Position;
cmd.CommandText = "Select * from basij";
cmd.Connection = con;
da.SelectCommand = cmd;
ds.Clear();
da.Fill(ds, "Basij");
pos = bs.CurrencyManager.Position;//روی رکورد جاری که هستیم
f2.bs = bs;
f2.comboBox1.Text = ds.Tables["Basij"].Rows[pos]["Gender"].ToString();
f2.textBox1.Text = ds.Tables["Basij"].Rows[pos]["F_name"].ToString();
f2.Show();
f2.comboBox1.Focus();

و اما مشکل این این کد : تا زمانی که رکورد جدید رو اضافه نکردم هر رکوردی رو از گرید انتخاب کنم در فرم دوم برام نمایش میده ! ولی اگه یک رکورد رو اضافه کنم و از گرید یک رکورد رو انتخاب کنم برمیگرده رکورد اول رو برام نمایش میده .

با تشکر

Fastdesign
سه شنبه 19 دی 1391, 16:44 عصر
دوستان منظور من اینه که اگر من تو فرم اول یک رکورد را از گرید انتخاب کنم و بخوام این رکورد رو تو فرم دیگه تو مثلا TextBox نمایش بدم باید چکار کنم .

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

با تشکر

afshin_1989
سه شنبه 19 دی 1391, 17:00 عصر
راه حل ساخت یک eventhandeler جدید

danialafshari
سه شنبه 19 دی 1391, 17:29 عصر
دوستان منظور من اینه که اگر من تو فرم اول یک رکورد را از گرید انتخاب کنم و بخوام این رکورد رو تو فرم دیگه تو مثلا TextBox نمایش بدم باید چکار کنم .

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

با تشکر

سلام
بارها و بارها در این باره در فروم بحث شده
شما می تونی یک کلاس بسازی و فیلد یکتا رو که معمولا ID هست رو در اون بزاری وقتی که فرم 2 باز شد query مینویسی که اطلاعاتی رو where جایی که ID = همون کدی است که در کلاس هست رو نمایش بده و textBox ها رو با کد زیر در فرم2 bind می کنی تا اطلاعات رو نشون بده
textBox1.DataBindings.Add("Text", nameDataset.nameTable, "nameField");
اونجایی که name... داره اطلاعات خودت رو بزار
موفق باشی

Fastdesign
سه شنبه 19 دی 1391, 18:32 عصر
textBox1.DataBindings.Add("Text", nameDataset.nameTable, "nameField");



دوست عزیز من دقیقا نمی دونم تو این کد بجای "Text" چی بزارم.

ولی من به این صورت نوشتم و خطا میده :
id = dataGridView1.CurrentRow.Cells[1].Value.ToString();
Form2 f2 = new Form2();
f2.textBox1.DataBindings.Add(id, ds.Tables["Basij"], "F_Name");
f2.Show();
این هم خطاش :
Cannot bind to the property '4' on the target control.
Parameter name: PropertyName

danialafshari
سه شنبه 19 دی 1391, 18:51 عصر
id = dataGridView1.CurrentRow.Cells[1].Value.ToString();
احتمالا این در صورتی جواب بده که فیلد ID اول باشه
این ID انشاا... که در کلاس تعریف شده دیگه؟

f2.textBox1.DataBindings.Add(id, ds.Tables["Basij"], "F_Name");
این کد جاش اینجا نیست ! خمونطور که بالا گفتم باید در form2 در Load قرارش بدی
بعدشم اشتباهه!
textBox1.DataBindings.Add("Text", nameDataset.nameTable, "nameField");
Text ثابته یعنی از نوع متنی

danialafshari
سه شنبه 19 دی 1391, 20:40 عصر
فکر کنم این بدردت بخوره