PDA

View Full Version : مشكل با انتخاب سطر در data grid



s.k711
پنج شنبه 30 آبان 1387, 11:01 صبح
سلام دوستان.
من توي برنامم بايد يك سطر از گريد را انتخاب و حذف كنم اما با كدش مشكل دارم



Private Sub DataGridView1_CellContentClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
If e.RowIndex >= 0 Then
Dim str As String
con.Open()
*** str = "select [s_type] from [temp] where [s_type]= '" & DataGridView1.Rows(e.RowIndex).Cells(1).Value.ToSt ring & "'" *****
Dim cmd As New SqlCommand(str, con)
Dim dr As SqlDataReader
dr = cmd.ExecuteReader()
If dr.HasRows = True Then
dr.Read()
type = dr("s_type")
dr.Close()
con.Close()
Else
dr.Close()
con.Close()
Msgbox_Custom("اطلاعاتي وجود ندارد.", 1, 1, "اخطار")
End If
End If
End Sub




در ضمن s_type در جدولم از نوع nvarchar است و فيلدي با نام id هم نميخوام داشته باشم.

ممنون.

mehrnoosh_al62
پنج شنبه 30 آبان 1387, 11:09 صبح
یعنی شما میخواید رو هر خانه از دیتا گرید کلیک کردید اون سطر حذف شه؟ فرقی نمیکنه کدام Cell باشه ؟
در ضمن میشه بگید اطلاعات دیتاگریدو از کجا میگیرید؟ از همون جدولی که قراره توش حذف انجام شه؟

bah_jaf
پنج شنبه 30 آبان 1387, 11:35 صبح
من خودم در برنامم از یک گرید استفاده میکنم که اطلاعاتش رو از دیتا گرید میگیرم و اون رو Bound کردم و وقتی هر ردیف(مهم نیست چه سلولی باشه) انتخاب میشه در رویداد Mouse_up و Key_UP میتونین از اون استفاده کنین چون رکورد جاری تغییر مکنه:


public crmobj as CurrencyManager
private sub form_load(..)
datagrid1.datasourse = dataview1
CrmObj = CType(Me.BindingContext(Dataview1), CurrencyManager)
end sub
Private sub datagrid1_MouseUp(...)
Crmobj.Current("fieldname").ToString
end sub

s.k711
پنج شنبه 30 آبان 1387, 12:11 عصر
سلام دوستان.
در واقع من از اين كد در قسمتهاي ديگه برنامم هم استفاده كرده ام اما در اون قسمتها از فيلد primarykey (id ركورد مورد نظر) به عنوان رديف در گريد استفاده كردم اما اينجا اين يك جدول كمكي براي پر كردن جدول اصلي است به همين خاطر از فيلد id استفاده نكردم.اما هنگام درج در همين جدول( temp) تكراري نبودن ركوردها را چك كردم و
(فكر ميكنم) اينكار درست است كه اسمي را كه نبايد در جدولم تكراري باشه را براي انتخاب سطر در گريد در نظر گرفتم؟



*** str = "select [s_type] from [temp] where [s_type]= '" & DataGridView1.Rows(e.RowIndex).Cells(1).Value.ToSt ring & "'" *****


اما كاري كه ميخوام بكنم:
وقتي هر سطر گريد را ميزنم s_type را براي كارهاي ديگه استفاده كنم مثل حذف يا ويرايش نميدونم .تونستم بفهمونم ميخوام چه كاركنم يا نه؟
خواهش ميكنم كمك كنيد.
ممنون.

s.k711
پنج شنبه 30 آبان 1387, 12:15 عصر
یعنی شما میخواید رو هر خانه از دیتا گرید کلیک کردید اون سطر حذف شه؟ فرقی نمیکنه کدام Cell باشه ؟

بله ميخوام حذف بشه.و فرقي نميكنه سلول باشه.



در ضمن میشه بگید اطلاعات دیتاگریدو از کجا میگیرید؟ از همون جدولی که قراره توش حذف انجام شه؟

بله.اطلاعات را ازهمون جدول كه قراره توش حذف انجام بشه، ميگيرم.

bah_jaf
پنج شنبه 30 آبان 1387, 12:20 عصر
ببین دوست عزیز اگه درست فهمیده باشم نمی تونید دستور Select را بنویسی :

strselect = "Select * from table2 where id2=" & crmobj.current("id1").tostring
اگر بازم نفهمیدم واضح تر بگو

bah_jaf
پنج شنبه 30 آبان 1387, 12:24 عصر
سلام دوستان.
در واقع من از اين كد در قسمتهاي ديگه برنامم هم استفاده كرده ام اما در اون قسمتها از فيلد primarykey (id ركورد مورد نظر) به عنوان رديف در گريد استفاده كردم اما اينجا اين يك جدول كمكي براي پر كردن جدول اصلي است به همين خاطر از فيلد id استفاده نكردم.اما هنگام درج در همين جدول( temp) تكراري نبودن ركوردها را چك كردم و
(فكر ميكنم) اينكار درست است كه اسمي را كه نبايد در جدولم تكراري باشه را براي انتخاب سطر در گريد در نظر گرفتم؟



