PDA

View Full Version : جدا کردن قسمت سال از تاریخ



vB.N3T
یک شنبه 02 اسفند 1394, 09:21 صبح
سلام مهندسین عزیز
من تاریخ را از کامپونتت به این صورت که در عکس میبیند در دیتا بیس در فیلدی از نوع nvarchar ذخیره میکنم
حال میخام قسمت سال رو از تاریخ جدا کنم و در اون کموباکس کوچیک نمایش بدم .
ایا راه حلی داره مچکر

zayens
یک شنبه 02 اسفند 1394, 09:48 صبح
comboBox1.Text.Substring(0, 4);

vB.N3T
یک شنبه 02 اسفند 1394, 10:48 صبح
ممون این درسته
دوستان اگر بخواهیم کل فیلد های تاریخ رو که سال اون تاریخ برابر باشه با مقدار کموباکس باید
چه جور select نوشت

محمد رضا فاتحی
یک شنبه 02 اسفند 1394, 15:31 عصر
از like استفاده کنید

alexmcse
دوشنبه 03 اسفند 1394, 04:31 صبح
private object[] year = {"1350", "1360", "1320", "1370"}; List<object> list = new List<object>();
private int i;
private void Form1_Load(object sender, EventArgs e)
{
var quary = from q in context.Table_1s select q;


comboBox2.Items.AddRange(year );



foreach (var VARIABLE in quary)
{
comboBox1.Items.Add(VARIABLE.Date );

}





foreach (var VARIABLE in comboBox1.Items)
{


list.Add(VARIABLE);
}



}


private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
comboBox1.Items.Clear();
foreach (var VARIABLE1 in list)
{
if ((string) VARIABLE1.ToString().Substring(0, 4) == comboBox2.Text)
{
comboBox1.Items.Add(VARIABLE1);
comboBox1.Text = VARIABLE1.ToString();
}
else
{
i++;
}


}
if (i == list.Count)
{
comboBox1.Text = "";
}

i = 0;
}

vB.N3T
دوشنبه 03 اسفند 1394, 10:03 صبح
private object[] year = {"1350", "1360", "1320", "1370"}; List<object> list = new List<object>();
private int i;
private void Form1_Load(object sender, EventArgs e)
{
var quary = from q in context.Table_1s select q;


comboBox2.Items.AddRange(year );



foreach (var VARIABLE in quary)
{
comboBox1.Items.Add(VARIABLE.Date );

}





foreach (var VARIABLE in comboBox1.Items)
{


list.Add(VARIABLE);
}



}


private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
comboBox1.Items.Clear();
foreach (var VARIABLE1 in list)
{
if ((string) VARIABLE1.ToString().Substring(0, 4) == comboBox2.Text)
{
comboBox1.Items.Add(VARIABLE1);
comboBox1.Text = VARIABLE1.ToString();
}
else
{
i++;
}


}
if (i == list.Count)
{
comboBox1.Text = "";
}

i = 0;
}

مهندس کد های شما دقیق کار میکنه وقتی تاریخ رو به این صورت وارد کنم 1395/12/1
ولی وقتی تاریخ رو به صورت سه شنبه/12/بهمن/1395 ذخیره کنیم در دیتا بیس کار نمیکنه
مشکل از کجا میتونه باشه ؟
از این خط من حدس میزنم باشه
if ((string) VARIABLE1.ToString().Substring(0, 4) == comboBox2.Text)
متد substring شروع رو 0 دادیم و 4 رقم سمت چپ رشته رو برمیگردونه
اما وقتی من با این فرمت تاریخ
سه شنبه/12/بهمن/1395
تست کردم میاد از سمت راست 4 تا بر میگردونه

میشه کاری کرد درست بشه ؟

ali_md110
دوشنبه 03 اسفند 1394, 11:04 صبح
روش شما خیلی صحیح نیست تبدیل تاریخ شما مسلما یک تابع تاریخ شمسی حروفی هست و جستجو درون اون نیاز به Condition های زیادی داره
که میشه یا switch بر روی تاریخ رشته ای حلش کرد ولی باز کار صحیحی نیست
به نظر من جستجوی خودتون روی دیتابیس بزنید تا یک لیست برگردونده شده تاریخ حروفی

vB.N3T
دوشنبه 03 اسفند 1394, 11:19 صبح
روش شما خیلی صحیح نیست تبدیل تاریخ شما مسلما یک تابع تاریخ شمسی حروفی هست و جستجو درون اون نیاز به Condition های زیادی داره
که میشه یا switch بر روی تاریخ رشته ای حلش کرد ولی باز کار صحیحی نیست
به نظر من جستجوی خودتون روی دیتابیس بزنید تا یک لیست برگردونده شده تاریخ حروفی

