View Full Version : انتخاب کردن چند سطر در دیتا گرید بوسیله چک باکس
سینا2010
جمعه 30 مهر 1389, 08:01 صبح
با سلام
من تو دیتا گرید خودم چهار تا ستون دارم که یکیش به صورت چک باکس هست حالا میخوام اگر تو چند ردیف چک باکس ها رو انتخاب کردم اونها از دیتابیس من حذف بشن یا اونها رو بتونم به کریستال پاس بدم اما نمی دونم چه جوری باید این که رو بنویسم دوستان کسی می تونه راهنمایی کنه .
باتشکر از همه شما.
m.azadi
جمعه 30 مهر 1389, 10:51 صبح
سلام فکر کنم این به دردتون بخوره:
DataGridView1.EndEdit()
Dim r As DataGridViewRow
For i As Int32 = 0 To DataGridView1.RowCount - 1
r = DataGridView1.Rows(i)
If r.Cells(0).Value & "" = "True" Then
DataGridView2.Rows.Add()
Dim r2 As DataGridViewRow = DataGridView2.Rows(DataGridView2.RowCount - 1)
r2.Cells(0).Value = r.Cells("Id").Value
r2.Cells(1).Value = r.Cells("Name").Value
End If
Next
سینا2010
جمعه 30 مهر 1389, 11:38 صبح
ببخشید می شه یک مفدار کاملتر توضیح بدی در مورد این کد من چه جوری می تونم از این کد برای حدف چند رکورد از دیتابیس به وسیله دیتا گرید استفاده کنم ؟
ممنون
ameysams
جمعه 30 مهر 1389, 14:35 عصر
شاید این هم بدردت بخوره:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
For Each row As DataGridViewRow In DataGridView1.Rows
If CType(row.Cells(1).Value, Boolean) = True Then
'delete row here
End If
Next
End Sub
یعنی به ازای هر رکوردی که چک خورده بود عمل حذف را انجام می دهد.
سینا2010
جمعه 30 مهر 1389, 15:54 عصر
ممنون
ببخشید اما چطوری می شه موارد انتخاب شده رو به دیتا تیبل پارس داد؟
با تشکر
nosrati1363
جمعه 30 مهر 1389, 19:02 عصر
ببین دوست من
کار با دیتابیس روش های مختلفی داره . ساده ترین اون ها استفاده از دیتاست،بیندینگ سورس و کنترل های بیند شده است . اگه از این روش استفاده کردی در رویداد cell_clickمربوط به dgv میتونی رکورد رو از بیندینگ سورس حذف کنی و هر زمان کارت با dgv تموم شد tableadapter رو update کنی
در غیر این صورت باید از متد ()DataSet1.Table1.Rows.IndexOf استفاده کنی . یک datarow بساز اونو با datarow انتخابی پرکن و مقدار رو در این متد قرار بده اونوقت این متد index رکود رو برمی گردونه و با متد DataSet1.Table1i.Rows(index).Delete رکورد رو حذف کن
از این ساده تر نمیشه:تشویق:
سینا2010
شنبه 01 آبان 1389, 01:05 صبح
دوست عزیز می شه بگی اشکال این کد کجاست من هر کاری می کنم و هر چند تا ردیف که انتخاب می کنم فقط آخرین ریف رو تو کریسال نشون می ده. همین
اینم از کد:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
For Each row As DataGridViewRow In dg1.Rows
If CType(row.Cells(0).Value, Boolean) = True Then
Da = New SqlDataAdapter("select * from man where Column1 = '" & row.Cells(1).Value & "'", cn)
cn.Open()
Dim dss As New DataSet()
Da.Fill(dss, "man")
rpt.SetDataSource(dss)
Me.CrystalReportViewer1.ReportSource = rpt
cn.Close()
End If
Next
End Sub
mitra285
شنبه 01 آبان 1389, 14:49 عصر
مشکل شما حل شد ؟
اگر حل شده می شه راه حلش رو هم این جا بذارید که بقیه هم بتونن استفاده کنن.
سینا2010
شنبه 01 آبان 1389, 16:44 عصر
نه هنوز نتونستم براش جوابی پیدا کنن .
دوستان خواهش می کنم اگر کسی می دونه کمک کنه.:گریه:
سینا2010
دوشنبه 03 آبان 1389, 01:21 صبح
اینم از نمونه سورس و بانک برنامه خواهش می کنم کمک کنید.
بد جوری گیر افتادم
سینا2010
دوشنبه 03 آبان 1389, 12:26 عصر
اساتید محترم لطفا کمک کنید بد جوری سر این موضوع گیر افتادم هیچ جوری هم درست نمی شه.
Alghoochi
دوشنبه 03 آبان 1389, 14:27 عصر
دوست عزیز من با Visual Studio 2008 نتونستم بانک اطلاعاتی شما رو باز کنم.
سینا2010
دوشنبه 03 آبان 1389, 16:02 عصر
ضمن تشکر از شما
بانک من با SQL 2008 طراحی شده. شاید بخاطر این باشه.
----------------------------------------------------------------------------------
بانک رو با SQL 2005 طراحی کردم می تونی دانلود کنی . امیدوارم بتونی این مشکل رو برام حلش کنی. تشکر
Alghoochi
سه شنبه 04 آبان 1389, 10:30 صبح
کدهای Button_Click رو به این صورت تغییر بدی مشکلت حل میشه.
Dim dss As New DataSet
For Each row As DataGridViewRow In dg1.Rows
If CType(row.Cells(0).Value, Boolean) = True Then
da = New SqlDataAdapter("select * from man where Column1 = '" & row.Cells(1).Value & "'", cn)
da.Fill(dss, "man")
End If
Next
rpt.SetDataSource(dss)
Me.CrystalReportViewer1.ReportSource = rpt
اما مشکل از کجا بود. شما نباید DataSet رو درون حلقه تعریف می کردی. با اینکار هرموقع که حلقه اجرا می شد DataSet از نو تعریف میشد و محتویات قبلی اون پاک میشد. بعد از آخرین اجرا فقط آخرین رکورد توی جدول مونده بود.
ولی کدشما هنوز یه مشکل داره. اونم اینکه برای هررکورد یکبار به بانک اطلاعاتی وصل میشه و اطلاعات اون رکورد رو می خونه. این چندان جالب نیست. سعی می کنم این مشکل رو حل کنم و نتیجه رو برات بزارم.
سینا2010
سه شنبه 04 آبان 1389, 11:56 صبح
یه دنیا ممنونم از شما.
alimanam
سه شنبه 04 آبان 1389, 12:58 عصر
با سلام
اینم یه نمونه سورس دیگه که برای راحتی کار با پایگاه داده اکسس واستون نوشتم . موفق باشید .
ali_najari
سه شنبه 04 آبان 1389, 14:10 عصر
دوستان قبل از اينكه چيزي بگيد يكم روي خواسته طرف مقابل توجه كنيد (البته من خيلي شرمنده ام كه اينو ميگم)
خود سينا خان كدهاي Button2_Click رو به شكل زير تغيير بده ابتدا
da = New SqlDataAdapter(SQLSelectedString(), cn)
cn.Open()
cn.Close()
Dim dss As New DataSet
da.Fill(dss, "man")
rpt.SetDataSource(dss)
Me.CrystalReportViewer1.ReportSource = rpt
سپس اين Function رو هم به برنامت اضافه كن :
Private Function SQLSelectedString() As String
Dim StrStart As String = "select * from man where "
Dim StrCondition As String = ""
For Each row As DataGridViewRow In dg1.Rows
If CType(row.Cells(0).Value, Boolean) = True Then
If StrCondition = "" Then
StrCondition = "Column1='" & row.Cells(1).Value & "'"
Else
StrCondition &= " OR Column1='" & row.Cells(1).Value & "'"
End If
End If
Next
Return (StrStart & StrCondition)
End Function
من برنامت رو اصلاح كردم و ضميمه ميكنم واست اميدوارم كه كارت راه بيفته
باز هم از همگي عذر ميخوام
سینا2010
سه شنبه 04 آبان 1389, 18:44 عصر
از همه شما دوستان ( Alghoochi - ali_najari -alimanam ) خوبم ممنونم .
با عرض شرمندگی .
آیا راهی هست که همه چک باکس ها رو بشه همزمان انتخاب کرد.
ممنون می شم راهنمایی بفرمائید.
ali_najari
سه شنبه 04 آبان 1389, 19:08 عصر
دوست عزیز باید برای این کار یه حلقه تعریف کنی و توی اون حلقه checkbox ها رو true کنی
zkooch
سه شنبه 18 مرداد 1390, 23:48 عصر
سلام من هم تاحدودی همین مشکل را دارم فقط در مورد برنامه من این است که من میخواهم این اعمالرا برای دیتا تیبل انجام دهم
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.