PDA

View Full Version : ایجاد ProgressBar در داخل دینا گرید



hossein-khoshseyar
جمعه 13 آبان 1390, 17:56 عصر
دوستان کسی می تونه من رو راهنمایی کنه که چه طور می تونم یه ستون دیتا گرید رو ProgressBar بزارم

یعنی می خوام یه ستون دیتاگرید تکست باشه بعد هر موقع که خواستم بتونم اون رو به ProgressBar تغییر بدم و بعد از یه مدت زمانی دوباره اون رو به شکل تکست در بیارم
ممنون می شم اگه راهنماییم کنید

Mani_rf
جمعه 13 آبان 1390, 18:35 عصر
اگر به صورت موقت به اون نیاز داری بهترین راه اونه که به خود دیتا گرید یک ProgressBar اضافه کنی و با پیدا کردن مختصات اون سطر و ستون ProgressBar را در جای مورد نظر قرار بدی. حتما میدونی که DataGrideview یک کانتینر است که می تونی به کنترل های اون یک ProgressBar اضافه کنی.

این لینک (http://www.codeproject.com/KB/grid/ProgressBarColumn.aspx) و این لینک (http://social.msdn.microsoft.com/forums/en-US/winformsdatacontrols/thread/769ca9d6-1e9d-4d76-8c23-db535b2f19c2/) هم ممکنه به شما کمک کنه.

hossein-khoshseyar
جمعه 13 آبان 1390, 21:47 عصر
دوست عزیز ممنون از راهنماییت
من این 2 تا لینک رو با سرچ توی گوگل پیدا کرده بودم
مشکل این روش ها اینکه خودشون با گرافیک میان این پروسس بار رو تولید می کنن یعنی در واقه اون یه عکسه
یا روشی که شما گفتید خودش نیاز مند این هست که همیشه مختصات دیتا گرید رو چک بشه و پروسس بار تو جای خودش قرار داده بشه و مثلا اگه کاربر عرض یک ستون رو بخواد تغییر بده.....
پس با این توصیفات یک روش استاندارد برای این کار وجود نداره!؟
یعنی به طور اتوماتیک نمیشه یک ستون دیتا گرید رو به پروسس بار تغییر داد!!

Mani_rf
یک شنبه 15 آبان 1390, 16:03 عصر
این دوتا کلاس را به برنامه اضافه کن :

Public Class ProgressColumn
Inherits DataGridViewColumn
Public Sub New()
MyBase.New(New ProgressCell())
End Sub

Public Overrides Property CellTemplate() As DataGridViewCell
Get
Return MyBase.CellTemplate
End Get
Set
' Ensure that the cell used for the template is a ProgressCell.
If value IsNot Nothing AndAlso Not value.[GetType]().IsAssignableFrom(GetType(ProgressCell)) Then
Throw New InvalidCastException("Must be a ProgressCell")
End If
MyBase.CellTemplate = value
End Set
End Property
End Class

Public Class ProgressCell
Inherits DataGridViewImageCell
Protected Overrides Function GetFormattedValue(value As Object, rowIndex As Integer, ByRef cellStyle As DataGridViewCellStyle, valueTypeConverter As TypeConverter, formattedValueTypeConverter As TypeConverter, context As DataGridViewDataErrorContexts) As Object
' Create bitmap.
Dim bmp As New Bitmap(Me.Size.Width, Me.Size.Height)

Using g As Graphics = Graphics.FromImage(bmp)
' Percentage.
Dim percentage As Double = 0
Double.TryParse(Me.Value.ToString(), percentage)
Dim text As String = percentage.ToString() & " %"

' Get width and height of text.
Dim f As New Font("Verdana", 10, FontStyle.Regular)
Dim w As Integer = CInt(g.MeasureString(text, f).Width)
Dim h As Integer = CInt(g.MeasureString(text, f).Height)

' Draw pile.
g.DrawRectangle(Pens.Black, 2, 2, Me.Size.Width - 6, Me.Size.Height - 6)
g.FillRectangle(Brushes.Blue, 3, 3, CSng((Me.Size.Width - 6) * percentage / 100), Me.Size.Height - 7)

Dim rect As New RectangleF(0, 0, bmp.Width, bmp.Height)
Dim sf As New StringFormat()
sf.Alignment = StringAlignment.Center
g.DrawString(text, f, Brushes.Red, rect, sf)
End Using

Return bmp
End Function


End Class


بعد در فرم لود برنامه این کد ها را بنویس :

Dim col As New ProgressColumn()
dataGridView1.Columns.Add(col)
dataGridView1.AllowUserToAddRows = False
dataGridView1.RowCount = 5
Dim x As Integer = 1
For Each row As DataGridViewRow In Me.dataGridView1.Rows
row.Cells(0).Value = x * 20
x += 1
Next


ستونی از نوع Prgressbar ایجاد میکنه که میتونی مقدار دهی کنی.
هنوز هم به دونبال راه بهتری برای این کار هستم.

Mani_rf
یک شنبه 15 آبان 1390, 16:14 عصر
تا اینجا مطمعن شدم که هر کنترلی که بخواهی را می توانی به عنوان یم سطون اضافه کنی.
در این لینک از MSDN (http://msdn.microsoft.com/en-us/library/7tas5c80.aspx)هم به دیتاگرید یک ستون از نوع DatePicker اضافه کرده که شاید با تغییر دادن اون بتونی به چیزی که می خوای برسی.