درسته مکانیزم برنامه به این صورته
مدیر سیستم هر ماه یه مبلغی رو ثبت میکنه و افراد باید پرداخت رو انجام بدن
در فرم دریافت وجه من قبلا یه سکلت زدم و تمام تاریخ ها رو لیست کردم
هر سال 12 ماه ثبت میشه
اگر نرم افزار 5 سال کار کنه. در کموباکسی ک تاریخ ها رو لود کردم 60 تا تاریخ میاره و این یه کم گیج کننده میشه تا تاریخ رو پیدا کنه
من اومدم یه کمبو برای سال قرار دادم
هر سالی رو که انتخاب میکنه 12 ماه مربوط به اون سال رو سلکت میکنه
الانم مشکلم به substrin هستش که از راست داره بر میگردونه

alexmcse
دوشنبه 03 اسفند 1394, 13:56 عصر
مهندس کد های شما دقیق کار میکنه وقتی تاریخ رو به این صورت وارد کنم 1395/12/1
ولی وقتی تاریخ رو به صورت سه شنبه/12/بهمن/1395 ذخیره کنیم در دیتا بیس کار نمیکنه
مشکل از کجا میتونه باشه ؟
از این خط من حدس میزنم باشه
if ((string) VARIABLE1.ToString().Substring(0, 4) == comboBox2.Text)
متد substring شروع رو 0 دادیم و 4 رقم سمت چپ رشته رو برمیگردونه
اما وقتی من با این فرمت تاریخ
سه شنبه/12/بهمن/1395
تست کردم میاد از سمت راست 4 تا بر میگردونه

میشه کاری کرد درست بشه ؟

آره میشود
برنامه خودم رو تست کردم مشکلی نداشت
اگر امکان دارد برنامه شما را آپلود کنید تا آن را تست کنم

ali_md110
دوشنبه 03 اسفند 1394, 15:32 عصر
تاریخ رو به همین صورت حروفی ذخیره میکنید؟
یا تابع تبدبل دارید؟
منظورم اینه تاریخ دیتابیس اینجوریه:1395/11/12 یا اینجوری شنبه/11/بهمن/1394
بحث من اینه روش جستجوی شما اشتباه هست بجای جستجو در کامبوباکس توی بانکتون جستجو بزنید
اگر هم اصرار به همین روش دارید بیاید اعداد رو استخراج کنید مثلا همین تاریخ 139512 استخراج میکنه و سپس 4 رقم اولشو به عنوان سال محاسبه کنید
string Numbers = new String(str.Where(Char.IsDigit).ToArray());
مثل روش بالا یا روشهای دیگه
اگر ممکنه شمای بانگتون یا مقداری از کد برنامه بزارید بهتر میشه راهنمایی کرد

Mahmoud.Afrad
دوشنبه 03 اسفند 1394, 15:32 عصر
اطلاعات کمبوباکس از دیتابیس میاد؟ نوع ستون چیه؟

vB.N3T
دوشنبه 03 اسفند 1394, 15:43 عصر
تاریخ رو به همین صورت حروفی ذخیره میکنید؟
یا تابع تبدبل دارید؟
بحث من اینه روش جستجوی شما اشتباه هست بجای جستجو در کامبوباکس توی بانکتون جستجو بزنید
اگر هم اصرار به همین روش دارید بیاید اعداد رو استخراج کنید مثلا همین تاریخ 139512 استخراج میکنه و سپس 4 رقم اولشو به عنوان سال محاسبه کنید
string Numbers = new String(str.Where(Char.IsDigit).ToArray());
مثل روش بالا یا روشهای دیگه
اگر ممکنه شمای بانگتون یا مقداری از کد برنامه بزارید بهتر میشه راهنمایی کرد

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

vB.N3T
دوشنبه 03 اسفند 1394, 16:12 عصر
اطلاعات کمبوباکس از دیتابیس میاد؟ نوع ستون چیه؟

بله از دیتابیس و نوع nvarchar(50)
یه نسخه از نرم افزار رو اپلود میکنم

vB.N3T
دوشنبه 03 اسفند 1394, 18:04 عصر
مهندسین گل این نمونه ای از پروژه که شبیه سازی کردم
یه نکته اگر احیانا کامپوننت تاریخ خطا داد یه مرتبه پروژه رو بزارین رو .net 2 دو مرتبه بزارینش روی .net 4 (احیانا اگر خطا داد)

