PDA

View Full Version : چطوري مي تونم از ديتاست و ديتاتيبل پر شده در دو رويداد استفاده كنم



sheida-peyravi
یک شنبه 07 مهر 1387, 14:13 عصر
من يك فرم دارم كه در رويداد btnsearch_click ديتاست و ديتاتبيلم پر مي شود. و مي خواهم از همان در رويداد btndelete_click استفاده كنم و از اين ديتاتيبل ، سطري كه در ديتاگريدم انتخاب شده را حذف كنم .
كد:





datatable.Rows(datagrid.CurrentRowIndex).Delete()




من تمام كد btnsearch را علاوه بر كد بالا را در delete مي نويسم و تمامي سطرهاي ديتاگريدم را حذف ميكند.

reza6384
یک شنبه 07 مهر 1387, 16:10 عصر
من چندین بار جمله اول شما رو خوندم . نمی دونم متوجه شدم یا نه ، چون نفهمیدم منظورتون از "همان" چیه. اگر منظورتون اینه که می خواهید در رویداد BtnDelete_Click ابتدا سطر جاری DataGridViewرو با کدی که بالا نوشتید خذف کنید و بعد رویداد BtnSearch_Click اتفاق بیفته ، از این کد استفاده کنید :



BtnSearch_Click(Me,e)

sheida-peyravi
دوشنبه 08 مهر 1387, 00:00 صبح
نه دوست عزيز ، btnsearch رخ داده حالا من مي خواهم كه ، از ديتاست و ديتاتيبل پر شده در btnsearch در رويداد btndelete استفاده كنم و سطر انتخاب شده در ديتاگريد را در ديتاتيبلي كه در رويداد btnsearch پر شده را پيدا كند و حذف كند .
اميدوارم توضيحم واضح باشد.

kablayi
دوشنبه 08 مهر 1387, 05:46 صبح
اگه از دیتاست یا دیتاتیبل استفاده میکنید مشکلی نیست تا زمانی که برنامه باز هست موقعیت دیتاست تغییری نمیکنه مگر اینکه خودتون تغییرش بدین ...
مثلا شما در رویداد BtnSearch فیلد مورد نظرتونو در موقعیت 5 از جدولتون پیدا کرده باشین تا زمانی که دوباره عملی رو روی دیتاست انجان ندین همون موقعیت 5 رو نشون میده ...
پس شما اگر کار سرچ رو انجام بدین بعد دکمه btnbelete رو بزنید عملیات delete روی همون موقعیت قبلی انجام میشه ...
این کد رو در رویداد کلیک دیتاگرید بنویسید ... (انتخاب سطرمورد نظر در دیتاگرید )


dim pos as integer = Me.BindingContext(datatable,"tablaName").Position


حالا شماره index فیلد مورد نظر در دیتاتیبل رو دارید و هر عملیاتی از جمله del رو روش انجام بدین ...

موفق باشید ...

sheida-peyravi
دوشنبه 08 مهر 1387, 10:50 صبح
ممنون از راهنمايي تون
من هم همين كار رو كردم ولي تمام سطرها را پاك ميكند ، نه فقط سطر انتخابي را

sheida-peyravi
سه شنبه 09 مهر 1387, 08:13 صبح
ببينيد ، من كدم رابه اين ترتيب نوشته ام .




Dim daTest As New SqlDataAdapter
Dim cnTest As New System.Data.SqlClient.SqlConnection
Dim dstest As New DataSet
Dim strSql As String

Dim strCn As String = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=""DB-university"";Data Source=""user-cf89685757"""
Dim sqlCmd As New SqlCommand
cnTest.ConnectionString = strCn
Dim myDT As New DataTable
Try

cnTest.Open()
Catch ex As Exception
MsgBox(ex.Message)
MsgBox(ex.Source)
End Try

strSql = "SELECT u_stude.Id as [شماره دانشجويي],name as [نام],family as [نام خانوادگي],u_stude.vorudi as [ورودي],u_stude.avg as [معدل],u_selectunit.Idterm as [ترم],coursename as [نام درس],score as نمره],email as [ايميل] FROM u_stude,u_selectunit,u_course,u_term,u_voroodi "
strSql = strSql + " WHERE u_stude.Id = u_selectunit.Id "
strSql = strSql + " AND u_selectunit.courseno = u_course.courseno "
strSql = strSql + " AND u_term.Idterm = u_selectunit.Idterm "
strSql = strSql + " AND u_voroodi.vorudi = u_stude.vorudi "
If tbId.Text <> "" Then

strSql = strSql + " AND u_stude.Id = '" + tbId.Text + "' "
End If

If tbname.Text <> "" Then

strSql = strSql + " AND name like N'%" + tbname.Text + "%'"
End If

If tbfamily.Text <> "" Then

strSql = strSql + " AND family like N'%" + tbfamily.Text + "%'"
End If

If CStr(cbterm.SelectedValue) <> "" Then

Dim strSlctTerm As String

strSlctTerm = CStr(cbterm.SelectedValue)
If strSlctTerm <> "" Then

strSql = strSql + " AND Idterm = '" + strSlctTerm + "'"
End If

End If

If CStr(cbvorudi.SelectedValue) <> "" Then

Dim strSlctVorudi As String

strSlctVorudi = CStr(cbvorudi.SelectedValue)
If strSlctVorudi <> "" Then

strSql = strSql + " AND Idvorudi = '" + strSlctVorudi + "'"
End If

End If

sqlCmd.CommandText = strSql
sqlCmd.Connection = cnTest
daTest.SelectCommand = sqlCmd
Try

daTest.Fill(dstest)
daTest.Fill(myDT)
Dim pos As Integer = Me.BindingContext(dstest.DefaultViewManager).Posit ion
Me.BindingContext(dstest.DefaultViewManager).Remov eAt(pos)
myDT.Rows(pos).Delete()
dgdisplay.Refresh()
dgdisplay.DataSource = dstest.DefaultViewManager
dgdisplay.DataSource = dstest.Tables(0)

Catch ex As Exception
MsgBox(ex.Message)
MsgBox(ex.Source)
End Try






اما براي pos در هر شرايطي مقدار 0 را برميگرداند و بر روي خط بنفش خطاي collection itself is not modifiable را مي دهد .
و وقتي كه سطر بنفش را comment ميكنم و اجازه مي دهم سطر myDT.Rows(pos).Delete اجرا شود بدون خطا تمام مراحل سپري مي شود و سطري حذف نمي شود.