PDA

View Full Version : رنگ کردن سطر خاصی در tdbgrid



vahidehrafati
چهارشنبه 08 تیر 1384, 19:51 عصر
سلام

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

مثلا اگر یک ستون tdbgrid مبلغ باشد ، سطرهایی که مبلغ آنها صفر است قرمز شوند.

چه کنم؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

ممنون

vahidehrafati
شنبه 11 تیر 1384, 11:15 صبح
چرا کسی کمکم نمی کنه :گیج: :cry:

hadi2345
یک شنبه 12 تیر 1384, 00:01 صبح
با سلام .
اینم کدی که خواسته بودی :



Dim MyStyle As New TrueOleDBGrid80.Style

TDBgrid1.MoveFirst

MyStyle.ForeColor=vbRed
TDBgrid1.Coloumns(1).AddRegexCellstyle 0, MyStyle, "0"
این کد با این فرض هست که ستون شماره 1 شما (یعنی ستون دوم مبلغ هست) .
موفق باشید .

vahidehrafati
یک شنبه 12 تیر 1384, 14:09 عصر
سلام

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

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

بازهم از عنایتتون ممنون :flower:

hadi2345
دوشنبه 13 تیر 1384, 11:59 صبح
با سلام مجدد.
من دیروز نبودم و به همین دلیل کمی دیر شد . شما کاملا صحیح میفرمایید .
من تا عصر یه نمونه برنامه براتون میذارم . الان سرم یه کم شلوغه ......

hadi2345
دوشنبه 13 تیر 1384, 12:34 عصر
با سلام مجدد .


Public Search_Case As Variant
'****************

Private Sub TDBGrid1_FetchRowStyle(ByVal Split As Integer, Bookmark As Variant, ByVal RowStyle As TrueOleDBGrid80.StyleDisp)
Dim rs As ADODB.Recordset
Adodc1.RecordSource = "SELECT * FROM MyTable"
Adodc1.Refresh

Set rs = Adodc1.Recordset.Clone
rs.Bookmark = Bookmark

Select Case Search_Case
Case 1
If rs("price") = 0 Then

RowStyle = "ItemSelected"

End If
End Select
End Sub

'***************

Private Sub cmdSelect_Click()

Dim MyStyle As New TrueOleDBGrid80.Style

TDBGrid1.MoveFirst

Set PrItems = TDBGrid1.Styles.Add("ItemSelected")
PrItems.BackColor = vbBlue
PrItems.ForeColor = vbWhite

Search_Case = 1
TDBGrid1.FetchRowStyle = True

End Sub

'***************

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

vahidehrafati
سه شنبه 14 تیر 1384, 08:36 صبح
سلام

خسته نباشید .

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

سوال : من برنامه ام به این صورته که اگر کاربر روی کلید refresh کلیک کنه Adodc

ای رو که tdbggrid به اون bind شده connect, refresh می کنم . به محض این کار

FetchRowStyle اجرا می شود در این تابع طبق کد شما به تعداد رکورد ها عمل

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

اینکه یکبار tdbgrid ، بایند شده آیا نیاز به اتصال مجدد در FetchRowStyle است ؟ و

سوال سوم اینکه کد cmdclick را کجا بگذارم اگر جایی قبل از refresh شدن بگذارم که

TDBGRID.MOVE First معنا ندارد و اگر در دکمه refresh برنامه ام بگذارم که به محض

refresh شدن ADODC تایع FetchRowStyle اجرا می شود . :گیج:

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

لطفتون رو فراموش نمی کنم :flower:

hadi2345
سه شنبه 14 تیر 1384, 11:05 صبح
با سلام مجدد.
من یه نمونه برنامه براتون گذاشتم که امیدوارم به دردتون بخوره و مشکلاتتون رو رفع کنه ....
در مورد سوال اول : بله حق با شماست و ایراد از کد من بود علتش هم این بود که کد رو خیلی سریع نوشتم و تو این برنامه دیگه این مشکل وجود نداره .
سوال دوم: نه لازم نیست ، با هر بار refresh شدن ، رویداد مورد نظر فراخوانی میشه .
سوال سوم :امیدوارم تو این برنامه ای که گذاشتم مشکلتون رفع بشه .
موفق باشید .

vahidehrafati
سه شنبه 14 تیر 1384, 17:18 عصر
سلام
خیلی خیلی خیلی عالی بود. :reading:

نمی دونم چطوری تشکر کنم .

فقط می گم انشاء ا... همیشه خوش و خرم و موفق و سالم باشید .

وحیده :flower:

hadi2345
چهارشنبه 15 تیر 1384, 05:43 صبح
با سلام.
از اینکه مشکلتون حل شده خوشحالم .
اگر کسی از دوستان مقاله ای راجع به TRUE DBgrid 8.0 داره لطف کنه و اینجا بذاره تا استفاده کنیم . چون قدرت این گرید خیلی عالیه و امکانات جالبی هم داره ....
موفق باشید .