PDA

View Full Version : فرمت بندی اشتباه تاریخ در دیتاگرید



alef.divar
چهارشنبه 10 اردیبهشت 1393, 07:55 صبح
سلام
من تو بانک تاریخ ها رو با type تاریخ(date) ذخیره کردم حالا میخوام اونارو زمان نمایش به کاربر شمسی کنم.
برای اینکار چنیم کدی نوشتم:

DateTime TimeMiladi;
System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar();
int Y, M, D;
for (int i = 0; i < DS.Tables["tblUser"].Rows.Count; i++)
{
TimeMiladi = (DateTime)(DS.Tables["tblUser"].Rows[i][0]);
D = pc.GetDayOfMonth(TimeMiladi);
M = pc.GetMonth(TimeMiladi);
Y = pc.GetYear(TimeMiladi);
DS.Tables["tblUser"].Rows[i][0] = Y.ToString() + "/" + M.ToString() + "/" + D.ToString();
}
this.GridView1.DataSource = DS;
this.GridView1.DataMember = "tblUser";
this.GridView1.DataBind();
this.GridView1.Visible = true;



ولی تو دیتا گرید یه این صورت نمایش داده میشود: " سال/روز/ماه "در صورتی که باید اینچنین نمایش داده شود : "روز/ماه/سال"

kohyar
چهارشنبه 10 اردیبهشت 1393, 08:32 صبح
فیلد مربوطه رو که فیلد تاریخ رو بهش بایند کردی تبدیل به Template Field کن و بعد برو تو کد اچ تی ام ال .همونجایی که تاریخ رو تو لیبل نمایش میده از تگ
<span dir="ltr"></span> استفاده کن. بعبارت دیگر لیبل که واسه نمایش تاریخ هست رو توی این تگ قرار بده
موفق باشی

alef.divar
چهارشنبه 10 اردیبهشت 1393, 11:49 صبح
ممنون از کمکت ولی با این کار فقط سمت کل متن تغییر کرد جای روز و ماه همون طوره:

10/15/1392 12:00:00 ق.ظ

فک کنم باید فرمت بندی کنم فیلد رو (YYYY/MM/DD) اما نمیدونم چطور؟

alef.divar
جمعه 12 اردیبهشت 1393, 19:22 عصر
دوستان، کسی نمیتونه راهنمایی کنه؟

alef.divar
شنبه 13 اردیبهشت 1393, 07:56 صبح
دوستان به این شکل درست شد:
همون طور که kohyar فیلد رو تبدیل به Template Field کردم و به این صورت فرمت بندی کردم:

<span dir="rtl" style="text-align:right; direction:rtl;"><asp:Label ID="Label1" runat="server" Text='<%#((DateTime)Eval("sabt_Tarikh")).ToString("yyyy/MM/dd") %>'></asp:Label></span>

kohyar
شنبه 13 اردیبهشت 1393, 13:58 عصر
عزیزم
dir="LTR" قرار بده

alef.divar
چهارشنبه 04 تیر 1393, 09:51 صبح
عزیزم
dir="LTR" قرار بده

قراردادم درست نشد.
حالا با فرمت بندی ای که انجام دادم هم بر به مشکل خوردم
و مشکل اینه که تاریخ 1393/02/30 رو معتبر نمیدونه چون ماه دوم میلادی که feb است 28 روزی یه.
لطفا راهنمایی کنید.

amir_T_2008
پنج شنبه 05 تیر 1393, 01:27 صبح
قراردادم درست نشد.
حالا با فرمت بندی ای که انجام دادم هم بر به مشکل خوردم
و مشکل اینه که تاریخ 1393/02/30 رو معتبر نمیدونه چون ماه دوم میلادی که feb است 28 روزی یه.
لطفا راهنمایی کنید.


using System.Globalization;


static PersianCalendar persianCalendar = new PersianCalendar();
public static string ToShamsi(DateTime miladiDate)
{
string year = persianCalendar.GetYear(miladiDate).ToString();
string month = persianCalendar.GetMonth(miladiDate).ToString().Pa dLeft(2, '0');
string day = persianCalendar.GetDayOfMonth(miladiDate).ToString ().PadLeft(2, '0');
string hour = persianCalendar.GetHour(miladiDate).ToString();
string minutes = persianCalendar.GetMinute(miladiDate).ToString();
string second = persianCalendar.GetSecond(miladiDate).ToString();
return year + "/" + month + "/" + day + " - " + hour + ":" + minutes + ":" + second;
}


و بعد در کد فراخانی کنید


<asp:Label ID="name id" runat="server" Text='<%# ToShamsi(Convert.ToDateTime(Eval("name id")))%>'

موفق باشید

alef.divar
پنج شنبه 05 تیر 1393, 08:58 صبح
ممنون از پاسخت دوست عزیز اما من این روش رو هم چک کردم بازم.
مشکل این روش اینه که وقتی تاریخی مثل 1390/102/30 رو به grid میفرستیم زمان تبدیل به date چون ماه دوم میلادی (feb) بیست و هشت روزی است تبدیل با خطا صورت میگیره و سایت error میده.
برای جلوگیری از این روش بهتره typeof ستون تاریخ در DS رو عوض کنیم به String که اینم چون پس از fill شدن DS نمیشه type ستون رو عوض کرد بر به مشکل میخوریم و تنها راه اینه که یه ستون با typeof string به DS اضافه کنیم و با یه حلقه مقادیر درون ستون میلادی رو بخونیم و درون اون بریزیم البته از نوع string و در نهایت ستون شمسی رو bind کنیم.
اما من دنبال یه روش با حجم پردازش کمتر هستم.