PDA

View Full Version : سوال: عدم نمایش gridview بعد از ایجاد datatable دوم



mahan0o0
یک شنبه 09 فروردین 1394, 09:33 صبح
من یک maskedtextbox دارم که user تاریخ تولدشو توش به شمسی وارد می کنه و من اونو به میلادی تبدیل می کنم و توی sql نوع داده رو datetime گذاشتم و تاریخ رو میلادی ذخیره می کنه. مشکل الان اینه که من وقتی می خوام اطلاعات رو توی gridview نشون بدم تاریخ رو میلادی نشون میده ولی من می خوام شمسی به کاربر نشون بده. من یک datatable جدید ساختم که همه اطلاعات datatable قبی رو توی جدید کپی میکنه و فقط اگه به تاریخ برسه به شمسی تبدیل میکنه ولی نمیدونم چرا gridview من در فرم نمایش داده نمیشه و datatable جدید فقط 1 سطر رو تبدیل می کنه. تا قبل اینکه تبدیل رو انجام بدم و اطلاعات رو توی datatable جدید بزارم همه چیز درست بود فقط تاریخ میلادی بود.کدم رو واستون گذاشتم ممنون میشم راهنمایی کنید. می دونم روشهای دیگه ای هم است که نیاز به این تبدیلات نیست ولی واسه برنامم حتما می خوام به این شکل باشه.


DLL LAYER
public DataTable select(string SQL)
{
cmd.CommandText = SQL;
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
BLL LAYER
public DataTable viewd()
{
“Connection string”
Con.open();
DataTable dt = das.select("select * from tblusr order by id DESC");
Con.close();
return dt;
}

private void Form1_Load(object sender, EventArgs e)
{
BLL b = new BLL();
DataTable dt = new DataTable();
dt = b.viewd();
DataTable dtFa = new DataTable();
for (int i = 0; i < dt.Columns.Count; i++)
{
dtFa.Columns.Add(dt.Columns[i].ToString());
}

for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow newR = dt.NewRow();
for (int j = 0; j < dt.Columns.Count; j++)
{

dtFA.Rows.Add();
newR = dt.NewRow();

if (dt.Columns[j].Caption == "bDate")
{

DateTime dtim;
DateTime.TryParse(dt.Rows[i][j].ToString(), out dtim);
persianDate dateFarsi = new persianDate(dtim);

newR[j] = dateFarsi.simpleDate();

}
else
{
newR[j] = dt.Rows[i][j];

}

dtFarsi.Rows.Add(newR);
}


}
dataGridView1.DataSource = dt;

aidivandi
یک شنبه 09 فروردین 1394, 10:28 صبح
دوست عزیز بجای اینکه تاریخ تولد رو از نوعdate انتخاب کنی از نوع رشته بگیر که دیگه دردسر تبدیل هم نداشته باشی تا هنگام نمایش روی datagride همان مقدار درست رو نشون بده

mahan0o0
یک شنبه 09 فروردین 1394, 12:27 عصر
دوست عزیز بجای اینکه تاریخ تولد رو از نوعdate انتخاب کنی از نوع رشته بگیر که دیگه دردسر تبدیل هم نداشته باشی تا هنگام نمایش روی datagride همان مقدار درست رو نشون بده
از نوع رشته هم واسه یک ستون دیگه گرفتم درست هم کار میکنه دوست عزیز. ولی واسه این حتما باید از نوع date بزارم. لطفاٌ اگه کسی می دونه راهنمایی کنه ممنون میشم

mahan0o0
دوشنبه 10 فروردین 1394, 11:02 صبح
دوستان لطفاً اگه امکان داره راهنمایی کنید حتما توی برنامم باید از این روش کارو انجام بدم

gabrieleb
دوشنبه 10 فروردین 1394, 13:20 عصر
سلام ، نمیدونم چه لزومی داره حتما این کار رو انجام بدین ، شما می تونید یک ستون دیگه به جدول موجود در بانکتون اضافه کنید که صورت شمسی تاریخ رو هم نگهداری کنید . زمانی که می خواین اطلاعات رو نمایش بدین ، ستون شمسی رو بانک اطلاعاتی انتخاب کنید . این راه حل خیلی بهتر از اینه که تمامی سطر های موجود در بانک رو به حافظه Ram بیارید و عمل تبدیل رو تک به تک انجام بدین . در تعداد رکورد های بالا کارایی به شدت پایین میاد .

در هر صورت کدتون رو به شکل زیر بنویسید ، ببینید مشکل حل میشه یا نه :


BLL b = new BLL(); DataTable dt = b.viewd();

DataTable dtFa = new DataTable();

for (int i = 0; i < dt.Columns.Count; i++)
{
dtFa.Columns.Add(dt.Columns[i].ToString());
}


for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow newR = dtFa.NewRow();
for (int j = 0; j < dt.Columns.Count; j++)
{

if (dt.Columns[j].Caption == "bDate")
{

DateTime dtim;
DateTime.TryParse(dt.Rows[i][j].ToString(), out dtim);
persianDate dateFarsi = new persianDate(dtim);

newR[j] = dateFarsi.simpleDate();

}
else
{
newR[j] = dt.Rows[i][j];
}

}


dtFa.Rows.Add(newR);
}
dataGridView1.DataSource = dtFa;