PDA

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



shakilman
دوشنبه 21 مرداد 1392, 09:54 صبح
سلام دوستان
من تاریخ ثبت اطلاعات رو در دیتابیس به صورت میلادی ذخیره کردم
در برنامه یه دیتاگرید ویو دارم که زمان ثبت رو ،نمایش میده
من با استفاده از کد زیر میتونم تاریخ رو از میلادی به شمسی تبدیل کنم


string strSQL = "SELECT * FROM PreStamper WHERE NumOrder = '" + txtOrderReStamper.Text + "'";
SqlDataAdapter da = new SqlDataAdapter(strSQL, con);
con.Open();
da.Fill(ds, "PreStamper");
con.Close();
string date = Convert.ToDateTime(ds.Tables["PreStamper"].Rows[0]["regDateLog"]).ToShortDateString();
Hour.Text = Convert.ToDateTime(ds.Tables["PreStamper"].Rows[0]["regDateLog"]).ToShortTimeString();
System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar();
DateTime dt = DateTime.Parse(date);
DateTest.Text = PersianFunction.NameOfDay(dt) + " " + pc.GetYear(dt) + "/" + pc.GetMonth(dt) + "/" + pc.GetDayOfMonth(dt);


مشکل اینه که این روش فقط تاریخ یک رکورد رو تبدیل میکنه و در تکست باکس نشون میده
و نمی تونم از این روش برای تبدیل همه ی تاریخهای موجود در دیتابیس استفاده کنم و اونها رو در دیتاگرید ویو نشون بدم.
روش دیگه ای هم اگه هست ممنون میشم ارائه بدید.
با سپاس

amir200h
دوشنبه 21 مرداد 1392, 10:02 صبح
راه حل زیاده. میشه قبل از اینکه مقدار دیتاتیبل رو بریزین تو دیتاگرید با یه حلقه for بیاین دونه دونه مقادیر اون ستون رو بگیرین و تبدیل کنین و مقدار تبدیل شده رو بریزین تو همون سطون.
البته بهتره تاریخ رو شمسی ذخیره کنی

hamid_0341
دوشنبه 21 مرداد 1392, 10:04 صبح
اینو قبل از جایی که میخوای کالش کن مشکل حله
http://barnamenevis.org/showthread.php?410944-%DA%A9%D8%A7%D9%85%D9%84-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C%28%D8%B4%D9%85%D8%B 3%DB%8C%29-%D8%B4%D8%AF%D9%86-%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE

shakilman
دوشنبه 21 مرداد 1392, 10:20 صبح
میشه قبل از اینکه مقدار دیتاتیبل رو بریزین تو دیتاگرید با یه حلقه for بیاین دونه دونه مقادیر اون ستون رو بگیرین و تبدیل کنین و مقدار تبدیل شده رو بریزین تو همون سطون.

اگه میشه یه مثال بزنید !
من مقادیر رو به این شکل میریزم تو دیتاگرید

private void dgvOrderfill()
{
try
{
SqlConnection connn = new SqlConnection(@"Data Source=192.168.0.102;Password=branddb123;User ID=branddb;Initial Catalog=BrandDB");
ss.SelectCommand = new SqlCommand();
ss.SelectCommand.Connection = connn;
ss.SelectCommand.CommandText = "SELECT OrderName, DateRecieve,DateDelivered, NumOrder, CountOrder, MakeStamper FROM TblOrder WHERE MakeStamper = 0 And SendOrder = 0";
ss.SelectCommand.CommandType = CommandType.Text;
connn.Open();
ss.Fill(dsds, "TblOrder");
connn.Close();
dgvAddOrder.AutoGenerateColumns = true;
dgvAddOrder.DataSource = dsds;
dgvAddOrder.DataMember = "TblOrder";
ss = null;
}
catch (SystemException ex)
{
MessageBox.Show(ex.Message);
}
}

حالا کجا باید حلقه For رو بزارم و کدش چیه؟
من زیاد روی دیتاگرید ویو تسلط ندارم و نمی دونم برای انتخاب یک ستون باید چه کدی بنویسم که هم تبدیل تاریخ رو انجام بده و سپس اون رو بریزه تو دیتاگرید!:لبخندساده:
بازم ازتون ممنونم بابت زمانی که در اختیار من میگذارید

shakilman
دوشنبه 21 مرداد 1392, 10:24 صبح
اینو قبل از جایی که میخوای کالش کن مشکل حله
http://barnamenevis.org/showthread.p...B1%DB%8C%D8%AE
ممنون از پاسخت ولی با این کد تاریخ میلادی به شمسی تبدیل میشه در صورتیکه مشکل من اینه که نمیتونم یک ستون از دیتاگرید ویو رو یکجا تبدیل کنم.

