PDA

View Full Version : نمايش يك ستون در ديتاگريد بصورت ساعت و دقيقه



hsadeh
یک شنبه 27 تیر 1389, 07:58 صبح
سلام - در مورد ديتاگريد يه سوال دارم : (web 2003) من يك ستون در جدول بانك اطلاعاتي دارم كه نتيجه يك سري عمليات بوده و در نهايت يك مقداري را بصورت عدد (دقيقه) نشان ميدهد . ميخواهم اين عدد را در ديتاگريد بصورت ساعت و دقيقه نشان دهم . چكار كنم ؟
مثال : 70 ---> 01:10 نوع ستون عدد در جدول int است و چون يكسري عمليات جمع و تفريق روي آن انجام شده نميتوان نوع آنرا عوض كرد . متشكرم

Modifier
یک شنبه 27 تیر 1389, 08:53 صبح
سلام - در مورد ديتاگريد يه سوال دارم : (web 2003) من يك ستون در جدول بانك اطلاعاتي دارم كه نتيجه يك سري عمليات بوده و در نهايت يك مقداري را بصورت عدد (دقيقه) نشان ميدهد . ميخواهم اين عدد را در ديتاگريد بصورت ساعت و دقيقه نشان دهم . چكار كنم ؟
مثال : 70 ---> 01:10 نوع ستون عدد در جدول int است و چون يكسري عمليات جمع و تفريق روي آن انجام شده نميتوان نوع آنرا عوض كرد . متشكرم

سلام دوست من...
اول اينكه نوع ستون رو به nvarchar تغيير بدين..چون در غير اين صورت نميتوني كاركتر غير عددي توش ذخيره كني..

براي عمليات هم اون مقدار رو Convert كن...
توي VS از Convert و توي sql هم از Cast يا Convertميتوني استفاده كني..

بقيه كار هم هك فكر نكنم مشكلي داشته باشه...

موفق باشيد.

يا علي.

hsadeh
یک شنبه 27 تیر 1389, 17:11 عصر
گفتم كه : اين ستون را نميتونم بصورت رشته اي تعريف كنم .اين ستون بصورت زير بدست ميايد :

CONVERT(int, SUBSTRING(All_time, 1, 2)) * 60 + CONVERT(int, SUBSTRING(All_time, 4, 2))
از دوستان اگر كسي راه حلي دارد ممنون ميشوم .

alihassanabadi
جمعه 01 مرداد 1389, 09:08 صبح
سلام دوست عزيز
اومدم از اين روش ساده برم كه نشد ميگه كه كار تبديل رو نميتونه انجام بده
ديگه وقت نداشتم باهاش ور برم




<ItemTemplate>
<asp:LabelID="Label1"runat="server"Text='<%# MainClass.intTotime(Eval("tim1")) %>'></asp:Label>
</ItemTemplate>


ولي اين روش كاملا جواب ميده
برنامش رو برات نوشتم
ولي هر كاري ميكنم آپلود نميشه از ديروز تا حالا دارم زور ميزنم آپلودش كنم كه ميگه
Upload of file failed
مجبورم توضيح بدم
يه كلاس به اسم MainClass به پروژت اضافه كن و متد زير رو بهش اضافه كن كه كار تبديل رو انجام ميده


publicstaticstring intTotime(Int64 sec)
{
//int h = sec / 3600;
Int64 m = (sec / 60);
Int64 s = sec % 60;
// if(h>0)
// return String.Format("{0:D2}:{1:D2}", m, s);
returnString.Format("{0:D2}:{1:D2}", m, s);
}


حالا گريد ويو رو به يه Sqldatasource وصل كن وتمام فيلد ها رو select كن
ديتابيسش رو با sql server 2000
طراحي كردم
فيلد جدول رو از نوع bigint در نظر گرفتم
در آخر ميتوني تو رويداد مورد نظر ازش استفاده كني كه من تو
page_load ازش استفاده كردم


protectedvoid Page_Load(object sender, EventArgs e)
{
string con = "Data Source=(local);Initial Catalog=DB;Integrated Security=True";
connnection = newSqlConnection(con);
connnection.Open();
SqlDataSource1.SelectCommand = "select *from tbltime";
SqlCommand com1 = newSqlCommand();
com1.Connection = connnection;
com1.CommandType = CommandType.Text;
com1.CommandText = "select *from tbltime";
SqlDataReader r;
r = com1.ExecuteReader();
for (int i = 0; r.Read(); i++)
{
Int64 c = Convert.ToInt64(r["tim1"].ToString());
Label Label1 = (Label)GridView1.Rows[i].FindControl("Label4");
Label1.Text = MainClass.intTotime(c).ToString();
//Label ll = new Label();
//GridView1.TemplateControl.Controls.Add(ll);
// GridView1.Controls.Add(ll);
}
r.Close();
connnection.Close();
}

البته يه TemplateField در Edit Clumns به ديتا گريد ويو اضافه كردم و Lable4 رو تو Edit Templates بهش add كردم

ديگه بر حسب نيازت CommandText رو ميتوني تغيير بدي
اميدوارم جوابتو گرفته باشي.