*** str = "select [s_type] from [temp] where [s_type]= '" & DataGridView1.Rows(e.RowIndex).Cells(1).Value.ToSt ring & "'" *****


اما كاري كه ميخوام بكنم:
وقتي هر سطر گريد را ميزنم s_type را براي كارهاي ديگه استفاده كنم مثل حذف يا ويرايش نميدونم .تونستم بفهمونم ميخوام چه كاركنم يا نه؟
خواهش ميكنم كمك كنيد.
ممنون.

آقا تو این دستورت آخر خطت یه " ' " اضافه گذاشتی.

bah_jaf
پنج شنبه 30 آبان 1387, 12:25 عصر
سلام دوستان.
در واقع من از اين كد در قسمتهاي ديگه برنامم هم استفاده كرده ام اما در اون قسمتها از فيلد primarykey (id ركورد مورد نظر) به عنوان رديف در گريد استفاده كردم اما اينجا اين يك جدول كمكي براي پر كردن جدول اصلي است به همين خاطر از فيلد id استفاده نكردم.اما هنگام درج در همين جدول( temp) تكراري نبودن ركوردها را چك كردم و
(فكر ميكنم) اينكار درست است كه اسمي را كه نبايد در جدولم تكراري باشه را براي انتخاب سطر در گريد در نظر گرفتم؟



*** str = "select [s_type] from [temp] where [s_type]= '" & DataGridView1.Rows(e.RowIndex).Cells(1).Value.ToSt ring & "'" *****


اما كاري كه ميخوام بكنم:
وقتي هر سطر گريد را ميزنم s_type را براي كارهاي ديگه استفاده كنم مثل حذف يا ويرايش نميدونم .تونستم بفهمونم ميخوام چه كاركنم يا نه؟
خواهش ميكنم كمك كنيد.
ممنون.

آخر این خطت یک کاما " ' " اضافه گذاشتی

mehrnoosh_al62
پنج شنبه 30 آبان 1387, 13:29 عصر
ببینید اگه منظورتون اینه که رو هر سطری از دیتاگرید که کلیک کردی به s_type در اون سطر دسترسی داشته باشی و ازش استفاده کنی حالا واسه حذف یا ویرایش یا هر چی میتونی از کد زیر استفاده کنی:

دسترسی به s_type

Private Sub DataGridView1_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgFile.CellClick
Dim s As String
s = dgFile.CurrentRow.Cells(1).Value.ToString()
End Sub

دستور select رو به این شکل بنویس


str = "select [s_type] from [temp] where [s_type]= '" & s & "'"

البته امیدوارم منظورتون همین باشه. فقط یه چیزی برام مبهمه. اینکه اصلا این دستور Select برای چیه؟
اگه قراره از یه جدول طبق S_type یه رکوردو حذف کنید چه نیازی به این select هست؟
خوب مستقیما حذف کنید:

str = "delete from [temp] where [s_type]= '" & s & "'"

s.k711
پنج شنبه 30 آبان 1387, 13:47 عصر
ببینید اگه منظورتون اینه که رو هر سطری از دیتاگرید که کلیک کردی به s_type در اون سطر دسترسی داشته باشی و ازش استفاده کنی حالا واسه حذف یا ویرایش یا هر چی میتونی از کد زیر استفاده کنی:

دسترسی به s_type

Private Sub DataGridView1_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgFile.CellClick
Dim s As String
s = dgFile.CurrentRow.Cells(1).Value.ToString()
End Sub

دستور select رو به این شکل بنویس


str = "select [s_type] from [temp] where [s_type]= '" & s & "'"

البته امیدوارم منظورتون همین باشه. فقط یه چیزی برام مبهمه. اینکه اصلا این دستور Select برای چیه؟
اگه قراره از یه جدول طبق S_type یه رکوردو حذف کنید چه نیازی به این select هست؟
خوب مستقیما حذف کنید:

str = "delete from [temp] where [s_type]= '" & s & "'"

خيليممنون از راهنماييتون.
كدي كه گذاشتين را امتحان ميكنم و اگه نتيجه نگرفتم خبرتون ميكنم.اما ان دستور select را براي ويرايش و كارهاي ديگه كه با جدولم دارم لازم دارم.
بازم ممنون:لبخندساده:

s.k711
پنج شنبه 30 آبان 1387, 17:19 عصر
error اي كه ميده تو عكسه.

salam333
پنج شنبه 30 آبان 1387, 19:00 عصر
خیلی راحت نام فیلد رو ازS-typeبه stypeتبدیل کن مشکل حل میشه:گیج:

s.k711
پنج شنبه 30 آبان 1387, 23:29 عصر
خواهش ميكنم يكي كمك كنه.

rooshan2008
جمعه 01 آذر 1387, 00:20 صبح
سلام
وقتی این پیغام رو میده که شما هیچ سطری رو انتخاب نکردین.(در واقع فکر می کنم e.Rowindex شما مقدار مفی یک داره ) اگه مشکل این هست دوای دردش اینه..

خوب شما برای رفع این مشکل :
در حالت desigen توی خصوصیات Datagridview خودتون SelectionMode روبه FullRowSelect تغییر بدید.

یا در حالت کد توی FormLoad این کد :

Datagridview1.SelectionMode = DataGridViewSelectionMode.FullRowSelect