PDA

View Full Version : آموزش: آموزش کار با دیتاگرید



barbodsoft.com
شنبه 31 اردیبهشت 1390, 01:59 صبح
سلام
تعداد زیادی از تاپیکها در مورد دیتاگرید ایجاد می شود و اکثرا هم تکراری هست. برای همین یک تاپیک جدید ایجاد کردم و سعی می کنم جوانب مختلف کار با دیتاگرید رو براتون توضیح بدم. دوستان اگه سوالی دارید اینجا بپرسید در خدمتم.

این تاپیک با هدف جلوگیری از ارسالهای تکراری ایجاد شده. امیدوارم با گذشت زمان این تاپیک کامل شده و نیازی به تاپیک های مجزا توسط کاربران نباشد.

((((((BarbodSoft.com)))))) (http://barbodsoft.rozblog.com/Forum)

پست 2: ذخیره اطلاعات دیتاگرید ویو در دیتابیس و نمایش در دیتاگرید به همراه مثالی (http://barnamenevis.org/showthread.php?288119-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%AF%DB%8C%D8%AA%D8%A7%DA%AF%D8%B1%DB%8C%D8%AF&p=1267891&viewfull=1#post1267891) ساده
پست 4 : آموزش پرینت از دیتاگرید ویو (http://barnamenevis.org/showthread.php?288119-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%AF%DB%8C%D8%AA%D8%A7%DA%AF%D8%B1%DB%8C%D8%AF&p=1268171&viewfull=1#post1268171)
پست 6 : برخی محاسبات روی سلول های دیتاگرید (http://barnamenevis.org/showthread.php?288119-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%AF%DB%8C%D8%AA%D8%A7%DA%AF%D8%B1%DB%8C%D8%AF&p=1268188&viewfull=1#post1268188)
پست 9 : نمونه کوچکی از فاکتور (http://barnamenevis.org/showthread.php?288119-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%AF%DB%8C%D8%AA%D8%A7%DA%AF%D8%B1%DB%8C%D8%AF&p=1268325&viewfull=1#post1268325)
پست 11: کلید اینتر به جای tab (http://barnamenevis.org/showthread.php?288119-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%AF%DB%8C%D8%AA%D8%A7%DA%AF%D8%B1%DB%8C%D8%AF&p=1269868&viewfull=1#post1269868)
پست 12 : نمایش محتویات یک سلول در tootip به هنگام کلیک کردن. (http://barnamenevis.org/showthread.php?288119-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%AF%DB%8C%D8%AA%D8%A7%DA%AF%D8%B1%DB%8C%D8%AF&p=1270894&viewfull=1#post1270894)
پست 15 : یک خط در میون رنگی کردن - یک خطه کردن هدر ستون ها (http://barnamenevis.org/showthread.php?288119-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%AF%DB%8C%D8%AA%D8%A7%DA%AF%D8%B1%DB%8C%D8%AF&p=1271272&viewfull=1#post1271272)
پست 19 , 17 : استفاده از combobox در دیتاگرید. و عمل جستجو با توجه به گزینه انتخابی در combobox (http://barnamenevis.org/showthread.php?288119-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%AF%DB%8C%D8%AA%D8%A7%DA%AF%D8%B1%DB%8C%D8%AF&p=1271385&viewfull=1#post1271385)
پست 20 : ریختن همه اطلاعات دیتاگرید در آرایه (http://barnamenevis.org/showthread.php?288119-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%AF%DB%8C%D8%AA%D8%A7%DA%AF%D8%B1%DB%8C%D8%AF&p=1284019&viewfull=1#post1284019)
پست 23:قفل کردن یک سلول براساس مقدار سلول دیگر (http://barnamenevis.org/showthread.php?288119-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%AF%DB%8C%D8%AA%D8%A7%DA%AF%D8%B1%DB%8C%D8%AF&p=1488569&viewfull=1#post1488569)
پست 24 : چطور میشه ترتیب نمایش ستون ها رو در دیتاگریدویو تغییر داد؟ (http://barnamenevis.org/showthread.php?288119-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%AF%DB%8C%D8%AA%D8%A7%DA%AF%D8%B1%DB%8C%D8%AF&p=1493152&viewfull=1#post1493152)
پست 26 : تغییر رنگ یک ستون از دیتا گرید ویو (http://barnamenevis.org/showthread.php?288119-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%AF%DB%8C%D8%AA%D8%A7%DA%AF%D8%B1%DB%8C%D8%AF&p=1495801&viewfull=1#post1495801)
پست 29 : تغییر حالت انتخاب(selection) از انتخاب سلول ، ستون ، سطر (http://barnamenevis.org/showthread.php?288119-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%AF%DB%8C%D8%AA%D8%A7%DA%AF%D8%B1%DB%8C%D8%AF&p=1504185&viewfull=1#post1504185)
پست 32 :حذف و اضافه یک سطر (http://barnamenevis.org/showthread.php?288119-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%AF%DB%8C%D8%AA%D8%A7%DA%AF%D8%B1%DB%8C%D8%AF&p=1510348&viewfull=1#post1510348)
پست 42 : (http://barnamenevis.org/showthread.php?288119-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%AF%DB%8C%D8%AA%D8%A7%DA%AF%D8%B1%DB%8C%D8%AF&p=1674750&viewfull=1#post1674750)حذف یک سطر از طریق کلیک کردن روی همان سطر (می تونید یک ستون با نام حذف داشته باشید و کاربر روی آن کلیک کند) (http://barnamenevis.org/showthread.php?288119-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%AF%DB%8C%D8%AA%D8%A7%DA%AF%D8%B1%DB%8C%D8%AF&p=1674750&viewfull=1#post1674750)
پست 43 : کنترل ورودی دیتاگرید (http://barnamenevis.org/showthread.php?288119-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%AF%DB%8C%D8%AA%D8%A7%DA%AF%D8%B1%DB%8C%D8%AF&p=1674767&viewfull=1#post1674767)

barbodsoft.com
شنبه 31 اردیبهشت 1390, 02:00 صبح
مثالی بسیار ساده برای شروع کار با دیتاگرید ویو

s.k711
شنبه 31 اردیبهشت 1390, 08:48 صبح
سلام ،خسته نباشيد.
اگه ميشه لطف كنيد بفرماييد چه جوري از ديتاگريد پرينت ميشه گرفت؟
البته من يك كد تو اين سايت پيدا كردم اما صفحه چاپ برعكس چاپ ميشه، من ميخوام اول شماره رديف بعد موضوع و ... باشه اما شماره رديف آخرين ستون تو گريدمه.

barbodsoft.com
شنبه 31 اردیبهشت 1390, 15:06 عصر
یک پروژه ضمیمه کردم. امیدوارم کارت راه بندازه.

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


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


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'print bitmap
PrintDialog1.ShowDialog()
PrintDocument1.Print()
End Sub

Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim bm As New Bitmap(Me.DataGridView1.Width, Me.DataGridView1.Height)
DataGridView1.DrawToBitmap(bm, New Rectangle(0, 0, Me.DataGridView1.Width, Me.DataGridView1.Height))
e.Graphics.DrawImage(bm, 0, 0)
End Sub


یک روش دیگر هم که یکی از دوستان توضیح داده رو می تونید از لینک زیر ببینید که محتویات چاپ می شه نه عکس
http://barnamenevis.org/showthread.php?77750-%DA%86%D8%A7%D9%BE-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D8%AF%DB%8C%D8%AA%D8%A7%DA%AF%D8%B1%DB%8C%D8%AF

oliya24
شنبه 31 اردیبهشت 1390, 15:47 عصر
دوست عزیز ای پروژه خطا داره میشه بر طرفش کنی به من خطای con رو میده مشکلش چیه

barbodsoft.com
شنبه 31 اردیبهشت 1390, 15:54 عصر
برخی محاسبات روی سلول های دیتاگرید



Public Class Form1

Private Sub DataGridView1_CellLeave(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellLeave
sumave()
End Sub

Private Sub DataGridView1_CellEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEnter
sumave()
End Sub

Sub sumave()
Dim sumo, summ As Double
For i = 0 To DataGridView1.RowCount - 2
sumo += DataGridView1.Item("olom", i).Value
summ += DataGridView1.Item("math", i).Value
Next
TxtSumOlom.Text = sumo
TXTSumMath.Text = summ
TxtAvregeOlom.Text = sumo / (DataGridView1.RowCount - 1)
TXTAvergeMath.Text = summ / (DataGridView1.RowCount - 1)
End Sub
End Class

barbodsoft.com
شنبه 31 اردیبهشت 1390, 15:56 عصر
دوست عزیز ای پروژه خطا داره میشه بر طرفش کنی به من خطای con رو میده مشکلش چیه

به خاطر دیتابیسش هست. شما باید کانکشن رو مطابق با سیستم خودت تغییر بدی. البته من یک کانکشنی قرار دادم که در اکثر سیستم ها جواب بده.

mina.org58
شنبه 31 اردیبهشت 1390, 20:11 عصر
سلام
ممنون که راهنمایی می کنید.
اگه بخواهیم ستون تعداد ضربدر قیمت بشه و قیمت کل در ستون بعدی قرار بگیره باید چیکار کنم.

barbodsoft.com
شنبه 31 اردیبهشت 1390, 20:35 عصر
نمونه کوچکی از فاکتور در پاسخ به پست 8




Public Class Form1

Private Sub DataGridView1_CellLeave(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellLeave
sumave()
End Sub

Private Sub DataGridView1_CellEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEnter
sumave()
End Sub

Sub sumave()
Dim Tedad, Ghimat, SumGhimat As Double
For i = 0 To DataGridView1.RowCount - 2
Tedad = DataGridView1.Item("tedad", i).Value
Ghimat = DataGridView1.Item("ghimat", i).Value
DataGridView1.Item("kol", i).Value = Ghimat * Tedad
SumGhimat += Ghimat * Tedad
Next
TxtSumOlom.Text = SumGhimat

End Sub
End Class

ehsan_g
دوشنبه 02 خرداد 1390, 23:24 عصر
اگه لطف کنید وچگونگی تبدیل کلید اینتر را به کلید تب جهت حرکت روی سلولهای گرید بگید ممنون میشم
مخوام وقتی کلید اینتر زده میشه روی سلول همان ردیف حرکت کنه نه اینکه بپره ردیف بعد

barbodsoft.com
سه شنبه 03 خرداد 1390, 16:45 عصر
در پاسخ به پست 10: کلید اینتر به جای tab

یک کلاس به نام mydg به برنام ات اضافه کن و کد ش رو پاک کن و بجاش کد زیر رو بنویس. بعد برنامه رو run کن و دوباره ببند. حالا اگه بری تو toolbox نگاه کنی یک کامپننت به نام mydg اضافه شده. از اون کامپوننت به جای دیتاگرید استفاده کن. درست می شه.



Public Class MyDg
Inherits DataGridView
Public Event OtherKeys(ByVal keys As System.Windows.Forms.Keys)
Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
Select Case (keyData)
Case Keys.Enter
Return MyBase.ProcessTabKey(Keys.Tab)
Case Else
Return MyBase.ProcessCmdKey(msg, keyData)
End Select

End Function
End Class

barbodsoft.com
پنج شنبه 05 خرداد 1390, 12:58 عصر
نمایش محتویات یک سلول در tootip به هنگام کلیک کردن.

کد زیر رو تو رویداد کلیک دیتاگرید تون بنویسید


Dim totip As New ToolTip
Dim _X As Integer = DataGridView1.Location.X + ((e.ColumnIndex + 1) * 100)
Dim _Y As Integer = DataGridView1.Location.Y + ((e.RowIndex + 2) * 20)
totip.Show(DataGridView1.Item(e.ColumnIndex, e.RowIndex).Value, Me, _X, _Y, 1000)


عدد 20 و 100 به ترتیب ارتفاع سطر و عرض ستون هست. شما می تونید مقدار رو جایگزین کنید.

ehsan_g
پنج شنبه 05 خرداد 1390, 17:54 عصر
دوست عزيز باربد ضمن تشكر اززحمات شما ميشه لطف كنيد وادامه آموزش گريد رابديد
اگه ميشه كامبوباكس در گريد را توضيح بديد كه يك كد رو بگيره اطلاعات ديگه رو تو سلوله ثبت كنه
باتشكر

bhasoft
پنج شنبه 05 خرداد 1390, 21:20 عصر
با سلام خدمت باربدسافت عزيز.
خسته نباشي عزيز.
دوست عزيزم من يه مشكلي دارم.اينكه من ميخوام اولا هدرديتا گريم طوري باشه كه متن داخلش تو 2 يا سه سطر ديده نشه و در يك سطر قرار بگيره.
سوال دوما اينه كه من توي ديتا بيسم يك فيلد عكس دارم كه نميخوام اون ديده بشه.ميخواستم ببينم بايد دستور Select رو چي مدلي بنويسم؟
راستي يه خواهش كوچولو هم دارم.چيكار كنم اطلاعات توي گريد يكي در ميان سفيدو طوسي ديده بشه تا اطلاعات خوندنش راحت باشه.
من فايل ضميمه رو اينجا قرار ميدم تا اگه زحمتي نسي يه نگاهي بهش بندازين.
ممنونم...
منتظر جواب هستم...70397

barbodsoft.com
جمعه 06 خرداد 1390, 10:33 صبح
در پاسخ به پست 14 : یک خط در میون رنگی کردن - یک خطه کردن هدر ستون ها
برای یک خطه شدن هدر ستون ها به جای کدی که مستقیم عرض رو تعریف کردی این کد رو بنویس


DGW.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResi zing


برای اینکه یک خط در میون رنگی بشه کد زیر رو بنویس(کد زیر از دو رنگ خاکستری و نقره ای استفاده کرده)


DGW.RowsDefaultCellStyle.BackColor = Color.Gray
DGW.AlternatingRowsDefaultCellStyle.BackColor = Color.Silver


و اما برای اینکه یک فبلد رو حذف کنی باید دستور select رو تغییر بدی به شکل کلی زیر


select fild1,fild2,fild3 from tablename



دوست عزيز باربد ضمن تشكر اززحمات شما ميشه لطف كنيد وادامه آموزش گريد رابديد
اگه ميشه كامبوباكس در گريد را توضيح بديد كه يك كد رو بگيره اطلاعات ديگه رو تو سلوله ثبت كنه
باتشكر
متوجه نشدم دقیقا چی می خواهید.

ehsan_g
جمعه 06 خرداد 1390, 12:32 عصر
گریدی دارم که از دوجدول تغذیه میکنه یکی مشخصات کالا ودیگری تعداد فروش حالااین اطلاعات رو در یک گرید نشون میدیم حالااگه کد کالارو وارد کردیم ناو وقیمت رو از جدول 1 توی سلولها بیارد وتعداد رو دریک سلول دیگه بگیره ودر قیمت ضرب کنه ودرسلول دیگری بریزه
سلولی که کد کالارو میگیره از نوع کامبو باشه
ممنون

barbodsoft.com
جمعه 06 خرداد 1390, 14:58 عصر
در پاسخ به پست 16 : استفاده از combobox در دیتاگرید. و عمل جستجو با توجه به گزینه انتخابی در combobox

ابتدا دو ستون با نام id_kala و name_kala ایجاد کن و ستون id_kala رو از نوع combobox در نظر بگیر
سپس کد زیر رو برای مقدار دادن به گزینه های combobox وارد کن


myconnection.Open()

Dim cmd As New OleDbCommand("Select id_kala from tbkala", myconnection)
Dim dr As OleDbDataReader = cmd.ExecuteReader
While dr.Read

Id_kala.Items.Add(dr("id_kala"))
End While
dr.Close()


و برای اینکه با توجه به کدی که انتخاب شده نام کالای مناسب نمایش داده شود این کد رو تو رویداد CellLeave وارد کن


DGW.EndEdit()
If e.ColumnIndex = 0 Then
Dim idkala As Integer = DGW.Item("id_kala", e.RowIndex).Value
Dim cmd As New OleDbCommand("Select name_kala from tbkala where id_kala='" & idkala & "'", myconnection)
Dim obj As Object = cmd.ExecuteScalar
DGW.Item("name_kala", e.RowIndex).Value = CType(obj, String)
End If


فایل ضمیمه یک نمونه هست. امیدوارم بدرد شما بخوره

ehsan_g
جمعه 06 خرداد 1390, 19:31 عصر
باربد جان ممنون کد خوبی بود ولی یک سوال میشه این کامبو را به یک بایندینگ سورس متصل نمود

barbodsoft.com
شنبه 07 خرداد 1390, 14:56 عصر
در پاسخ به پست 18,16: استفاده از combobox در دیتاگرید. و عمل جستجو با توجه به گزینه انتخابی در combobox


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

می تونی از DataSource و DisplayMember استفاده کنی ولی برای پیدا کردن نام کالا نمی تونی از این دستور مثل اون چیزی که تو combox معمولی استفاده می کردیم استفاده کنی


DGW.Item("name_kala", e.RowIndex).Value = Id_kala.SelectedValue.ToString


برای استفاده از DataSource و DisplayMember به جای کد های برنامه ای که در پست 16 قرار دادم این رو بنویس


Imports System.Data.OleDb

Public Module Module1
Public ConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath & "\DataBase.mdb"
Public myconnection As New OleDb.OleDbConnection(ConnectionString)
End Module

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
myconnection.Open()
Dim da As New OleDbDataAdapter("Select * from tbkala", myconnection)
Dim ds As New DataSet
da.Fill(ds, "tbkala")
Dim dt As DataTable = ds.Tables.Item("tbkala")
Id_kala.DataSource = dt
Id_kala.DisplayMember = "id_kala"
'Id_kala.ValueMember = "name_kala" ' چون برای جستجو کار نمی کند غیر فعال کردم --- فقط جهت اطلاع


End Sub

Private Sub DGW_CellLeave(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DGW.CellLeave
DGW.EndEdit() '
If e.ColumnIndex = 0 Then
Dim idkala As Integer = DGW.Item("id_kala", e.RowIndex).Value
Dim cmd As New OleDbCommand("Select name_kala from tbkala where id_kala='" & idkala & "'", myconnection)
Dim obj As Object = cmd.ExecuteScalar
DGW.Item("name_kala", e.RowIndex).Value = CType(obj, String)

'DGW.Item("name_kala", e.RowIndex).Value = Id_kala.SelectedValue.ToString 'کار نمی کند
End If


End Sub
End Class

barbodsoft.com
شنبه 28 خرداد 1390, 14:52 عصر
ریختن همه اطلاعات دیتاگرید در آرایه


سلام
من برای انجام یکسری کار روی اطلاعات نمایش داده شده در دیتاگرید، نیاز دارم هر رکورد از این اطلاعات که نمایش داده شده رو داخل یکسری متغیر بریزم.
سوال: چه جوری این کار رو بکنم.مثلا هر رکورد دیتاگرید دارای 3فیلد و من هم سه متغییر دارم. چه طور باید یک حلقه for بنویسم که تا زمتنی که رکوردی در دیتا گرید هست. سطر به سطر اطلاعات رو بخونه و داخل این متغییر ها بریزه. و پس از کار مورد نظر دوباره سطر بعدی داخل این متغییرها قرار بگیره.
با تشکر

در کد زیر فرض شده که سه ستون با نام های col1 , col2 , col3 داریم که اولی و آخری از نوع استرینگ هستند. و دومی از نوع اینیجر



Dim Str(DataGridView1.RowCount - 2) As String
Dim int1(DataGridView1.RowCount - 2) As Integer
Dim Str1(DataGridView1.RowCount - 2) As String
For i As Integer = 0 To DataGridView1.RowCount - 2
Str(i) = DataGridView1.Item("col1", i).Value
int1(i) = DataGridView1.Item("col2", i).Value
Str1(i) = DataGridView1.Item("col3", i).Value
Next

نسترن تقی زاده
چهارشنبه 01 تیر 1390, 18:46 عصر
کار بادیتاگرید


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

barbodsoft.com
چهارشنبه 08 تیر 1390, 09:30 صبح
کار بادیتاگرید


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

این که شما می فرمایید مربوط می شه به asp و باید در تالار خودش مطرح بشه.

barbodsoft.com
پنج شنبه 31 فروردین 1391, 15:25 عصر
قفل کردن یک ستون یا سلول با توجه به مقدار سلول دیگر


قفل کردن یکی از سلولهای دیتاگرید

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

کد زیر رو تو رویداد CellEnter دیتاگرید ویو بنویس


If e.ColumnIndex = 0 Then
If DataGridView1.Rows(e.RowIndex).Cells(1).Value > 0 Then
DataGridView1.Columns(0).ReadOnly = True
Else
DataGridView1.Columns(0).ReadOnly = False
End If
Else
If DataGridView1.Rows(e.RowIndex).Cells(0).Value > 0 Then
DataGridView1.Columns(1).ReadOnly = True
Else
DataGridView1.Columns(1).ReadOnly = False
End If
End If

می تونی شماره ستون رو براساس نیازت تغییر بدی

barbodsoft.com
چهارشنبه 06 اردیبهشت 1391, 21:18 عصر
چطور میشه ترتیب نمایش ستون ها رو در دیتاگریدویو تغییر داد؟

ایندکس دیتاگرید ویو readonly هست و بنابراین قابل تغییر نیست(حداقل تا جای که من می دونم) اما شما می تونید از طریق تغییر در خاصیت های هر ستون از جمله هدر ، اندازه ، دیتاپروپرتی و غیر به نوعی به همون خواسته خودت برسی.
کد زیر یک مثال هست




DataGridView1.Columns.Item(0).HeaderText = "نام"
DataGridView1.Columns.Item(0).DataPropertyName = "NAme"
DataGridView1.Columns.Item(0).Width = 80
'*************************************
DataGridView1.Columns.Item(1).HeaderText = "نام خانوادگی"
DataGridView1.Columns.Item(1).DataPropertyName = "Lname"
DataGridView1.Columns.Item(1).Width = 120

hamed shahba
یک شنبه 10 اردیبهشت 1391, 10:08 صبح
سلام دوستان
چطوری میتونم BackColorیه ستون([Columns[x) رو تغییر بدم

barbodsoft.com
یک شنبه 10 اردیبهشت 1391, 13:47 عصر
در پاسخ به پست 25 : تغییر رنگ یک ستون از دیتا گرید ویو


سلام دوستان
چطوری میتونم BackColorیه ستون([Columns[x) رو تغییر بدم

کد پایین دومین ستون دیتاگرید رو به رنک قهوه ای در میاره. در ضمن بجای عدد یک می تونی نام ستون رو هم وارد کنی.


DataGridView1.Columns.Item(1).DefaultCellStyle.Bac kColor = Color.Brown

hamed shahba
دوشنبه 11 اردیبهشت 1391, 13:29 عصر
مشکل در پرینت DGV



سلام دوستان
من با استفاده از کلاس PrintDGVاز دیتا گرید پرینت میگیرم


خوب
حالا یکی از فیلد های جدول از نوعbit هستش که در زمان نمایش مشکلی نداره ولی زمانی که پرینت میگیرم به صورت TRUE و FALSE چاپ میشه

راه حلی برای این مشکل وجود داره:ناراحت:
باتشکر

barbodsoft.com
دوشنبه 11 اردیبهشت 1391, 16:13 عصر
مشکل در پرینت DGV



سلام دوستان
من با استفاده از کلاس PrintDGVاز دیتا گرید پرینت میگیرم


خوب
حالا یکی از فیلد های جدول از نوعbit هستش که در زمان نمایش مشکلی نداره ولی زمانی که پرینت میگیرم به صورت TRUE و FALSE چاپ میشه

راه حلی برای این مشکل وجود داره:ناراحت:
باتشکر

دوست عزیز من این تاپیک رو زدم که از تاپیکها و پست های تکراری جلوگیری کنم و حتی مطالب رو دسته بندی کردم. فهرست رو مطالعه می کزدی نیازی به این سوال نبود

به پست 4 مراجعه کن
پست 4 : آموزش پرینت از دیتاگرید ویو (http://barnamenevis.org/showthread.php?288119-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%AF%DB%8C%D8%AA%D8%A7%DA%AF%D8%B1%DB%8C%D8%AF&p=1268171&viewfull=1#post1268171)

barbodsoft.com
شنبه 23 اردیبهشت 1391, 08:53 صبح
با سلام و خسته نباشید...

سئوال 2:
چطور باید حالت انتخاب رکورد در دیتا گراید رو از این حالت

[http://barnamenevis.org/attachment.php?attachmentid=86960&d=1336760302

به این حالت تبدیل کرد

http://barnamenevis.org/attachment.php?attachmentid=86959&d=1336760302

با تشکر از شما...
قبل از هر چیز این کد رو اجرا کنید. DataGridViewColumnSortMode رو از حالت اتوماتیک باید خارج کرد.


For j As Integer = 0 To DataGridView1.ColumnCount - 1
DataGridView1.Columns(j).SortMode = DataGridViewColumnSortMode.NotSortable
Next



اگر می خواهید یک خط انتخاب شود


DataGridView1.SelectionMode.FullRowSelect()


اگر می خواهید ستون انتخاب شود


DataGridView1.SelectionMode = DataGridViewSelectionMode.FullColumnSelect


اگر می خواهید سلول انتخاب شود


DataGridView1.SelectionMode = DataGridViewSelectionMode.CellSelect

JaVa
شنبه 23 اردیبهشت 1391, 20:36 عصر
با سلام..

من چندتایی رکورد حذف و اضافه کردم/ بعد متوجه شدم که ID از همون شماره های قبل یه بعد شروع می کنه .!

چور میشه این شماره رو از 1 شروع کرد؟

واگه رکوردی رو از بانک حذف کردیم چطور باید بلافاصله ID ها از 1 تا N بصورت کامل باشند منظور اینه که اگر یه بار مثلا رکورد شماره 20 حذف شد بعد از 19 به 21 نریم بلکه جایگزینی صورت بگیره یعنی 19 و20 و 21 . امیدوارم خوب توضیح داده باشم.؟


86983

barbodsoft.com
یک شنبه 24 اردیبهشت 1391, 00:30 صبح
با سلام..

من چندتایی رکورد حذف و اضافه کردم/ بعد متوجه شدم که ID از همون شماره های قبل یه بعد شروع می کنه .!

چور میشه این شماره رو از 1 شروع کرد؟

واگه رکوردی رو از بانک حذف کردیم چطور باید بلافاصله ID ها از 1 تا N بصورت کامل باشند منظور اینه که اگر یه بار مثلا رکورد شماره 20 حذف شد بعد از 19 به 21 نریم بلکه جایگزینی صورت بگیره یعنی 19 و20 و 21 . امیدوارم خوب توضیح داده باشم.؟


86983

این مشکل ربطی به دیتاگرید ویو نداره! مگر اینکه از روشهای ویزاردی استفاده کرده باشی که من اصلا این روشها رو نمی پسندم و اطلاعی ازش ندارم.

و اما از روش کد نویسی . این کد کوچکترین id ی که خالی مونده رو نمایش می ده.
توضیح : من چون از 101 شروع می کنه مقدار اولیه رو 100 در نظر گرفتم. اگه شما از مثالا 1 شروع می کنید باید مقدار اولیه برای i رو 0 دنظر بگیرید.


cmd = New SqlCommand("select id from tableName order by id ", con)
Dim dr As SqlDataReader
dr = cmd.ExecuteReader
Dim i As Integer = 100
While dr.Read
i += 1
If dr("id") > i Then
MsgBox(i)
Exit While
End If

End While
dr.Close()


بهتر بود این سوال رو جای مناسب تری مطرح می کردید

barbodsoft.com
دوشنبه 01 خرداد 1391, 18:40 عصر
نحوه حذف کردن یک سطر


سلام خسته نباشید دوستان

من می خواستم از طریق datagrid یک سطر رو حذف کنم
باید چه کدی استفاده کنم ؟

از کد زیر استفاده کنید . در کد زیر عدد یک یعنی سطر شماره دو و با تغییر این عدد می توانید سطرهای دیگری را حذف نمایید.


DataGridView1.Rows.RemoveAt(1)


و برای اضافه کردن یک سطر از کد زیر استفاده نمایید


DataGridView1.Rows.Add()

mehrdadtk
دوشنبه 01 خرداد 1391, 18:55 عصر
دوست عزیز ممنون،اما فقط در datagrid پاک می شه اما در پایگاه داده پاک نمیشه.
باید چه کنیم ؟

barbodsoft.com
دوشنبه 01 خرداد 1391, 19:01 عصر
دوست عزیز ممنون،اما فقط در datagrid پاک می شه اما در پایگاه داده پاک نمیشه.
باید چه کنیم ؟

این دستور که من نوشتم فقط یک سطر رو از دیتاگرید ویو حذف می کنه. برای حذف از دیتابیس باید دستور delete , sql رو اجرا کنید. که ربطی به دیتاگرید نداره. برای مثال :


Dim cmd As SqlCommand = New SqlCommand("delete table where id='1'", SqlConnection)
cmd.ExecuteNonQuery()

البته ابن یک مثال خیلی ساده بود.

mehrdadtk
دوشنبه 01 خرداد 1391, 19:30 عصر
دوست عزیز ممنونم، فقط یه راهنمایی کوچک SqlConnection ایراد میگیره .:افسرده:

barbodsoft.com
سه شنبه 02 خرداد 1391, 00:50 صبح
پیشنهاد می کنم یک کتاب در مورد بانک اطلاعاتی (ترجیحا sql) و یک کتاب در مورد ADO.net مطالعه کنی.

و اما سوال شما که ربطی هم به این تاپیک نداره SqlConnection رشته اتصال به بانک اطلاعاتی هست. که شما باید در برنامه خود تعریف کنید. اگه بخوام بیشتر توضیح بدم باید یک آموزش کامل ado.net برات بزارم که فکر نمی کنم لازم باشه. چون قبلا دوستان دیگه مفصل آموزش دادن فقط باید سرچ کنی.

این تاپیک هم که یکی از دوستان گذشتن می تونه مفید باشه
دانلود کنید : دستوارت ADO.NET بصورت تفکیک شده (http://barnamenevis.org/showthread.php?31464-%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%DA%A9%D9%86%DB%8C%D8%AF-%D8%AF%D8%B3%D8%AA%D9%88%D8%A7%D8%B1%D8%AA-ADO.NET-%D8%A8%D8%B5%D9%88%D8%B1%D8%AA-%D8%AA%D9%81%DA%A9%DB%8C%DA%A9-%D8%B4%D8%AF%D9%87&highlight=ado.net)

mohammad_y
جمعه 27 مرداد 1391, 22:34 عصر
salam
khaste nashin agha ina hich kodomeshon ba vb 2012 baz namishe peygham support mide'

asal22
جمعه 17 شهریور 1391, 16:17 عصر
خواهشا راهنمایی ام نمایید خیلی فورییییه!!! من یک گریدویو دارم که یک ستون از نوع HyperLinkField دارد که عملیات حذف رو برام انجام میده ولی میخوام قبل از حذف پیغام بده "آیا مطمئن به حذف هستید؟ " و داخل این پیغام دو گزینه "بله" و" خیر " باشه که در صورت فشردن گزینه "بله" این رکورد حذف شود.

swallow.pa
جمعه 17 شهریور 1391, 17:50 عصر
لطفادر مورد كنترل خطاهاي رايج با ديتا
گريد هم مطلبي بنويسيد
ممنون

swallow.pa
پنج شنبه 02 آذر 1391, 23:21 عصر
لطفادر مورد كنترل خطا و يا كنترل ورودي داده ها هم مطالبي بنويسيد
ممنون

barbodsoft.com
سه شنبه 12 دی 1391, 16:15 عصر
لطفادر مورد كنترل خطا و يا كنترل ورودي داده ها هم مطالبي بنويسيد
ممنون

حتما اينكار را خواهم كرد فقط الان چون رو سيستم خودم نيستم و اينجا vb نصب نيست و ... اينشالله فردا ...

barbodsoft.com
شنبه 23 دی 1391, 14:37 عصر
حذف یک سطر از طریق کلیک کردن روی همان سطر (می تونید یک ستون با نام حذف داشته باشید و کاربر روی آن کلیک کند)


خواهشا راهنمایی ام نمایید خیلی فورییییه!!! من یک گریدویو دارم که یک ستون از نوع HyperLinkField دارد که عملیات حذف رو برام انجام میده ولی میخوام قبل از حذف پیغام بده "آیا مطمئن به حذف هستید؟ " و داخل این پیغام دو گزینه "بله" و" خیر " باشه که در صورت فشردن گزینه "بله" این رکورد حذف شود.

اول از همه ببخشید که اینقدر دیر به دیر می یام اینجا




Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick

If e.ColumnIndex = 2 Then
If MessageBox.Show("آیا برای حذف مطمئن هستید؟", "www.barbodsoft.ir", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
Try
DataGridView1.Rows.RemoveAt(e.RowIndex)
Catch ex As Exception
MsgBox("این سطر قابل حذف نیست")
End Try
End If
End If
End Sub



تو کد بالا If e.ColumnIndex = 2 Then چک می کند که برروی ستون مورد نظر (ستون با نام حذف که اینجا ایندکس 2 هست)کلید شده یا نه و دقیقا در سطر بعدی از کاربر پرسیده می شود آیا مطمئن هست برای حذف یا خیر

barbodsoft.com
شنبه 23 دی 1391, 14:50 عصر
کنترل ورودی در دیتاگرید ویو


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

در کد زیر تو سلول اگر کارکتری غیر از اعداد وارد شود اخطار خواهد داد



Private Sub DataGridView1_EditingControlShowing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlSho wingEventArgs) Handles DataGridView1.EditingControlShowing
If Me.DataGridView1.CurrentCell.ColumnIndex > 3 And Not e.Control Is Nothing Then
Dim tb As TextBox = CType(e.Control, TextBox)
AddHandler tb.KeyPress, AddressOf DataGridView1_KeyPress
End If
End Sub

Private Sub DataGridView1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles DataGridView1.KeyPress

If (Char.IsNumber(e.KeyChar) <> True) Then
e.Handled = True
MessageBox.Show("لطفا فقط عدد وارد کنید", "", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
End If
End Sub

samser
پنج شنبه 28 دی 1391, 21:47 عصر
سلام دوستان
من تو پروژم دیتا گریدامو اتو سیز میکنم اما میخوام فیلد اولم با بقیه اندازش فرق کنه میدونم اتو سایز با توجه به اندازه گرید ویو و تعداد ستون هاست...اما من میخوام بجز یک ستون بقیه هم اندازه باشن فقط ستون اول اندازش فرق کنه و بزرگتر باشه...میشه بگید چه جوری میشه این کارو کرد؟ممنون...

swallow.pa
چهارشنبه 30 اسفند 1391, 16:49 عصر
درباره گنترل داده ها که توی دیتاگرید وارد میشن و باید چک بشه که درست وارد شدن یا نه و نمایش پیغام مناسب در هنگام اصلاح رکورد ها و اضافه کردن رکورد جدیدممنون

Mohamad.Net.MSDN
چهارشنبه 30 اسفند 1391, 19:06 عصر
سلام دوستان من توی یه پست هم نوشتم اما کسی حاظر به جواب دادن نشد.

مسئله من اینه که یه برنامه دیکشنری نوشتم با دیتابیس اکسس که دوتا کلومن داره یکی به نام ar و دیگریfa حالا من میخوام وقتی کلمه رو داخل تکست باکس وارد میکنم، سلول حاوی لغت به صورت اتوماتیک داخل یک تکست باکس دیگه کپی بشه!!
تا کاربر بتونه مرتب تر معنی رو ببینه یا در صورت لزوم کپی کنه.
البته در رویداد Textchanged تکست باکس 1 باید بنویسم اما نمیدونم چه کدی باید به کار ببرم که کلومن دوم انتخاب بشه.

Mohamad.Net.MSDN
پنج شنبه 01 فروردین 1392, 02:07 صبح
آقا من سوالم غیر شرعی که نیست بدون اخطار پاکش میکنید:
عزیز من ببین فقط من مشکلم اینه که میخوام سلول کلومن دوم دیتابیس اکسس ام رو که در برنامه دیکشنری و از طریق سرچ در تکست باکس دو انتخاب شده بدون نیاز به کلیک کردن کاربر روی اون داخل تکست باکس 2 نشون داده بشه همین!!!!

Mohamad.Net.MSDN
پنج شنبه 01 فروردین 1392, 02:09 صبح
آقا من سوالم غیر شرعی که نیست بدون اخطار پاکش میکنید:
عزیز من ببین فقط من مشکلم اینه که میخوام سلول کلومن دوم دیتابیس اکسس ام رو که در برنامه دیکشنری و از طریق سرچ در تکست باکس 1 انتخاب شده بدون نیاز به کلیک کردن کاربر روی اون داخل تکست باکس 2 نشون داده بشه همین!!!! :عصبانی++: :عصبانی++: :عصبانی++: :عصبانی++: :عصبانی++: :عصبانی++:

mohsen22
چهارشنبه 04 اردیبهشت 1392, 20:42 عصر
در پاسخ به پست 14 : یک خط در میون رنگی کردن - یک خطه کردن هدر ستون ها
برای یک خطه شدن هدر ستون ها به جای کدی که مستقیم عرض رو تعریف کردی این کد رو بنویس


DGW.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResi zing


برای اینکه یک خط در میون رنگی بشه کد زیر رو بنویس(کد زیر از دو رنگ خاکستری و نقره ای استفاده کرده)


DGW.RowsDefaultCellStyle.BackColor = Color.Gray
DGW.AlternatingRowsDefaultCellStyle.BackColor = Color.Silver


و اما برای اینکه یک فبلد رو حذف کنی باید دستور select رو تغییر بدی به شکل کلی زیر


select fild1,fild2,fild3 from tablename



.

سلام . میخوام آخرین رکوردی که اضافه میشه هم در حالت SELECT باشه (بصورت سطری) و هم به صورت رنگی متفاوت در بیاد . چه باید بکنم؟
مرسی

swallow.pa
جمعه 13 اردیبهشت 1392, 09:52 صبح
دوتاتايپيك خوب دررابطه با ديتاگريد ايجاد شده اما هيچكدوم اين قابليت رو ندارد كه :
يك سلول ديتاگريد كه به دو قسمت تقسيم بشه قسمت اول تكست باكس و قسمت دوم باتن و هنگامي كه روي تكست باكس فوكوس بشه باتن نمايش داده بشه خب حالا ايا اين كار امكان داره

gilsoft
جمعه 13 اردیبهشت 1392, 17:47 عصر
دوتاتايپيك خوب دررابطه با ديتاگريد ايجاد شده اما هيچكدوم اين قابليت رو ندارد كه :
يك سلول ديتاگريد كه به دو قسمت تقسيم بشه قسمت اول تكست باكس و قسمت دوم باتن و هنگامي كه روي تكست باكس فوكوس بشه باتن نمايش داده بشه خب حالا ايا اين كار امكان داره

سلام دوستان

من هم دقیقا دنبال یه همچین چیزی هستم (برای ورود سند حسابداری میخوام)

mohsen22
جمعه 03 خرداد 1392, 21:23 عصر
سلام . چگونه مقادیر همه سلولهای سطری که در دیتا گرید انتخاب شده رو با دبل کلیک به تکست باکسهای فرم دیگری منتقل کنم (تک باکسها در فرم دیگری هستند) مرسی

khaleghi
دوشنبه 08 اردیبهشت 1393, 09:15 صبح
سلام ببخشيد من توي ديتاگريدويو كه توي فرمم هست ميخوام يكي از ستوناش دكمه باشه كه اطلاعات رو تو db ذخيره كنه،ميشه لطف كنيد نحوه نوشت دستورات رو توي دكمه ديتا گريد توضيح بديد و يك نمونه كد برام بذاريد

salami_omid
یک شنبه 20 اردیبهشت 1394, 15:21 عصر
با سلام من نیاز به یک استاد VB دارم که مرا در برنامه هایم راهنمایی کند هزینه آموزش با توافق پرداخت میشود لطفا در صورت تمایل
ایمیل ارسال فرمائید zalami_o@yahoo.com

oranoos
دوشنبه 21 اردیبهشت 1394, 14:20 عصر
با سلام ممنون از اینکه یک تاپیک برای دیتا گرید باز کردید
دوستان اگه لطف کنن و راجع به نحوه ذخیره اطلاعات در دیتا گرید ویو به نحوی که با وارد کردن مقادیر در سلول همان لحظه ذخیره شود توضیح دهند ٰٰ.ممنون میشم
یک مورد دیگه که من با سرچ به نتیجه نرسیدم اینه که با کلیک روی هر ستون مقادیر بر اساس همان ستون مرتب می شوند ولی اگه یک سلول از نوع باتون برای ویرایش وجود داشته باشه اون کد هم اجرا میشه .چطور میشه این مشکل رو حل کرد؟؟؟؟

amirm2012
چهارشنبه 10 تیر 1394, 00:22 صبح
Private Sub DataGridTakhsis()
connect.Open()
Dim DTakh As New OleDbDataAdapter
Dim DTakhset As New DataSet
Dim StrDB As String
StrDB = "SELECT takhnumber as [شماره ],takhDate as [تاریخ ],takhmablaghkol as [مبلغ ],bar01 as [مبلغ 01] "
(Takh = New OleDbDataAdapter(StrDB, connect)
این قسمت خطا میده مشکل چیه؟ ( DTakh.Fill(DTakhset, "takhsis")
( GridViewTakhsis.DataSource = DTakhset.Tables("takhsis")
connect.Close()

End Sub
اینم خطای برنامه
:متفکر::متفکر:No value given for one or more required parameters.

hamidrezax1
پنج شنبه 22 بهمن 1394, 16:39 عصر
سلام من میخوام اطلاعات یک دیتا گرید رو درون یک دیتا گرید دیگه ذخیره کنم چجوری این کار امکان داره؟؟؟؟؟؟
جواب به دست اومده با یه حلقه فور و یک دیتا گردید جدیده.خداییش خودم حوصلم نشد کد هاش رو بنویسم:گریه: