مرجع تخصصی برنامه نویسان

بزرگترین انجمن برنامه نویسان فارسی زبان

مشکل نمایش ستون database در DataGridView

دوشنبه, 02 اردیبهشت 1398 13:37

مشکل نمایش ستون database در DataGridView

سلام ، چطوری میتونم یک ستون تاریخ میلادی رو در دیتا بیس SQL رو بصورت convert شده در DataGridView نمایش بدم ؟

الان این کد دینا رو میگیره و کل دیتا بیس رو در datagridveiw نمایش میده ، ولی ستون تاریخ تولد به میلادی هست و میخوام ستون birthday تبدیل به تاریخ شمسی بشه موقع نمایش..


 
SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["conStr"].ConnectionString);
string query = "select name,family,melliNo,birthday,MobileNo,homeNo,job,comment from Tbl_personal;";
SqlCommand command = new SqlCommand(query, connection);
SqlDataAdapter da = new SqlDataAdapter(command);
DataTable dp = new DataTable();
da.Fill(dp);
grdPersonList.DataSource = dp.DefaultView;
this.grdPersonList.ColumnHeadersDefaultCellStyle.Font = new Font(this.grdPersonList.ColumnHeadersDefaultCellStyle.Font, FontStyle.Bold);
this.grdPersonList.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;
grdPersonList.Columns[0].HeaderText = "نام";
this.grdPersonList.Columns[1].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;
grdPersonList.Columns[1].HeaderText = "نام خانوادگی";
grdPersonList.Columns[2].HeaderText = "کد ملی";
grdPersonList.Columns[3].HeaderText = "تاریخ تولد";
grdPersonList.Columns[3].DefaultCellStyle.Format = "yyyy/MM/dd";// اینجا میخوام این ستون بصورت شمسی نمایش بده ==> ولی میلادی هست
grdPersonList.Columns[4].HeaderText = "شماره تلفن همراه";
grdPersonList.Columns[5].HeaderText = "شماره تلفن ثابت";
this.grdPersonList.Columns[6].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;
grdPersonList.Columns[6].HeaderText = "شغل";
this.grdPersonList.Columns[7].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;
grdPersonList.Columns[7].DefaultCellStyle.ForeColor = Color.Red;
grdPersonList.Columns[7].HeaderText = "توضیحات";

دوشنبه, 02 اردیبهشت 1398 14:52
ﺳﻪ شنبه, 03 اردیبهشت 1398 11:11

من از Culture استفاده کردم و مشکلم حل شد ، ولی نمیدونم چرا روی سیستم خودم مشکل نداره هم لپ تاپ و هم کامپیوتر شخصیم ، ولی روی کامپیوتر مشتری خطا داره و فقط Culture رو خطا میگیره .. .netFrame Work 4.8 هم داره 

 CultureInfo info = new CultureInfo("fa-Ir")
                {
                    DateTimeFormat = {Calendar = new PersianCalendar()}
                };
                Thread.CurrentThread.CurrentCulture = info;

روی سیستم مشتری این خطا رو میده : 

not a valid calendar for the given culture.parameter name: value

ﺳﻪ شنبه, 03 اردیبهشت 1398 12:42

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


            System.Globalization.CultureInfo calture = new System.Globalization.CultureInfo("fa-Ir");
            System.Globalization.DateTimeFormatInfo info = calture.DateTimeFormat;
            info.AbbreviatedDayNames = new string[] { "ی", "د", "س", "چ", "پ", "ج", "ش" };
            info.DayNames = new string[] { "یکشنبه", "دوشنبه", "ﺳﻪشنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه" };
            info.AbbreviatedMonthNames = new string[] { "فروردین", "ارديبهشت", "خرداد", "تير", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" };
            info.MonthNames = new string[] { "فروردین", "ارديبهشت", "خرداد", "تير", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" };
            info.AMDesignator = "ق.ظ";
            info.PMDesignator = "ب.ظ";
            info.ShortDatePattern = "yyyy/MM/dd";
            info.FirstDayOfWeek = DayOfWeek.Saturday;
            System.Globalization.PersianCalendar cal = new System.Globalization.PersianCalendar();

            var field = typeof(System.Globalization.DateTimeFormatInfo).GetField("calendar", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
            field?.SetValue(info, cal);
            var fieldInfo = typeof(System.Globalization.DateTimeFormatInfo).GetField("m_cultureTableRecord", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
            if (fieldInfo != null)
            {
                object obj = fieldInfo.GetValue(info);
                var methodInfo = obj.GetType().GetMethod("UseCurrentCalendar", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
                if (
                    methodInfo !=
                    null)
                {
                    var propertyInfo = cal.GetType().GetProperty("ID", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
                    if (
                        propertyInfo !=
                        null)
                        methodInfo.Invoke(obj, new object[] { propertyInfo.GetValue(cal, null) });
                }
            }
            var field1 = typeof(System.Globalization.CultureInfo).GetField("calendar", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
            field1?.SetValue(calture, cal);
            var fieldInfo1 = typeof(System.Globalization.CultureInfo).GetField("calendar", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
            fieldInfo1?.SetValue(calture, cal);

            System.Threading.Thread.CurrentThread.CurrentCulture = calture;
            System.Threading.Thread.CurrentThread.CurrentUICulture = calture;
            System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat = info;
            System.Globalization.CultureInfo.CurrentUICulture.DateTimeFormat = info;

ارسال پاسخ برای این تاپیک

ارسال پاسخ مخصوص اعضا سایت می باشد ! میتوانید با حساب کاربری خود وارد سایت شده یا ثبت نام کنید