بقیه توضیحات در فرم نوشتم مچکر :قلب:
دانلود (http://s6.picofile.com/file/8240208334/4343.rar.html)

Mahmoud.Afrad
دوشنبه 03 اسفند 1394, 20:40 عصر
یک استاندارد برای ذخیره در نظر بگیرید و برای نمایش هر طور میخواهید نمایش بدید.
اگر سورس کنترل انتخاب تاریخ رو در اختیار دارید طوری تغییر بدید که تاریخ رو بدون فرمت خاصی دریافت کنید و ذخیره کنید. اگر سورس رو در اختیار ندارید اگر ممکنه از کنترل دیگری استفاده کنید.
اگر مجبور به استفاده از همین کنترل هستید به این صورت میتونید تاریخ رو با کاراکترهای عددی(متغیر selectedDate) بدست بیارید:

string originalFormat = dateTimeSelector1.CustomFormat;
dateTimeSelector1.CustomFormat = "yyyyMMdd";
string selectedDate = dateTimeSelector1.Text;
dateTimeSelector1.CustomFormat = originalFormat;
برای کمبوباکس سال ، بهتره سالهایی که واقعا ثبت شده اند رو بدست بیارید.

کدها به اینصورت جواب میدن:



public partial class Form1 : Form
{
private DataClasses1DataContext _db = new DataClasses1DataContext();

public Form1()
{
InitializeComponent();
}



private void button1_Click(object sender, EventArgs e)
{
try
{
if (string.IsNullOrWhiteSpace(dateTimeSelector1.Text) )
errorProvider1.SetError(dateTimeSelector1, "لطفا قسمت تاریخ را پر کنید");
else if (string.IsNullOrWhiteSpace(txtmony.Text))
errorProvider1.SetError(txtmony, "لطفا قیمت را وارد کنید ");
else
{
var datee1 = from s in _db.tbl_prices where s.date == dateTimeSelector1.Text select s.date;
if (datee1.Any())
{
MessageBox.Show(
@"برای این تاریخ. مبلغ تعین شده است. شما میتوانید از قسمت ویرایش.مبلغ مورد نظر را تغیر دهید ",
@"پیغام");
}
else
{
string originalFormat = dateTimeSelector1.CustomFormat;
dateTimeSelector1.CustomFormat = "yyyyMMdd";
string selectedDate = dateTimeSelector1.Text;
dateTimeSelector1.CustomFormat = originalFormat;

tbl_price nw = new tbl_price
{
date = selectedDate,
price = txtmony.Text
};
_db.tbl_prices.InsertOnSubmit(nw);
_db.SubmitChanges();
MessageBox.Show(@"Insert", "", MessageBoxButtons.OK);
dateTimeSelector1.Text = string.Empty;
txtmony.Text = string.Empty;
errorProvider1.Clear();

GetDates();
GetYears();
}
}
}

catch (SqlException sqlEx)
{
MessageBox.Show(@"ارتباط با بانک برقرار نشد" +
Environment.NewLine +
sqlEx.Message,
@"پیغام",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

private void GetDates()
{
if (combo_year.SelectedItem != null)
{
string selectedYear = combo_year.SelectedItem.ToString();

var selectDate =
from s in _db.tbl_prices
where s.date.StartsWith(selectedYear)
let year = int.Parse(selectedYear)
let month = int.Parse(s.date.Substring(4, 2))
let day = int.Parse(s.date.Substring(6, 2))
select new PriceView(s.id, year, month, day);
combo_date.DataSource = selectDate.ToList();
combo_date.DisplayMember = "PersianDate";
combo_date.ValueMember = "Id";
}

}

private void GetYears()
{
combo_year.DataSource =
(from item in _db.tbl_prices
select item.date.Substring(0, 4))
.Distinct().ToList();

}

private void Form1_Load(object sender, EventArgs e)
{
GetYears();
}

private void button2_Click_1(object sender, EventArgs e)
{
Form2 nw = new Form2();
nw.Show();
}

private void combo_year_SelectedIndexChanged(object sender, EventArgs e)
{
GetDates();
}
}

public class PriceView
{
private readonly PersianCalendar _pc = new PersianCalendar();

public int Id { get; }
public int Year { get; }
public int Month { get; }
public int Day { get; }
public string CustomFormat { get; set; } = "dddd/dd/MMM/yyyy";
public DateTime Date { get; }

public string PersianDate
{
get
{
return Date.ToString(CustomFormat, CultureInfo.CreateSpecificCulture("Fa-Ir"));
}
}

public PriceView(int id, int year, int month, int day)
{
Year = year;
Month = month;
Day = day;
Id = id;

Date = new DateTime(Year, Month, Day, _pc);
}
}

در مورد overloadهای متد ToString تحقیق کنید.