PDA

View Full Version : نوشتن اعداد در dropDownList بصورت فارسی



rahil_2008
سه شنبه 18 اسفند 1388, 11:22 صبح
سلام دوستان
من برای اینکه اعداد را بصورت فارسی نمایش بدم بطور مثال برای عدد 1 از "&#1777" استفاده می کنم. اگر بنویسم: response.write("&#1777")، در مرورگر همانطور که پیش بینی می شود، 1 را نمایش می دهد ولی چنانچه این دستور را بنویسم:


dropDownList1.Items.Add("&#1777");
همان "&#1777" را در dropdownlist نمایش میدهد نه عدد 1 فارسی را؟! شما می دونید چرا؟

naeeme
سه شنبه 18 اسفند 1388, 11:51 صبح
به خاطر اینکه در dropdownlist عین عبارت نمایش داده میشه و تفسیری بر روی عبارت انجام نمی گیره. اگر شما می خواید اعداد فارسی رو نمایش بدین، بهتره کد اسکی عدد رو با کد یونیکد اون جایگزین کنید یعنی:


text = text.Replace("0", ChrW(&H6F0)) ' ۰
text = text.Replace("1", ChrW(&H6F1)) ' ۱
text = text.Replace("2", ChrW(&H6F2)) ' ۲
text = text.Replace("3", ChrW(&H6F3)) ' ۳
text = text.Replace("4", ChrW(&H6F4)) ' ۴
text = text.Replace("5", ChrW(&H6F5)) ' ۵
text = text.Replace("6", ChrW(&H6F6)) ' ۶
text = text.Replace("7", ChrW(&H6F7)) ' ۷
text = text.Replace("8", ChrW(&H6F8)) ' ۸
text = text.Replace("9", ChrW(&H6F9)) ' ۹
و بعد اون رو نمایش بدید

------------------
بعد از ویرایش: من یک اشتباه کوچولو در کد داشتم تصحیحش کردم. این کد جواب میده

h.alizadeh
سه شنبه 18 اسفند 1388, 12:27 عصر
سلام، خوبین؟


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


Dim text As Int16 = 1
DropDownList1.Items.Add(text.ToString.Replace(ChrW (&H661), ChrW(&H6F1)))

بازم انگلیسی نشون میده !

naeeme
سه شنبه 18 اسفند 1388, 15:15 عصر
سلام، خوبین؟


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


Dim text As Int16 = 1
DropDownList1.Items.Add(text.ToString.Replace(ChrW (&H661), ChrW(&H6F1)))

بازم انگلیسی نشون میده !

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

Peyman.Gh
سه شنبه 18 اسفند 1388, 15:15 عصر
فکر کنم منظورتون این باشه

<asp:DropDownList ID="DropDownList2" runat="server"
onselectedindexchanged="DropDownList2_SelectedIndexChanged">
<asp:ListItem>١٣٨٨</asp:ListItem>
<asp:ListItem>٢٠١٠</asp:ListItem>
</asp:DropDownList>

rahil_2008
سه شنبه 18 اسفند 1388, 16:03 عصر
سلام naeeme عزیز
من کد شما رو امتحان کردم chrw را سیستم نمی شناسه؟

naeeme
سه شنبه 18 اسفند 1388, 16:21 عصر
من کد شما رو امتحان کردم chrw را سیستم نمی شناسه؟
ChrW متعلق Microsoft.VisualBasic.Strings هست. اگر شما از C# استفاده می کنید باید تابعی رو پیدا کنید که مقدار یونیکد رو به حرف تبدیل کنه. متاسفانه الان یادم نیست در C# چگونه این کار رو انجام می دن. اما در C# هم می تویند از namespace بالا استفاده کنید که کار جالبی نیست.

Peyman.Gh
سه شنبه 18 اسفند 1388, 17:21 عصر
با بدست آوردن کد اسکی هم میشه :متفکر:


protected void Button1_Click(object sender, EventArgs e)
{
int c;
c = Convert.ToInt32('۳');
Response.Write(c);
}

naeeme
سه شنبه 18 اسفند 1388, 17:32 عصر
با بدست آوردن کد اسکی هم میشه :متفکر:


