PDA

View Full Version : چطور سلول ديتاگريد رو عددي كنم



swallow.pa
پنج شنبه 07 آبان 1394, 20:23 عصر
دوستان سلام
مي خوام يكي از سلولهاي ديتاگريد عددي بشه كه كاربر فقط عدد وارد كنه و رشته رو نپذيره و همچنين بعد از وارد كردن عدد و خروج از سلول مربوطه سه رقم سه رقم نمايش داده بشه بشرطي كه بتونم تو ديتابيسي كه اون فيلد عدديه ذخيره كنم يعني سه رقم سه رقم هم كه شد ديتا عددي باشه نه رشته اي
چطور انجام بدم؟
ممنونم

MortezaZandi
شنبه 16 آبان 1394, 04:56 صبح
سلام
از اونجایی که این داده های پولی درنهایت در پایگاه داده ذخیره خواهند شد و اینکه در آینده به محاسبات درونی توسط پایگاه داده بر روی این ارقام نیاز خواهید داشت ذخیره حروف جداساز مبالغ پولی مانند کاما در بانک اطلاعات معقول نمی باشد و از طرفی تنها نوع داده ای که برای ذخیره ارقام پولی در بانک های اطلاعاتی استفاده میشود معمولا فقط اعداد شناور یا همان ممیزدار هستند که شما را به منظورتان نمی رساند ، بنابراین بهتر است این رقم سازی اعداد را فقط هنگام نمایش به کاربر انجام دهید و هنگامی که قصد ذخیره در بانک اطلاعات دارید آنها را از حالت رقم گذاری شده خارج نمایید. من دو تابع سبک برای این کار به شما معرفی میکنم که حتی میتوانید از آنها بخوبی در رویداد TextChange کنترل های ورودی مانند TextBox استفاده نمایید.

برای گروه بندی سه رقم سه رقم اعداد مانند مبلغ پول از دو تابع زیر یکی برای گروه بندی و دیگری برای پاک کردن علائم گروه بندی مانند کاما از مبلغ استفاده کنید
این کد به زبان VB نوشته شده:



Private Function EeasyMoney (ByVal StrPrice As String) As String

Dim str As String = ""
Dim ln As Integer = 0

StrPrice= StrPrice.Replace(",", "")
StrPrice= StrReverse(StrPrice)

For i = 0 To StrPrice.Length - 1
str &= StrPrice.Substring(i, 1)
ln += 1
If ln = 3 And i <> StrPrice.Length - 1 Then
ln = 0
str &= ","
End If
Next

str = StrReverse(str)
Return str

End Function



Public Function NormalMoney(ByVal StrPrice As String) As Long
Try
Dim Str As String

Str = Strings.Replace(StrPrice, ",", "")

Return Val(Str)

Catch ex As Exception
'alert here
End Try
End Function




هنگامی که میخواهید عددی را به صورت ارقام پولی نمایش دهید از تابع EasyMony استفاده نمایید و هنگامی که قصد دارید یک رقم کاما گذاری شده پولی را به عدد معادل آن تبدیل کنید از تابع NormalMony استفاده نمایید.
نحوه استفاده از دو تابع فوق برای دریافت ورودی به صورت ارقام پولی:



Public Sub PoolText(ByRef Obj As Object)
Try

Obj.text = EeasyMoney (Obj.text)

Obj.focus()

Obj.SelectionStart = Strings.Len(Obj.text)

Catch ex As Exception
End Try

End Sub


Private Sub TxtjameKol_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TxtjameKol.TextChanged

PoolText(TxtjameKol)

End Sub





در خصوص دریافت ورودی به صورت عددی از دیتاگرید ، لطفا ذکر کنید از چه ستونی یا سلولی قصد دارید عدد دریافت کنید. از ستون خاصی یا از مثلا سلول سوم همه سطور؟