PDA

View Full Version : سوال: مشکل در Datagridview



alimanam
جمعه 25 بهمن 1387, 19:05 عصر
سلام . می خواستم بدونم چطوری میشه درdatagridview یه سری از rows های انتخاب شده رو حذف کرد و همینطور چطوری می تونم rows های انتخابی رو به یه datagridview دیگه انتقال بدم . خیلی متشکرم .

alimanam
دوشنبه 05 اسفند 1387, 21:22 عصر
هیچ کس نیست به این مشکل من جوابی بده ؟

anooshiran
دوشنبه 05 اسفند 1387, 23:36 عصر
سلام دوست عزيز

اگر به همين صفحه كه تاپيك زدي نگاه كني همين سئوال مطرح و جواب داده شده

http://barnamenevis.org/forum/showthread.php?t=149169

لينك فوق

در مورد حذف يك row هم




Dim myRow As DataGridViewRow = Me.DataGridView1.CurrentRow
DataGridView1.Rows.Remove(myRow)


البته كد فوق براي سطر جاري است ولي ميتواني به جاي آن هر سطر ديگري را نيز انتخاب كني

alimanam
جمعه 16 اسفند 1387, 17:41 عصر
سلام دوست عزیز (anooshiran)
من مثالتون رو دیدم خوب بود ولی مشکل من اینجاست که تعداد row های انتخاب شده یه دونه نیست یعنی اینکه row هایی رو که انتخاب کردم رو دریک زمان از یک datagridview به datagridview دیگه منتقل کنم یا حذفشون کنم . اگه بتونین راهنمائیم کنین خیلی ممنون میشم . مرسی

alimanam
پنج شنبه 22 اسفند 1387, 22:05 عصر
سلام کسی نیست به سوال من جوابی بده من واقعاً به این کد نیاز دارم خواهش می کنم اگه کسی بلده جوابم رو بده . مرسی

mehrnoosh_al62
دوشنبه 26 اسفند 1387, 11:45 صبح
For i As Integer = 0 To DataGridView1.Rows.Count
If DataGridView1.Rows(i).Selected Then
DataGridView2.Rows.Add(DataGridView1.Rows(i))
DataGridView1.Rows.RemoveAt(DataGridView1.Rows(i). Index)
End If
Next

Developer Programmer
دوشنبه 26 اسفند 1387, 13:15 عصر
البته پیرو جواب مهرنوش، مایکروسافت میگه


