PDA

View Full Version : سوال: دسترسی به سطرهای datagrid در یک فرم دیگر



mehrnoosh_al62
پنج شنبه 30 خرداد 1387, 10:09 صبح
سلام دوستان
من یه datagrid دارم که میخوام وقتی روی هر یک از فیلدهای یک ستون خاص که کلیک میکنم فرم جدیدی باز شه و یه سری اطلاعات از جدولم توش لود شه
حالا مشکل من اینه:
چطور میتونم تو رویداد لود فرم جدید به هر یک از سل هایی که در datagrid انتخاب میکنم دسترسی داشته باشم؟
وقتی کد زیر رو مینویسم error میده:
Dim x As Integer
x = Frm_Person_Calender.DataGridView1.CurrentRow.Index

Frm_Person_Calender اسم فرمیه که datagrid داخل اونه

error هم اینه:
Object reference not set to an instance of an object.

mehrnoosh_al62
پنج شنبه 30 خرداد 1387, 12:05 عصر
یعنی هیچکس جواب سوال منو نمیدونه؟
فکر نمیکنم خیلی سخت باشه...

NewFoxStudent
پنج شنبه 30 خرداد 1387, 12:18 عصر
grid.SelectedRows.Item(1).Cells

ali_md110
پنج شنبه 30 خرداد 1387, 12:40 عصر
ابتدا باید توی فرم دوم یا یک ماژول یک تابع یا روال عمومی public که دارای یک آرگومان باشه رو بنویسی که این روال کارش جستجو بر اساس مثلا فیلد id_person توی بانک برنامت باشه
مثلا

public sub fill(byval ID_person as integer)
واین ساب رو توی فرم لود فرم دوم صدا بزن
بعد با هر بار کلیک یا دابل کلیک بر روی دیتا گراید( چنانچه دیتاگراید شما به جدولی بایند شده باشه که یکی از فیلدهاش id_person باشه)محتوای این فیلد رو در یک متغیر باز هم از نوع عمومی در یک ماژول ذخیره کن و به روالی که در فرم دوم در فرم لود صدا میزنی پاس کن
فرم دوم به محض لود شدن با یک روال مواجه میشه که دارای یک ارگومانه و اون آر گومان رو از متغیر فرم اول میگیره
راههای نتفاوتی بر اینکار هستش حتی میتونی تک تک خانه های یک دیتاگراید رو در چند متغیر عمومی ذخیره کنی و توی فرمهای دیگه استفاده کنی

mehrnoosh_al62
پنج شنبه 30 خرداد 1387, 13:34 عصر
من خانه های دیتاگراید رو در چند متغیر عمومی ذخیره کردم ولی وقتی میخوام تو یه فرم دیگه ازش استفاده کنم مقدارش برابر صفر میشه...!

NewFoxStudent
پنج شنبه 30 خرداد 1387, 14:10 عصر
ممکنه کد ذخیره خانه های دیتا گرید و کد استفاده از اونها در فرم جدید رو اینجا بزاری تا ایرادش رو بفهمیم

mehrnoosh_al62
پنج شنبه 30 خرداد 1387, 15:49 عصر
این کد رویداد cellclick که توش فرم جدیدم باز میشه

Public y As Integer
Public st1 As String
Public st2 As String
Private Sub DataGridView1_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
Dim x As Integer
x = Convert.ToInt32(DataGridView1.CurrentCell.ColumnIn dex.ToString())
y = Convert.ToInt32(DataGridView1.CurrentRow.Index.ToS tring())
If (x = 3) Then
st1 = DataGridView1.Rows(y).Cells(1).Value.ToString()
st2 = DataGridView1.Rows(y).Cells(2).Value.ToString()
Dim frm_show As New Frm_Show_Information()
frm_show.ShowDialog()
End If
end sub
اینم کد لود فرم جدیدمه


PrivateSub Frm_Show_Information_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMyBase.Load
Dim tbl AsNew DataTable()
Dim con AsNew clsConnection()
Dim str AsString = "select * from tblcalender where shours='" & Frm_Person_Calender.st1 & "' and title='" & Frm_Person_Calender.st2 & "'"
con.Connection()
con.ReturnTable(tbl, str)
DataGridView1.DataSource = tbl
TextBox1.Text = tbl.Rows(0)(2).ToString()
EndSub


st1,st2 در فرم جدید مقدارشان برابر صفره

ali_md110
پنج شنبه 30 خرداد 1387, 20:08 عصر
Public st1 As String
Public st2 As String

درون یک ماژول تعریف کن

ali_md110
پنج شنبه 30 خرداد 1387, 23:52 عصر
یه مثال برات گزاشتم کارتو راه میندازه روی دیتاگراید فرم اول دابل کلیک بکنی نتیجه رو میبنی