ورود

View Full Version : سوال: تعیین مقدار یه فیلد ازجدول دیتابیس به عنوان ورودی یک تابع javascript بمنظور نمایش خروجی تابع در Grid



majid784
سه شنبه 05 مهر 1390, 12:51 عصر
سلام دوستان
من یک جدول دیتابیس رو به عنوان DataSource یک GridView قرار دادم. حالا میخوام چیزی که در یکی از ستونهای گریدویو نمایش داده میشه حاصل اجرای یک تابع روی مقدار یکی از فیلدهای table دیتابیس باشه. مثلا تو دیتابیس ستونی به نام Maxtime دارم که بر اساس ثانیه است. حالا میخوام توی گرید این به دقیقه تبدیل بشه و نمایش داده بشه. اگه که خود مقدار table رو میخواستم نشون بدم توی ItemTemplate مینوشتم:

<ItemTemplate ><%# Eval("DurationSeconds") + "seconds"%> </ItemTemplate>

حالا مثلا میخوام یه تابع جاوا اسکریپت به نام Convert بنویسم که تبدیل ثانیه به دقیقه رو انجام بده و من خروجی این تابع رو به عنوان چیزی که در این ستون گرد نشون داده میشه استفاده کنم. برای این که Eval("DurationSeconds") رو به عنوان ورودی تابع convert تعیین کنم تو قسمت ItemTemplate چی باید بنویسم

mahdioo12194
سه شنبه 05 مهر 1390, 17:39 عصر
:متفکر: :متفکر::متفکر:

میلاد قاضی پور
سه شنبه 05 مهر 1390, 19:35 عصر
جاواسکریپت سمت کلاینت اجرا میشه و گرید ویو یک کنترل سمت سرور هست . گرید ویو قبل از لود شدن صفحه اطلاعاتش رو میگیره در حالی که جاواسکریپت بعد از لود شدن اجرا میشه.
اینکاری که میگید فکنم شدنی هست اما شاید این اطلاعاتی که گفتم کمک کنه روش مناسب تری رو انتخاب کنید .

mahdioo12194
سه شنبه 05 مهر 1390, 19:47 عصر
حالا از روش های دیگه هم شد مشکل نداره فقط یکی یه راه حل بگه!

میلاد قاضی پور
سه شنبه 05 مهر 1390, 19:49 عصر
شما میتونی به جای اتصال مستقیم دیتابیس به گرید ویو بیای در فرم لود کد اتصال بنویسی و با یک حلقه ی فوریچ تمام سطور رو به مقدار مورد نظر کانورت کنید .

mahdioo12194
سه شنبه 05 مهر 1390, 19:54 عصر
شما میتونی به جای اتصال مستقیم دیتابیس به گرید ویو بیای در فرم لود کد اتصال بنویسی و با یک حلقه ی فوریچ تمام سطور رو به مقدار مورد نظر کانورت کنید .

اگه یه نمونه کد بنویسید ممنون می شم اخه ما مبتدی هستیم دیگه:خجالت:

میلاد قاضی پور
سه شنبه 05 مهر 1390, 20:52 عصر
var stds = from student in datacontext.students
where student.scode == studentCode
select student;
GridView_students.DataSource = stds;


}

GridView_students.DataBind();

foreach (GridViewRow row in GridView_students.Rows)
{
row.Cells[7].text= "salam";
;
}

mahdioo12194
چهارشنبه 06 مهر 1390, 00:39 صبح
شما میتونی به جای اتصال مستقیم دیتابیس به گرید ویو بیای در فرم لود کد اتصال بنویسی و با یک حلقه ی فوریچ تمام سطور رو به مقدار مورد نظر کانورت کنید .

حالا چه کاریه ما به صورت دستی بایند کنیم همون مستقیم بایند می کنیم چون در روش شما بلاخره باید اطلاعات به گرید بایند شود بعد از آن خوانده شود !
بعد از اینکه بایند شد در لود صفحه اطلاعات را از گرید خوانده و تغییر می دهیم!

میلاد قاضی پور
چهارشنبه 06 مهر 1390, 10:43 صبح
آخه دوستمون گفتن میخوان اطلاعاتی که قراره تو گرید دیده بشه رو میخوان قبل از نمایش در گرید کانورت کنن . در وانجایی که من نوشتم سلام میتونن کد کانورت رو بنویسن .

A.S.Roma
چهارشنبه 06 مهر 1390, 14:59 عصر
من درست یادم نیست GridView چجوری Template‌می گرفت . کلیتش رو میگم شما خودت درستش کن :
2 تا راه به ذهن من میرسه :
1- توی Template‌گریدویو یک Lable بذاری و ایونت OnDataBounding ش رو مقدار بدی و اونجا Convert رو انجام بدی.
2- به جای Table‌یک View بنویسی . Convert رو اونجا انجام بدی و گرید رو وصل کنی به View

majid784
چهارشنبه 06 مهر 1390, 16:33 عصر
خوب حالا من یه سوال دارم اگه قرار باشه تو کد برنامه عمل convert رو انجام بدم حالا یا به شیوه ای که آقا میلاد گفت یا به روشی که AS.Roma گفت چطوری مقدار اون فیلد دیتابیس رو برای هر سطر از گرید به دست بیارم. چون من راهی برای این که از دیتاستی که سورس گریده مقدار یک فیلد رو برای هر سطر بخونم سراغ ندارم!

A.S.Roma
چهارشنبه 06 مهر 1390, 16:36 عصر
protected void lbl_DataBinding(object sender , eventargs e)
{
Lable myLabel = sender as Label;
myLabel.Text = ConvertToWhatYouWant(myLabel.Text);
}

mahdioo12194
چهارشنبه 06 مهر 1390, 16:40 عصر
اون حلقه for مقادیر را از گرید می خواند!



foreach (GridViewRow row in GridView2.Rows)
{

int g = Convert.ToInt32(row.Cells[0].Text);
int c = g / 60;


row.Cells[0].Text = Convert.ToString(c);

}

majid784
شنبه 09 مهر 1390, 15:21 عصر
جواب درست ترکیبی از جواب as.ROMA وmahdioo12194 میشه:

foreach (GridViewRow row in GamesGrid.Rows)
{
Label myLabel = (Label) row.Cells[1].FindControl("timeLabel");
string sec = myLabel.Text;
myLabel.Text = convertToMinutes(sec);
}