PDA

View Full Version : سوال: چرا این کلاس در دیتاست تغییر ایجاد میکند !



TrollWarrior
چهارشنبه 19 خرداد 1389, 19:06 عصر
سلام برای یه برنامه (win app) می خواستم برای کار کردن با تاریخ یه کامپوننت یا همچین چیزی بنویسم که :
1- تاریخ و بصورت شمسی نشان بده و دریافت کنه یعنی به صورت string
2- ولی تاریخ رو تو دیتابیس به صورت میلادی ثبت و دریافت کنه یعنی به صورت DateTime
برای همین این کلاسو نوشتم

class pDateTextBox : TextBox
{
public override string Text
{
get
{
return base.Text;
}
set
{
mildaiDate = shamsitomiladi(value);

}

}
public DateTime mildaiDate
{
get
{
try
{
return shamsitomiladi(base.Text);
}
catch
{

return DateTime.Today;
}
}
set
{
base.Text = getshamsi(value);
}
}
private string getshamsi(DateTime tarikhmiladi)
{
string ShamsiDate = "";
PersianCalendar iraniCalender = new PersianCalendar();
ShamsiDate = iraniCalender.GetYear(tarikhmiladi) + "/";
if (iraniCalender.GetMonth(tarikhmiladi).ToString().L ength == 1) { ShamsiDate = ShamsiDate + "0"; }
ShamsiDate = ShamsiDate + iraniCalender.GetMonth(tarikhmiladi) + "/";
if (iraniCalender.GetDayOfMonth(tarikhmiladi).ToStrin g().Length == 1) { ShamsiDate = ShamsiDate + "0"; }
ShamsiDate = ShamsiDate + iraniCalender.GetDayOfMonth(tarikhmiladi);
return ShamsiDate;
}
private DateTime shamsitomiladi(string tarikhshamsi)
{
PersianCalendar iraniCalender = new PersianCalendar();
string[] _his = tarikhshamsi.Split('/');
return iraniCalender.ToDateTime(int.Parse(_his[0]), int.Parse(_his[1]), int.Parse(_his[2]), 0, 0, 0, 0);

}
}حالا مشکلم اینه وقتی تو یه فرم ازش استفاده میکنم وproperty miladidateبه یه فیلد از دیتاست ام bind میکنم بدون اینکه تغییری بهش بدم باعث میشه همیشه
dataset.HasChanges() برابر true شه :عصبانی++:
بالا غیرتا ایندفه جواب بدید:گریه:

denniz
پنج شنبه 20 خرداد 1389, 20:12 عصر
javab bedid , manam hamin moshkelo daram:عصبانی++::گریه:

TrollWarrior
جمعه 21 خرداد 1389, 12:33 عصر
یه نمونه کد اضافه کردم ,باشد که جواب دهید
50966

zayens
جمعه 21 خرداد 1389, 14:06 عصر
یه سرچ می کردی بد نبود
کامل ترین کلاس برای تقویم شمسی و میلادی و قمری قبلا تو همین سایت اومده بود
این کلاس را به برنامت اضافه کن و از هر قسمتش خواستی استفاده کن
سرچ کنی پیدا می کنی
این یه قسمت از کلاسه PersianDate


using System;
using System.Collections.Generic;
using System.Text;
using System.Globalization;
namespace bebmaxDate
{
publicclasspersianDate
{
privatestring month_name;
privatestring week_name;
privatestring ayyam_name;
privatestring ayyam_name2;
privatestring ayyam_name3;
DateTime mydate;
PersianCalendar mycal = newPersianCalendar();
HijriCalendar hijrical = newHijriCalendar();
public persianDate(DateTime dt)
{
mydate = dt;
}
///<summary>
/// انواع خروجی های فارسی
///</summary>
///<returns></returns>
privatestring hijricalendar()
{
return hijrical.GetDayOfMonth(mydate).ToString() + " / " + hijrical.GetMonth(mydate).ToString() + " / " + hijrical.GetYear(mydate).ToString();
}
privatestring miladicalendar()
{
return mydate.Day.ToString() + " / " + mydate.Month.ToString() + " / " + mydate.Year.ToString();
}
return ayyam_name3 = ayyam_name2 + " - " + ayyam_name;
}

///<summary>
/// ساعت سیستم بصورت اصلاح شده
///</summary>
///<returns></returns>
publicstring time()
{
returnDateTime.Now.Second.ToString() + " : " + DateTime.Now.Minute.ToString() + " : " + DateTime.Now.Hour.ToString();
//throw new System.NotImplementedException();
}
///<summary>
/// کل تقویم شمسی در یک رشته
///</summary>
///<returns></returns>
publicstring taghvim()
{
return ayyam();
}
///<summary>
/// تاریخ شمسی همراه با مصادف ها
///</summary>
///<returns></returns>
publicstring CompletePrsDate()
{
string str;
str = persianweek() + " " + mycal.GetDayOfMonth(mydate).ToString() + " " + persianmonth() + " سال " + mycal.GetYear(mydate).ToString();
str += " مصادف با " + hijricalendar() + " و " + miladicalendar();
return str;
//throw new System.NotImplementedException();
}
///<summary>
/// تاریخ شمسی ساده برای دخیره در دیتابیس
///</summary>
///<returns></returns>
publicstring simpleDate()
{
string strYear = mycal.GetYear(mydate).ToString();
string strMonth = (mycal.GetMonth(mydate).ToString().Length == 1) ? ("0" + mycal.GetMonth(mydate)) : (mycal.GetMonth(mydate).ToString());
string strDay = (mycal.GetDayOfMonth(mydate).ToString().Length == 1) ? ("0" + mycal.GetDayOfMonth(mydate)) : (mycal.GetDayOfMonth(mydate).ToString());
return strYear + "/" + strMonth + "/" + strDay;
}
publicstring GetTimeNow()
{
returnDateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second;
}
publicstring bebDate()
{
string strYear = mycal.GetYear(mydate).ToString();
string strMonth = (mycal.GetMonth(mydate).ToString().Length == 1) ? ("0" + mycal.GetMonth(mydate)) : (mycal.GetMonth(mydate).ToString());
string strDay = (mycal.GetDayOfMonth(mydate).ToString().Length == 1) ? ("0" + mycal.GetDayOfMonth(mydate)) : (mycal.GetDayOfMonth(mydate).ToString());
return strYear.Substring(2, 2) + strMonth + strDay;
}
}
}

zayens
جمعه 21 خرداد 1389, 14:18 عصر
دلم نیومد همه ی کد را نذارم
این هم از کلاس اصلی

TrollWarrior
جمعه 21 خرداد 1389, 14:58 عصر
با تشکر ولی ...
کامل سوال و میخوندی بد نبود
من سوال ام درباره تاریخ فارسی نیست , اگه اون نمونه رو نگاه می کردی متوجه می شدی
مشکل اینه چرا وقتی از کامپوننتی استفاده میکنم که یه property از اونو به یه فیلد از دیتاست bind شده , چرا باعث میشه
وقتی از دیتاست haschanges() میگیری که ببینی کاربر تغییری داده یا نه تا اگر تغییری داده بود عملیات save کردن . انجام بدی, همیشه مقدار اون true هست(بدون اینکه کاربر چیزی رو تغییر بده).