protected void Button1_Click(object sender, EventArgs e)
{
int c;
c = Convert.ToInt32('۳');
Response.Write(c);
}

اون چیزی که شما نوشتید در واقع کد یونیکد هست نه کد اسکی به همین دلیل شما باید اون رو در داخل int32 ذخیره کنید.
در واقع شما با استفاده از یونیکد عدد رو به صورت فارسی نوشتید( به همین دلیل عدد شما فارسی دیده میشه) و حالا دارید با استفاده از Convert.ToInt32 کد یونیکد اون رو به دست میارید. شما هم درواقع کد من رو نوشتید اما با یک تفاوت که من صراحتا به کد اشاره کردم اما کد شما پنهان از دید برنامه نویس این کار رو انجام میده.
فکر کنم در سی شارپ با استفاده از Convert.ToChar میشه همون کار ChrW رو انجام داد.

Peyman.Gh
سه شنبه 18 اسفند 1388, 17:54 عصر
عزیزم این کدی که من گذاشتم کد اسکی را میده :چشمک:
you can try it

bachebahal_1363
سه شنبه 18 اسفند 1388, 17:58 عصر
چرا اینقدر سختی به خودتون می دید
فقط کافیه وسطای تک asp:dropdownlist متن زیر رو قرار بدید


style='direction:rtl;'

Peyman.Gh
سه شنبه 18 اسفند 1388, 18:21 عصر
چرا اینقدر سختی به خودتون می دید
فقط کافیه وسطای تک asp:dropdownlist متن زیر رو قرار بدید


style='direction:rtl;'

این برای متن درون DropDownList جوابگو نیست.

bachebahal_1363
سه شنبه 18 اسفند 1388, 18:36 عصر
باز امتحان نکرده جواب دادید؟
بابا یه امتحان بکنید ببینید جواب میده یا نه اون موقع بگین جوابگو نیست


<asp:DropDownList ID="DropDownList1" style='direction:rtl;' runat="server">
<asp:ListItem >1</asp:ListItem>
<asp:ListItem >2</asp:ListItem>
</asp:DropDownList>

naeeme
سه شنبه 18 اسفند 1388, 18:36 عصر
باز امتحان نکرده جواب دادید؟
بابا یه امتحان بکنید ببینید جواب میده یا نه اون موقع بگین جوابگو نیست


<asp:DropDownList ID="DropDownList1" style='direction:rtl;' runat="server">
<asp:ListItem >1</asp:ListItem>
<asp:ListItem >2</asp:ListItem>
</asp:DropDownList>


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


عزیزم این کدی که من گذاشتم کد اسکی را میده :چشمک:
you can try it
من زیاد نمی خوام این تاپیک رو ادامه بدم. اما در جواب شما:
خروجی کد شما هست 1779. این رو که قبول دارید؟ در مبنا 16 این مقدار برابر هست با 6F3. حتما این رو هم قبول دارید. و این رو هم حتما قبول دارید که کدهای اسکی از 0 تا 255 هستند. پس نتیجه این بحث این که:
1) 1779 کد اسکی نیست بلکه UNICODE هست
2) اگر در کدهای من نگاه کنید &H6F3 معادل عدد 3 هست.
3) کد نوشته شده توسط شما صورت دیگه ای از کد من هست!!!
4) فقط در یک صورت می تونید این موارد رو قبول نداشته باشید و اون هم اینکه ویندوز شما تمام اعداد رو به صورت فارسی نمایش میده اما در موقع اجرا از حالت انگلیسی استفاده می کنه!!

و فکر کنم که این تاپیک به نتیجه رسیده و نیازی به ادامه اون نیست.

rahil_2008
چهارشنبه 19 اسفند 1388, 19:01 عصر
من با namespace ای که گفتین (Microsoft.VisualBasic.String) امتحان کردم. عبارت strings را نمی شناسه؟
در ضمن دنبال تابع تبدیل کد اسکی به یونیکد تو C#‎‎ هم گشتم ولی چیزی دستگیرم نشد. اگه کسی تابعشو می شناسه لطفا راهنمایی کنید
ضمنا همون طور که naeeme گفت من میخوام کدی بنویسم که در تمام حالات ، چه ویندوز روی فارسی تنظیم شده باشه چه تنظیم نشده باشه اعداد در کمبوباکس بصورت فارسی نمایش داده بشه وگرنه از همون direction=rtl استفاده می کردم.

