PDA

View Full Version : سوال: جمع ستون یک فیلد در تمپلت



asp2.net
شنبه 22 خرداد 1389, 14:23 عصر
من در گریدویو یک تمپلت تعریف کردم میخواهم جمع یک ستون را در آنجا عمل بشه .بصورت زیر عمل کردم یعنی یک label در تمپلت قرار دادم و بایند کردم که ستون های یک فیلد را جمع بزند به این صورت


sum(Eval("fi"))

خطا میده .اگه این دستور اشتباه هستش درستش چیه؟ ممنون میشم کسی راهنمایی کنه

hamedsabzian
شنبه 22 خرداد 1389, 14:34 عصر
جمع مقادیر رو در دستور SQL محاسبه کنید و توی کنترل داده ای تنها یک Bind ساده انجام دهید.

SELECT ...,sum(fi) as 'sumfi'...

Eval("sumfi")

asp2.net
شنبه 22 خرداد 1389, 14:50 عصر
جناب می بخشید از دستور اول را میدونستم قبول دارم ولی دستور دوم شما اشتباه هستش من گفتم فیلد من بنام fi هستش که شما بصورت

eval("sumfi")

hamedsabzian
شنبه 22 خرداد 1389, 15:01 عصر
اشتباه نیست.
براش یه اسم گذاشتم:

SELECT ...,sum(fi) as 'sumfi'...

asp2.net
شنبه 22 خرداد 1389, 16:28 عصر
عزیزم من دستور select را قبول دارم درست
من میخواهم از طرق Template جمع کنم چطوری؟

hamedsabzian
شنبه 22 خرداد 1389, 19:06 عصر
1. آیا هر سطر Grid دارای یک ستون به نام fi است؟
2. آیا این Label قراره مجوع یک ستون fi از Grid رو نمایش بده ؟
3. آیا Label در تمام سطر ها تکرارمیشه؟

asp2.net
یک شنبه 23 خرداد 1389, 11:17 صبح
1.بله ستونی به اس fi دارم
2.بله این label قراره مجموع ستون fi را نشون بده

3.نمی خوام تکرار بشه. از طرفی هم نمی خوام از دستور


select sum(fi) as ' ' ......

استفاده کنم بلکه میخواهم با استفاده از Template دستور جمع را اعمال کنم

Vahid_moghaddam
یک شنبه 23 خرداد 1389, 11:30 صبح
بهتره مجموع رو در footer قرار بدید. footer هم می تونه از نوع template باشه. در رویداد RowDataBound مجموع فیلدی رو که لازم دارید حساب کنید و دوباره در همین رویداد (بر اساس row type) مجموع رو در template نمایش بدید. مثال:

http://msdn.microsoft.com/en-us/library/ms972833.aspx

http://authors.aspalliance.com/aspxtreme/shared/viewsrc.aspx?path=/aspxtreme/sys/web/ui/webcontrols/demos/gridviewrowcreatedrowdatabound.aspx.src

hamedsabzian
یک شنبه 23 خرداد 1389, 11:46 صبح
همون طور که جناب Vahid_moghaddam گفتن بهترین کار استفاده از FooterThemplate است.

<FooterTemplate>
<asp:Label ID="LS" runat="server" ></asp:Label>
</FooterTemplate>
بعد هم دستی مقدار sum محاسبه بشه و توش قرار بگیره:
((Label)GVT.FooterRow.Cells[0].FindControl("LS")).Text=sum;
ولی با توجه به اینکه ممکنه Grid دارای Paging باشه، بهتره عملیات SELECT توی یه SP انجام بشه که OUTPUT اش مقدار sum باشه و اون موقع میتونید مقدار sum رو توی رویداد Selected برای DataSource ات از توی OutputParameters ورداری.

موفق باشید.