PDA

View Full Version : نحوه عوض کردن تاریخ میلادی به شمسی بعد از گرفتن از دیتابیس؟



saeed_sho
یک شنبه 15 آبان 1390, 19:15 عصر
سلام
احتیاج به راهنمایی فوری دارم اگه میتونید لطفا راهنمایی کنید
یه دیتابیس دارم که اطلاعات بصورت فارسی ذخیره میشه
collation
اون از نوع
persian_100_ci_as
اطلاعات بصورت فارسی ذخیره میشه بجز تاریخ که باید میلادی باشه و شمسی قبول نمیکنه
اطلاعات توی دیتاگرید ویو نمایش داده میشه میخوام تاریخ رو فارسی نمایش بدم بهترین راه چیه ؟
تاریخ رو میلادی از دیتابیس میگیرم کجا و چطوری اونو تبدیل کنم به شمسی چطریشو بلدم با چند تا تابع اما کجا شو نمیدونم در ضمن از اس کیو ال کامند استفاده میکنم
فکر کنم باید توی خوده دیتاگریدویو و قسمت فرمت بندی این کارو بکنم
عین این مشکل توی گزارش گیری هم هست با استیمال سافت ریپورت میشه تاریخی که از دیتابیس میگیرمو شمسی کنم؟
ممنون میشم اگه زود راهنماییم کنید

Hossis
دوشنبه 16 آبان 1390, 15:10 عصر
بهترین راه، استفاده ازاین کد برای تبدیل تقویم به شمسی هست


Dim x As New System.Globalization.PersianCalendar
Private Function GetNemeWeek(ByVal Emrooz As Date) As String
Select Case Emrooz.DayOfWeek
Case DayOfWeek.Friday: Return "جمعه"
Case DayOfWeek.Monday: Return "دوشنبه"
Case DayOfWeek.Saturday: Return "شنبه"
Case DayOfWeek.Sunday: Return "يکشنبه"
Case DayOfWeek.Thursday: Return "سه شنبه"
Case DayOfWeek.Wednesday: Return "چهارشنبه"
Case DayOfWeek.Thursday: Return "پنجشنبه"
End Select
End Function

Private Function GetNemeMonth(ByVal Emrooz As Date) As String
Select Case Emrooz.Day ' .DaysInMonth(x.GetYear(Now), x.GetMonth(Now))
Case 1: Return "فروردين"
Case 2: Return "ارديبهشت"
Case 3: Return "خرداد"
Case 4: Return "تير"
Case 5: Return "مرداد"
Case 6: Return "شهريور"
Case 7: Return "مهر"
Case 8: Return "آبان"
Case 9 : Return "آذر"
Case 10 : Return "دي"
Case 11 : Return "بهمن"
Case 12 : Return "اسفند"
End Select
End Function

Private Sub Frm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load, Me.Click
Me.Text = GetNemeWeek(Now) & x.GetDayOfMonth(Now) & GetNemeMonth(Now) & x.GetYear(Now)
nd Sub

اما قسمت دوم سوال اصلا مفهوم نیست

saeed_sho
دوشنبه 16 آبان 1390, 22:12 عصر
ممنونم
اما برنامم سی شارپ از این کد استفاده میکنم ارور میده
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
for (int i = 0; i <= dataGridView1.Rows.Count; i++)
{
string d = Convert.ToString(dataGridView1.Rows[idValue].Cells[5].Value);
string sh = Shamsi(d);
dataGridView1.Rows[i].Cells[5].Value = sh;
}
}
string Shamsi(string miladi)
{
DateTime dt = DateTime.Parse (miladi);
PersianCalendar p = new PersianCalendar();
return p.GetYear(dt) + "/" + p.GetMonth(dt) + "/" + p.GetDayOfMonth(dt);
}

Hossis
دوشنبه 16 آبان 1390, 22:24 عصر
ممنونم
اما برنامم سی شارپ از این کد استفاده میکنم ارور میده
خوب باید این سوال رو در بخش سی شارژ مطرح کنید
من خیلی دستور زبانش رو بلد نیستم

saeed_sho
دوشنبه 16 آبان 1390, 22:32 عصر
فرقی نداره اونجام مطرح کردم با وی بی شما توضیح بدید