Milad Mohseny
چهارشنبه 19 اسفند 1388, 22:02 عصر
دنبال تابع تبدیل کد اسکی به یونیکد تو C#‎‎‎‎‎ هم گشتم ولی چیزی دستگیرم نشد.
http://gaaton.blogspot.com/2007/04/convert-ascii-to-unicode-in-c.html

Peyman.Gh
چهارشنبه 19 اسفند 1388, 22:14 عصر
باز امتحان نکرده جواب دادید؟
بابا یه امتحان بکنید ببینید جواب میده یا نه اون موقع بگین جوابگو نیست


<asp:DropDownList ID="DropDownList1" style='direction:rtl;' runat="server">
<asp:ListItem >1</asp:ListItem>
<asp:ListItem >2</asp:ListItem>
</asp:DropDownList>

حتماً امتحان کردم که این حرف رو زدم :لبخندساده:

Milad Mohseny
چهارشنبه 19 اسفند 1388, 22:28 عصر
براي نمايش اعداد داخل drp ببينيد اين مثال مقبول دوستان خوبم ميافته يا نه.
protected void Page_Load(object sender, EventArgs e)
{
DropDownList1.Items.Add(PersianNum("1388"));
DropDownList1.Items.Add(PersianNum("13A88"));
DropDownList1.Items.Add(PersianNum("13B88"));
DropDownList1.Items.Add(PersianNum("علي"));
}
public static string PersianNum(string txt)
{
if (txt == null || txt == "") return string.Empty;
string num = txt;
char[] temp = new char[num.Length];
int intCounter = 0;
Array.ForEach<char>(num.ToCharArray(), ch =>
{
if (char.IsDigit(ch))
temp[intCounter++] = (char)((int)ch + 1728);
else
temp[intCounter++] = ch;
});
return new string(temp).Trim('\0');
}
در آخر از دوست خوبم Saber_Fatholahi تشكر ميكنم چون تابع بالارو با الهام گرفتن از مثال وب سايتي (http://barnamenevis.org/forum/showthread.php?t=124503) كه ايشون گذاشتند، نوشتم.

rahil_2008
جمعه 21 اسفند 1388, 21:35 عصر
سلام milad mohseni عزیز
ممنون از توجهتون
کد اول پیشنهادیتون را چک کردم نوع encoding را نمی شناسه. نمی دونم encoding در کدوم namespace قرار داره ؟
کد دومی هم با دو تا پیام خطا مواجه شد:

Error 1 Since 'System.Action<char>' returns void, a return keyword must not be followed by an object expression C:\Documents and Settings\z\My Documents\Visual Studio 2008\WebSites\WebSiteTasdighi6\UserControls\Persia nCalender.ascx.cs 136 13 C:\...\WebSiteTasdighi6\



Error 2 Cannot convert lambda expression to delegate type 'System.Action<char>' because some of the return types in the block are not implicitly convertible to the delegate return type C:\Documents and Settings\z\My Documents\Visual Studio 2008\WebSites\WebSiteTasdighi6\UserControls\Persia nCalender.ascx.cs 136 13 C:\...\WebSiteTasdighi6\

Milad Mohseny
جمعه 21 اسفند 1388, 22:14 عصر
کد اول پیشنهادیتون را چک کردم نوع encoding را نمی شناسه. نمی دونم encoding در کدوم namespace قرار داره ؟
در System.Text قرار داره يعني اينو به اولش اضافه كن
using System.Text;


مشكل دومت حتماً از جاي ديگس من همين الان اون كدي كه گذاشتم رو سمت سرور يه page كپي كردم و يه drp هم روي page انداختم. نتيجه رو در ضميمه ببين. :)
يه پروژه جديد ايجاد كن و امتحانش كن. :)