PDA

View Full Version : سوال: تغییر نمایش تاریخ با تغییر فرمت تاریخ در ویندوز 10



csharpdoost
پنج شنبه 14 بهمن 1400, 22:38 عصر
دوستان سلام.
وقتی درتنظیمات تاریخ ویندوز ، فرمت را در حالت انگلیسی یا math windows display قرار میدم ثبت تاریخ در اکسس و نمایش تاریخ در دیتاگرید مشکلی نداره
اما وقتی به persian تغییر میدم طبق تصویر زیر در دیتابیس اکسس به صورت تاریخ فارسی اما به صورت برعکس ثبت میشه و موقع نمایش در دیتاگرید هم بصورت صحیح نشون نمیده. کسی میدونه چطوری میشه درست ثبت و نمایش داد؟ ممنون
153675 153676
موقع ثبت از متد زیر برای تبدیل شمسی به میلادی استفاده میشه :


public DateTime shamsitomiladi_D(string s)
{
string dat, sal, mah, roz;
DateTime ret;
dat = s;
sal = dat.Substring(0, 4);
mah = dat.Substring(5, 2);
roz = dat.Substring(8, 2);
PersianCalendar pc = new PersianCalendar();
ret = pc.ToDateTime(Convert.ToInt32(sal), Convert.ToInt32(mah), Convert.ToInt32(roz), 0, 0, 0, 0);
return ret;
}


موقع نمایش در دیتاگرید هم به صورت زیر اول به string تبدیل و بعد نمایش میده :




public void RefreshGrid()
{

DataTable dt = conct.selectAll_from_Factor(); //Works great

System.Data.DataTable dt2 = new System.Data.DataTable();

dt2.Columns.Add("numfactor", typeof(int));
dt2.Columns.Add("companyname", typeof(string));
dt2.Columns.Add("modirforoush", typeof(string));
dt2.Columns.Add("datefactor", typeof(string));
dt2.Columns.Add("description", typeof(string));

int row = 0;

foreach (DataRow arow in dt.Rows)
{
dt2.Rows.Add();
dt2.Rows[row]["numfactor"] = arow["numfactor"];
dt2.Rows[row]["companyname"] = arow["companyname"];
dt2.Rows[row]["modirforoush"] = arow["modirforoush"];
dt2.Rows[row]["description"] = arow["description"];

string st = conct.miladiToshamsi((DateTime)arow["datefactor"]).ToString();

dt2.Rows[row]["datefactor"] = st;

row++;
}

dataGridView2.DataSource = dt2;;
}

shahryari
شنبه 16 بهمن 1400, 16:50 عصر
سلام
توی گرید ویو ببین بهش فرمت ندادی؟ یا ببین نوع دیتا تایپش چیه؟

csharpdoost
شنبه 16 بهمن 1400, 19:02 عصر
نه توی دیتاگرید هیچ تنظمیاتی وجود نداره. راستی ویندوز 10 هستش. کل موارد در دیتاگرید همینه که دیتاتیبل رو بهش ایمپورت میکنم:

dataGridView2.DataSource = dt2;

ROSTAM2
یک شنبه 17 بهمن 1400, 18:58 عصر
سلام. چرا همون اول بصورت رشته ذخیره نمی کنید؟

csharpdoost
یک شنبه 17 بهمن 1400, 19:18 عصر
سلام. چرا همون اول بصورت رشته ذخیره نمی کنید؟

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

ROSTAM2
یک شنبه 17 بهمن 1400, 22:18 عصر
کد تابع میلادی به شمسی هم ارسال کنید.

تبدیل تاریخ از میلادی به شمسی:



PersianCalendar pc = new PersianCalendar();
DateTime D;
D = new DateTime(2022, 02, 06);

this.Text = String.Format("{0}/{1}/{2}", pc.GetYear(D),pc.GetMonth(D),pc.GetDayOfMonth(D ));