Mani_rf
دوشنبه 16 آبان 1390, 22:52 عصر
ممنونم
اما برنامم سی شارپ از این کد استفاده میکنم ارور میده
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
for (int i = 0; i <= dataGridView1.Rows.Count; i++)
{
string d = Convert.ToString(dataGridView1.Rows[idValue].Cells[5].Value);
string sh = Shamsi(d);
dataGridView1.Rows[i].Cells[5].Value = sh;
}
}
string Shamsi(string miladi)
{
DateTime dt = DateTime.Parse (miladi);
PersianCalendar p = new PersianCalendar();
return p.GetYear(dt) + "/" + p.GetMonth(dt) + "/" + p.GetDayOfMonth(dt);
}

errorی که میده چیه؟

saeed_sho
سه شنبه 17 آبان 1390, 11:20 صبح
کدمو عوض کردم این کدمه اول درست کار میکنه و شمسی میکنه اما حلقه for بینهایت میشه و هی با مقدار خالی قبلیارم جایگزین میکنه و ادامه پیدا میکنه و قطع نمیشه
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
for (int i = 0; i <= dataGridView1.Rows.Count-1; i++)
{
string d = Convert.ToString(dataGridView1.Rows[i].Cells[5].Value);
string sh = PersionDate(d);
dataGridView1.Rows[i].Cells[5].Value = sh;
}
}
public string PersionDate(string miladi)
{
try
{

PersianCalendar jc = new PersianCalendar();
DateTime thisDate = DateTime.Parse(miladi);
string day;
string month;
string year;
string newdate = "";
day = jc.GetDayOfMonth(thisDate).ToString();
month = jc.GetMonth(thisDate).ToString();
year = jc.GetYear(thisDate).ToString();
if (int.Parse(day) < 10)
{
day = "0" + day;
}
if (int.Parse(month) < 10)
{
month = "0" + month;
}
newdate = year + "/" + month + "/" + day;

return newdate;
}
catch (Exception)
{

}
return "";
}

saeed_sho
سه شنبه 17 آبان 1390, 18:35 عصر
چطوری فرمت یکی از ستون های دیتا گرید ویو رو عوض کنم مثلا تاریخ میلادی رو به فارسی با این حلقه اما اینو کجا بزنم تا کار کنه توی cellFormatting میذارم حلقه بینهایت میشه توی متد لود فرم گذاشتم بازم بینهایت شد کجا بذارمش؟
string PersionDate(string miladi)
{
try
{

PersianCalendar jc = new PersianCalendar();
DateTime thisDate = DateTime.Parse(miladi);
string day;
string month;
string year;
string newdate = "";
day = jc.GetDayOfMonth(thisDate).ToString();
month = jc.GetMonth(thisDate).ToString();
year = jc.GetYear(thisDate).ToString();
if (int.Parse(day) < 10)
{
day = "0" + day;
}
if (int.Parse(month) < 10)
{
month = "0" + month;
}
newdate = year + "/" + month + "/" + day;

return newdate;
}
catch (Exception)
{

}
return "";
}

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
string d = Convert.ToString(dataGridView1.Rows[i].Cells[5].Value);
string sh = PersionDate(d);
dataGridView1.Rows[i].Cells[5].Value = sh;
}
}

Hossis
سه شنبه 17 آبان 1390, 19:18 عصر
از حلقه For Each استفاده کنید
تو وی بی من این طور استفاده می کنم
For Each R As datagridviewrow in dgv.rows
dim D as String =R.cells(5).value
dim Sh As string =persianDate(d)
string d = Convert.ToString(dataGridView1.Rows[i].Cells[5].Value);
next

saeed_sho
سه شنبه 17 آبان 1390, 20:40 عصر
دوست عزیز
پیشنهادت خیلی خوبه ممنونم ازت
اما برای خط اخر کدم که دیتاگرید ویو مقدار عوض شده رو پس میگیره اون i چکارش کنم چطوری مشخص کنم بدون i کدوم ردیفه؟

saeed_sho
سه شنبه 17 آبان 1390, 21:49 عصر
این حلقه for each کجا استفاده کنم من توی cellformatting_datagridview استفاده میکنم جواب نمیده شما توی کدوم تابع استفاده میکنید؟

Hossis
سه شنبه 17 آبان 1390, 23:21 عصر
این حلقه for each کجا استفاده کنم من توی cellformatting_datagridview استفاده میکنم جواب نمیده شما توی کدوم تابع استفاده میکنید؟

کدی که خطا می داد کدوم بود؟؟ معرفی کنید تا من درستش کنم
در ضمن این For Each رو من به جای حلقه For I=0 to dgv.rowcount-1 معرفی کردم

saeed_sho
پنج شنبه 19 آبان 1390, 10:33 صبح
مشکلم حل شد ممنونم