amir200h
دوشنبه 21 مرداد 1392, 10:31 صبح
با فرض اینکه نام دیتاتیبلت list باشه و خونه ای که تاریخ ها توش نگهداری میکنن خونه 0 باشه کد زیرو بزار
for (int i = 0; i < list.Rows.Count; i++)
{
//tarikho migiri ListeDaro.Rows[i][0].value.Tostring();
//hala ke tarikho gerefti tabdilesh kon be miladi va beriz to ye moteghayer be name date
baed date ro beriz dakhele hamon khone
list.Rows[i][0] =date;

}

shakilman
دوشنبه 21 مرداد 1392, 11:04 صبح
با فرض اینکه نام دیتاتیبلت list باشه و خونه ای که تاریخ ها توش نگهداری میکنن خونه 0 باشه کد زیرو بزار
for (int i = 0; i < list.Rows.Count; i++)
{
//tarikho migiri ListeDaro.Rows[i][0].value.Tostring();
//hala ke tarikho gerefti tabdilesh kon be miladi va beriz to ye moteghayer be name date
baed date ro beriz dakhele hamon khone
list.Rows[i][0] =date;

}

این کد جواب نداد بلد نیستم ازش استفاده کنم:ناراحت:
من اطلاعات رو ریختم توی دیتاست
بعدش چکار کنم که بتونم با حلقه تمام رکوردها رو تبدیل کنم و سپس اونهارو قرار بدم در دیتاگرید ویو؟؟
اگه میشه مبتدیانه تر توضیح بدید ممنون میشم:لبخندساده:

shakilman
سه شنبه 22 مرداد 1392, 09:17 صبح
دوستان مشکل من هنوز حل نشده لطفا مساعدت نمائید!!
خیلی واجبه حل این مشکل، برنامه به خاطر این قضیه راکد مونده

amir200h
سه شنبه 22 مرداد 1392, 09:57 صبح
روشی که بهت گفتم کاملا جواب میده. تستش کردم خودم.
حالا شما نمیخواین تلاش کنین و لقمه آماده میخواین قضیه ش چیز دیگه ایه
موفق باشین...

shakilman
سه شنبه 22 مرداد 1392, 10:11 صبح
دوست عزیز من از کد شما استفاده کردم ولی نتونستم به جوابم برسم
شما از دیتاتیبل استفاده کردید ولی اطلاعات من داخل دیتاست هست و از این کد ایراد میگیره
ds.Rows.Count
یه مسئله دیگه ارتباط ستون دیتاگریدویو با حلقه ای هستش که تبدیل تاریخ روی اون انجام شده؟؟
اگه امکانش هست کمک کنید نه سرزنش !:چشمک:
من تلاشم رو میکنم جستجو هم میکنم و اگه به نتیجه نرسیدم در مرحله آخر از دوستان کمک میگیرم:لبخندساده:

amir200h
سه شنبه 22 مرداد 1392, 10:19 صبح
خوب دیتاست رو تبدیل کن به دیتاتیبل
مقدار تاریخ میلادی رو تو حلقه بکش بیرون بعد کار تبدیل به شمسی رو انجام بده بعد بریز تو همون خونه تاریخ میلادی. ربطی به گرید ویو نمیبینم؟؟؟؟

shakilman
سه شنبه 22 مرداد 1392, 11:16 صبح
امیر آقا دستت درد نکنه درست شد
اینم کدش

private void dgvOrderfill()
{
try
{
SqlConnection connn = new SqlConnection(@"Data Source=192.168.0.102;Password=branddb123;User ID=branddb;Initial Catalog=BrandDB");
SqlCommand cmdd = new SqlCommand("SELECT OrderName , NumOrder , CountOrder, MakeStamper , regDateLog FROM TblOrder", connn);
connn.Open();
cmdd.ExecuteNonQuery();
connn.Close();
SqlDataAdapter daa = new SqlDataAdapter(cmdd);
DataTable dtt = new DataTable();
daa.Fill(dtt);
for (int i = 0; i < dtt.Rows.Count; i++)
{
string date = Convert.ToDateTime(dtt.Rows[i]["regDateLog"]).ToString();
System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar();
DateTime dt = DateTime.Parse(date);
dtt.Rows[i]["regDateLog"] = pc.GetYear(dt) + "/" + pc.GetMonth(dt) + "/" + pc.GetDayOfMonth(dt);
}
dgvAddOrder.AutoGenerateColumns = true;
dgvAddOrder.DataSource = dtt;
daa = null;
}
catch (SystemException ex)
{
MessageBox.Show(ex.Message);
}
}