سلام دوستان
میخام از تاریخ شمسی در پروژم استفاده کنم اگه کمکم کنید ممنون میشم
سلام دوستان
میخام از تاریخ شمسی در پروژم استفاده کنم اگه کمکم کنید ممنون میشم
به این آدرس مراجعه کنید
یک راه حل ساده برای استفاده از تاریخ شمسی در دات نت 3.5 به بالا
اینجوری هم استفاده میشه:
string shamsiToday = DateTime.Now.ToShamsi();
DateTime miladiDate = "1389/10/11".ToMiladi();
سلام به نظر من اینم یه راه حله خوبیه
http://www.codeproject.com/Articles/...rsian-DateTime
دوستان اگر بخواهیم در گرید ویو تاریخی که میلادی در پایگاه درج شده رو به شمسی نشون بدیم باید چه کنیم ؟
در رویداد databound از گرید ویو یه حلقه ایجاد میکنی که از صفر تا grid.rows.count-1 بشماره و سطر به سطر بررسی کنه.
System.Globalization.PersianCalendar p = new System.Globalization.PersianCalendar
DateTime d = new DateTime
d = tarikh miladi
p.GetDayOfMonth(d)
p.GetMonth(d)
p.GetYear(d)
با این کار روز و ماه و سال رو به شمسی جداگونه بهت میده.
بعد دوباره تاریخ شمسی رو بنویس به جای تاریخ میلادی گرید:
grid.rows[i].cell[].text=tarikh shamsi
سپاس از شما ، ببخشید اینgrid.rows[i].cell[].text=tarikh shamsi رو کجا باید بنویسم ؟ و اون 4 خط کد آخر را باید داخل حلقه بزارم ؟
کل این کد رو داخل حلقه for بنویسید.
System.Globalization.PersianCalendar p = new System.Globalization.PersianCalendar
DateTime d = new DateTime
d = grid.rows[i].cell[andis mored nazar].text
grid.rows[i].cell[andis mored nazar].text=p.GetDayOfMonth(d)+"/"+p.GetMonth(d)+"/"+p.GetYear(d)
من کد را به این صورت نوشتم اما این خطا رو میده : من کروشه و پرانتز هم گذاشتم اما بازم خطا می دهد : A new expression requires (), [], or {} after type
از تعریف متغیر d خطا می گیره با اینکه کروشه و پرانتز هم دادم ، کدهایی که نوشتم :
protected void GridView1_DataBound(object sender, EventArgs e) {
for (int i = 0; i < ShopGrid.Rows.Count - 1; i++)
{
System.Globalization.PersianCalendar p = new System.Globalization.PersianCalendar
DateTime d =new DateTime;
d=Convert.ToDateTime(ShopGrid.Rows[i].Cells[3].Text);
ShopGrid.Rows[i].Cells[4].Text=p.GetDayOfMonth(d)+"/"+p.GetMonth(d)+"/"+p.GetYear(d);
}
}
دوستان کسی نمی دونه ایراد این کد من از چیه ؟ لطفا راهنمایی کنید که بتونم ازش استفاده کنم
دوست عزیز شما وقتی از یک کلاس یک شی یا اصطلاحا یک نمونه می گیرید دارید متد سازنده اون رو صدا می زنید، پس پرانتزها رو فراموش نکنید.
; آخر خطوط هم فراموش نشه.
کد شما اینطوری اصلاح میشه:
protected void GridView1_DataBound(object sender, EventArgs e)
{
for (int i = 0; i < ShopGrid.Rows.Count - 1; i++)
{
System.Globalization.PersianCalendar p = new System.Globalization.PersianCalendar();
DateTime d =new DateTime();
d=Convert.ToDateTime(ShopGrid.Rows[i].Cells[3].Text);
ShopGrid.Rows[i].Cells[4].Text = p.GetDayOfMonth(d) + "/" + p.GetMonth(d) + "/" + p.GetYear(d);
}
}
ممنونم که جواب دادین ؛ حتما اعلام نتیجه میکنم :)
ممنونم ، درست شد ، اما دیدم سطر آخر گرید رو تبدیل نکرده بوده ، من -1 count رو در حلقه برداشتم . سپاس از شما
آخرین ویرایش به وسیله angel farahani : یک شنبه 10 فروردین 1393 در 23:10 عصر
من کد شما رو از لحاظ سینتکس بررسی کردم، اما ظاهرا اشکال منطقی هم داره.
این کد داره رویداد DataBound برای GridView1 رو مشخص می کنه اما شما دارید داخل گریدویوی ShopGrid رو تغییر می دهید.
کد رو برای رویداد گرید مد نظرتون ست کنید.
پیشنهاد می کنم از رویداد RowDataBound استفاده کنید.
بله اون رو متوجه شدم درست کردم ، فقط یه چیزی من برای گرید گزینه ویرایش گذاشتم ، اون رو که میزنم این خطا رو میده که مربوط به کد شمسی کردن هست ، از اون بخش convert ایراد میگیره
String was not recognized as a valid DateTime.
آخرین ویرایش به وسیله angel farahani : دوشنبه 11 فروردین 1393 در 00:10 صبح
چک کنید ببینید در زمانی که خطا میده چه مقداری رو می خواهد تبدیل کنه که به خطا برمیخوره.
اگر راه حلی پیدا نکردید، کد گرید و کد رویداد رو بذارید.
protected void ShopGrid_RowDataBound(object sender, GridViewRowEventArgs e)
{
for (int i = 0; i < ShopGrid.Rows.Count; i++)
{
System.Globalization.PersianCalendar p = new System.Globalization.PersianCalendar();
DateTime d = new DateTime();
d = Convert.ToDateTime(ShopGrid.Rows[i].Cells[4].Text);
ShopGrid.Rows[i].Cells[4].Text = p.GetDayOfMonth(d) + "/" + p.GetMonth(d) + "/" + p.GetYear(d);
}
}
این کد من هست و از خطd = Convert.ToDateTime(ShopGrid.Rows[i].Cells[4].Text);ایراد می گیره . ممنون میشم راهنماییم کنید
موقعی که تاریخ میلادی رو میخوای درج کنی در دیتابیس از چی استفاده میکنی؟؟
اگه اونجا هم از کلاس datetime استفاده کنی حل میشه.
نوع آن را در پایگاه datetime دادم ، اما بازم ایراد می گیره ، نباید یک جور دیگه convert کنم تا نوع تاریخ رو بشناسه ؟؟؟ ممنونم
در زمان اجرا تریس کنید مقدار ShopGrid.Rows[i].Cells[4].Text رو همینجا بذارید، هر چی که هست از این مقدار هست.
این تیکه کد رو انتخاب کنید و CTRL+D و بعدش CTRL+Q رو بزنید، مقدارش رو داخل Watch نشون میده.
مقدار d رو این نشون میده
{1/1/0001 12:00:00 AM}
تاریخ قبلا در پایگاه درج شده من نوع تاریخ رو به datetime و date تغییر دادم ، که مشکل حل نشد
<asp:GridView ID="ShopGrid" runat="server" AllowPaging="True" AutoGenerateColumns="False" DataKeyNames="shopid" DataSourceID="Shopds" PageSize="4" style="text-align: center" OnRowDataBound="ShopGrid_RowDataBound"> <Columns>
<asp:TemplateField ShowHeader="False" HeaderText="ویرایش و حذف">
<EditItemTemplate>
<asp:Button ID="Button1" runat="server" CausesValidation="True" CommandName="Update" Text="به روز رسانی" />
<asp:Button ID="Button2" runat="server" CausesValidation="False" CommandName="Cancel" Text="لغو" />
</EditItemTemplate>
<ItemTemplate>
<asp:Button ID="Button1" runat="server" CausesValidation="False" CommandName="Edit" Text="ویرایش" />
<asp:Button ID="Button2" runat="server" CausesValidation="False" CommandName="Delete" Text="حذف" Width="51px" OnClientClick="return confirm('آیا از حذف مطمئن هستید؟');" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="shopid" HeaderText="کد" InsertVisible="False" ReadOnly="True" SortExpression="shopid" />
<asp:BoundField DataField="shopname" HeaderText="نام رستوران/فست فود" SortExpression="shopname" />
<asp:TemplateField HeaderText="نوع رستوران" SortExpression="shoptypeid">
<EditItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="shoptypeds" DataTextField="shoptypename" DataValueField="shoptypeid" SelectedValue='<%# Bind("shoptypeid") %>'>
</asp:DropDownList>
<asp:SqlDataSource ID="shoptypeds" runat="server" ConnectionString="<%$ ConnectionStrings:OnlineResturansConnectionString %>" SelectCommand="SELECT * FROM [shoptype]"></asp:SqlDataSource>
</EditItemTemplate>
<ItemTemplate>
<asp:Literal ID="Literal1" runat="server" Text='<%# shoptype(Eval("shoptypeid")) %>'></asp:Literal>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="تاریخ عضویت" SortExpression="registerdate">
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" ReadOnly="True" Text='<%# Bind("registerdate") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("registerdate") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="آدرس" SortExpression="address">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Height="50px" Text='<%# Bind("address") %>' TextMode="MultiLine"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("address") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="phone" HeaderText="شماره تماس" SortExpression="phone" />
<asp:TemplateField HeaderText="جزئیات بیشتر">
<ItemTemplate>
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("shopid", "shopdetail.aspx?id={0}") %>' Text='<%# Eval("shopid", "جزئیات بیشتر") %>' Width="100px"></asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="Shopds" runat="server" ConnectionString="<%$ ConnectionStrings:OnlineResturansConnectionString %>" DeleteCommand="DELETE FROM [shop] WHERE [shopid] = @shopid" InsertCommand="INSERT INTO [shop] ([shopname], [shoptypeid], [registerdate], [address], [phone]) VALUES (@shopname, @shoptypeid, @registerdate, @address, @phone)" SelectCommand="SELECT [shopid], [shopname], [shoptypeid], [registerdate], [address], [phone] FROM [shop] ORDER BY [shopname] DESC" UpdateCommand="UPDATE [shop] SET [shopname] = @shopname, [shoptypeid] = @shoptypeid, [registerdate] = @registerdate, [address] = @address, [phone] = @phone WHERE [shopid] = @shopid">
<DeleteParameters>
<asp:Parameter Name="shopid" Type="Int32" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="shopname" Type="String" />
<asp:Parameter Name="shoptypeid" Type="Byte" />
<asp:Parameter DbType="Date" Name="registerdate" />
<asp:Parameter Name="address" Type="String" />
<asp:Parameter Name="phone" Type="String" />
</InsertParameters>
<UpdateParameters>
<asp:Parameter Name="shopname" Type="String" />
<asp:Parameter Name="shoptypeid" Type="Byte" />
<asp:Parameter DbType="Date" Name="registerdate" />
<asp:Parameter Name="address" Type="String" />
<asp:Parameter Name="phone" Type="String" />
<asp:Parameter Name="shopid" Type="Int32" />
</UpdateParameters>
</asp:SqlDataSource>
Cells[4] گریدویوی شما یک Label داره و در زمان اجرا این لیبل تبدیل به یک span میشه که متن داخلش قرار میگیره. به همین دلیل وقتی شما Cells[4].Text رو میگیرید کل تگ داخلش رو میگیرید.
توی کدتون این تغییر رو بدید ببینید حل میشه:
(چون کدتون در رویداد RowDataBound هست دیگه نیازی به حلقه نیست.)
protected void ShopGrid_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
System.Globalization.PersianCalendar p = new System.Globalization.PersianCalendar();
DateTime d = new DateTime();
d = Convert.ToDateTime(((Label)e.Row.FindControl("Labe l2")).Text);
e.Row.Cells[4].Text = p.GetDayOfMonth(d) + "/" + p.GetMonth(d) + "/" + p.GetYear(d);
}
}
ممنونم که وقت میزارید ، نه مقدارش رو چک کردم همون {1/1/0001 12:00:00 AM} هست و خطای Object reference not set to an instance of an object. رو میده .
دوستان در حالت نمایش گرید ، تاریخ رو شمسی نشون می دهد ، اما چون من در گرید گزینه ویرایش گذاشتم ، اون رو میزنم که رکورد رو ویرایش کنم از کد
d = Convert.ToDateTime(((Label)e.Row.FindControl("Labe l2")).Text);، ایراد می گیره
Object reference not set to an instance of an object.
، حالا من فیلد تاریخ رو readonly کردم که امکان تغییر رو نداشته باشه ولی خوب چرا ایراد از ویرایش می گیره .
واقعا ممنونم که وقت میزارید
الان که read only کردی بازم ایراد میگیره؟؟
اگر می خواهید تاریخ عضویت توسط کاربر تغییر نکند اون رو از حالت ویرایش خارج کنید، کافی است که EditTemplate رو بردارید، اگر خطا داشتید، به جای TextBox از Label استفاده کنید.
ReadOnly کردن تاثیری در موضوع ویرایش ردیف در گریدویو ایجاد نمی کنه. فقط TextBox رو فقط خواندنی می کنه.
ممنونم ، بله Label گذاشتم ، اما باز از خطی که d مقدار می گیره خطا می گیره در هنگام ویرایش کردن
خط آخر RowDataBound رو به این شکل تغییر بدید، ببینید مساله حل میشه:
((Label)e.Row.FindControl("lblDate")).Text = p.GetDayOfMonth(d) + "/" + p.GetMonth(d) + "/" + p.GetYear(d);
اگر جواب نگرفتید خط مربوط به شرط رو تغییر بدید:
if (e.Row.RowType == DataControlRowType.DataRow || e.Row.RowState!=DataControlRowState.Edit)
مورد دیگه ای به ذهنم نمیرسه.
نحوه استفاده از تقویم شمسی در asp.net و نمایش رویداد های خاص
ابتدا به نحوه کلی استفاده از تقویم یا تاریخ شمسی در Asp.net می پردازیم.
در مرحله اول فایل های css، jquery و اسکریپت مورد نیاز را در پروژه اضافه می کنیم:
نحوه کلی استفاده از تاریخ شمسی به صورت زیر می باشد:
هنگامی که روی باکس تاریخ کلیک کنیم، تقویم شمسی به صورت زیر نمایش داده می شود:
اگر بخواهیم مقدار انتخاب شده را در متغیر داشته باشیم و در قسمت کد برنامه از آن استفاده کنیم، میتوانیم از کنترل textbox استفاده کنیم:
در قسمت کد برنامه براحتی تاریخ انتخاب شده از متن textbox قابل دریافت است:
تا اینجا نحوه کلی استفاده از تاریخ شمسی در asp.net را بیان نمودیم. حال میخواهیم تقویم شمسی را به گونه ای تنظیم کنیم که فقط رویدادهایی در تاریخ های خاص قابل انتخاب باشند.
ابتدا می بایست تاریخ رویداد های مورد نظر را در یک لیست داشته باشیم. سپس لیست رویداد ها را به تقویم شمسی متصل نماییم.
- به فراخوانی وب متد قبل از متد GetAllEventDates توجه کنید.
اتصال لیست رویداد ها به تقویم شمسی با استفاده از json به صورت زیر انجام می شود:
حال به وب سایت بازگشته و پس از بارگذاری مجدد صفحه و باز کردن تقویم، مشاهده می کنیم که فقط تاریخ هایی که در لیست رویداد ها موجود بودند قابل انتخاب می باشند.
شما می توانید پروژه ساده انتخاب تاریخ شمسی در asp.net و تنظیم تقویم بر روی تاریخ رویدادهای خاص را از لینک زیر دانلود نمایید:
پروژه انتخاب تاریخ شمسی و نمایش رویداد های خاص