When a row is removed, all data in that row is lost. You can also call the Delete (http://barnamenevis.org/forum/b4885fe5-52c6-d9b9-0c1d-b35ec1ee7e7a.htm) method of the DataRow (http://barnamenevis.org/forum/1a75122b-5578-2d83-4e5f-4c0868dbacf1.htm) class to just mark a row for removal. Calling RemoveAt is the same as calling Delete (http://barnamenevis.org/forum/b4885fe5-52c6-d9b9-0c1d-b35ec1ee7e7a.htm) and then calling AcceptChanges (http://barnamenevis.org/forum/c83756f0-70c2-4a21-cecf-fd2351e3f319.htm).
You can use the Clear (http://barnamenevis.org/forum/fa0544fa-a161-8458-28ea-6be63f1a467a.htm) method to remove all members of the collection at one time.



myDataSet.Tables[0].Rows[0].Delete();

alimanam
سه شنبه 27 اسفند 1387, 02:22 صبح
راجب به کدهای مهرنوش جان باید بگم که من قبلاً از این کدها استفاده کرده بودم ولی چیزی که هست اینه که همچین اروری می ده

Index was out of range.Must be non-nagative and less than the size of of the collection . Parameter name : Index

seven7777777
سه شنبه 27 اسفند 1387, 06:05 صبح
راجب به کدهای مهرنوش جان باید بگم که من قبلاً از این کدها استفاده کرده بودم ولی چیزی که هست اینه که همچین اروری می ده

کد:
Index was out of range.Must be non-nagative and less than the size of of the collection

جناب alimanam این error وقتی صادر میشه که در زمان اجرا شما از محدوده یک Index فراتر برید . علت این خطا هم اینه که حلقه for شما ( اگه دقیقا از روش خانم مهرنوش رفتید ) وقتی از صفر شروع به شمارش می کنه باید تا یکی کمتر از تعداد ردیف ها بشماره . یعنی اگه شما 5 ردیف دارید حلفه باید از 0 تا 4 بشماره که 5 تا شمارش کرده باشه ( البته اگه ایندکست از 0 شروع میشه که اغلب اینگونست )

mehrnoosh_al62
سه شنبه 27 اسفند 1387, 09:08 صبح
seven7777777 درست میگن. حلقه رو باید به این شکل تغییر بدی...


For i As Integer = 0 To DataGridView1.Rows.Count - 1
Next

alimanam
سه شنبه 27 اسفند 1387, 18:38 عصر
جناب alimanam این error وقتی صادر میشه که در زمان اجرا شما از محدوده یک Index فراتر برید . علت این خطا هم اینه که حلقه for شما ( اگه دقیقا از روش خانم مهرنوش رفتید ) وقتی از صفر شروع به شمارش می کنه باید تا یکی کمتر از تعداد ردیف ها بشماره . یعنی اگه شما 5 ردیف دارید حلفه باید از 0 تا 4 بشماره که 5 تا شمارش کرده باشه ( البته اگه ایندکست از 0 شروع میشه که اغلب اینگونست )

با عرض سلام خدمت آقا سون

عزیز من چیزایی رو که گفتین رو انجام دادم (کدهای خانم مهرنوش رو خودم تغییرداده بودم ) ولی باز همون Error run time رو می ده البته اینو اضافه کنم که فکر می کنم این error به خاطر این رخ می ده که هر وقت یک row رو حذف می کنیم تعداد row ها به قطع کم میشه بنابراین حلقه با تعداد بیشتری می خواد تکرار بشه ( نسبت به تعداد رکوردهای فعلی دیتاگرید ) به همین خاطر error اندیکس رخ میده البته این نظر منه شاید هم اشتباه باشه .

البته یک error دیگه هم میده که من یادم رفت بگم و اون اینه :

Row provided already belongs to a datagridvew control

حالا دیگه نمی دونم این یکی واسه چی رخ می ده
لطفا اگه امکانش هست مشکل منو حل کنین . می دونم که چیز زیاد مشکلی نیست ولی مشکل اینجاست که مایکروسافت واقعا تو زمینه این کنترل کم لطفی کرده و کلی پیچوندتش !

anooshiran
سه شنبه 27 اسفند 1387, 19:56 عصر
سلام دوست عزيز

اگز كمي به پروژه اي كه برايت نوشتم دقت ميكردي جواب سئوالت را داده بود.

به هر حال من اين پروژه را كمي دستكاري كردم..

شما با گرفتن Ctrl و Click روي هر رديف مي توانيد هر تعداد رديفي را كه مي خواهيد انتخاب كنيد.

بعد 2 button در برنامه گذاشته ام كه يكي كل انتخاب هاي شما را فقط كپي مي كند و ديگري كپي و حذف.

باز هم اگز سئوال بود در خدمت هستم

rooshan2008
چهارشنبه 28 اسفند 1387, 18:04 عصر
سلام به همه دوستان
جواب به نظرم سادست..
دو راه من بلدم امید وارم کمکتون کنه ....
راه اول



For i = DataGridView1.SelectedRows.Count - 1 To 0 Step -1
DataGridView1.Rows.Remove(DataGridView1.SelectedRo ws.Item(i))
Next


راه دوم :

For Each Roshan In DataGridView1.SelectedRows
DataGridView1.Rows.Remove(Roshan )
Next

این کد ها رو اجرا نگرفتم ولی به گمانم درست کار میکنه:لبخندساده:

alimanam
پنج شنبه 29 اسفند 1387, 01:16 صبح
آقا انوش واقعا ممنونم دقیقاً همون چیزیه که می خواستم دستت درد نکنه .

alimanam
پنج شنبه 29 اسفند 1387, 01:24 صبح
آقا روشن کدهاتون رو امتحان کردم اونا هم خیلی خوب جواب می دادن مرسی از راهنماییتون .

alimanam
پنج شنبه 29 اسفند 1387, 02:03 صبح
سلام دوست عزيز

اگز كمي به پروژه اي كه برايت نوشتم دقت ميكردي جواب سئوالت را داده بود.

به هر حال من اين پروژه را كمي دستكاري كردم..

شما با گرفتن Ctrl و Click روي هر رديف مي توانيد هر تعداد رديفي را كه مي خواهيد انتخاب كنيد.

بعد 2 button در برنامه گذاشته ام كه يكي كل انتخاب هاي شما را فقط كپي مي كند و ديگري كپي و حذف.

باز هم اگز سئوال بود در خدمت هستم

راستی آقا انوش من یه سوال دیگه هم دارم که اگه لطف کنین و بهش جواب بدین ممنون میشم اصلا همچین کاری با datagridview میشه انجام داد یا نه ؟ آدرس لینک سوال

http://barnamenevis.org/forum/showthread.php?p=693648#post693648

بازم از راهنمائیتون تشکر می کنم .

anooshiran
پنج شنبه 29 اسفند 1387, 07:06 صبح
سلام دوست عزيز

بله اين كاري كه شما مي خواهيد كاملا شدني است.

توجه كنيد شما هر كار معقولي را مي توانيد در حيطه vb انجام دهيد البته با روش هاي منطقي. اين خواست شما دقيقا افزايش يك property به يك control است. محض راهتمايي مي گويم كه بلسد از event مربوط به paint استفاده كنيد. سعي خودتان را بكنيد اگر موفق نشديد من كدش را برايتان خواهم نوشت.

alimanam
جمعه 30 اسفند 1387, 20:26 عصر
سلام دوست عزيز

بله اين كاري كه شما مي خواهيد كاملا شدني است.

توجه كنيد شما هر كار معقولي را مي توانيد در حيطه vb انجام دهيد البته با روش هاي منطقي. اين خواست شما دقيقا افزايش يك property به يك control است. محض راهتمايي مي گويم كه بلسد از event مربوط به paint استفاده كنيد. سعي خودتان را بكنيد اگر موفق نشديد من كدش را برايتان خواهم نوشت.

با عرض سلام خدمت آقا نوش

من واقعاً از راهنمایی خوب شما ممنونم ولی اگه لطف کنین و کدش رو بنویسین ممنون میشم چون درزمینه هایی که فرمودین اصلاً سررشته ایی ندارم .