PDA

View Full Version : یه مشکل در مورد Bind و Eval در Gridview



mehrdad201
جمعه 30 آذر 1386, 00:12 صبح
سلام

دوستان من یه مشکل در زمینه Bind در گرید ویو دارم و ممنون میشم کمکم کنید.

من یه تیبل تو دیتابیس دارم که از طریق sqldatasource اون رو به یه گرید ویو متصلش کردم.

از طریق این گرید ویو هم میشه اطلاعات رو دید و هم اون رو ویرایش کرد. (قابلیت ادیت روش فعاله)

یکی از فیلدهای تیبل به این صورت هستش 8888.0000
یعنی یه عدده که تا 4 رقم اعشار رو نشون میده. حتی اگه صفر باشه.....

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

در قسمت ItemTemplate از یه همچین روشی استفاده کردم


float.parse (Eval("rate1).toString()).ToString()
در این مورد قشنگ کار میکنه مثلا به جای 9898.1000 میزنه 9898.1
=======================
اما در مورد حالت ادیت مشکل داره.

در قسمت ادیت <EditItemTemplate>فیلد به این صورت مقدار دهی شده


Bind("rate1")
اومدم بایند رو برداشتم اما برنامه ارور داد چونکه وقتی در قسمت edititemtemplate میایم از eval استفاده می کنیم ، فیلد رو به عنوان readonly در نظر میگیره .....

در نتیجه حتما باید Bind بذارم و بدی این روش اینه که وقتی دکمه ادیت رو میزنم توی تسکت باکسی که در حالت ادیت میاد باز هم اون رقم رو با اعشار نوشته ........:گریه:

دوستان هر کی میتونه کمکم کنه . شرمنده از اینکه توضیحاتم طولانی شد.....

mehrdad201
جمعه 30 آذر 1386, 01:19 صبح
دوستان کسی نیست یه کمکی به ما بکنه !؟

Alireza_Salehi
جمعه 30 آذر 1386, 11:52 صبح
برای نمایش:
اگر بدون TemplateField استفاده می کنی در قسمت Edit Columns فیلد مورد نظر رو انتخاب کن و در قسمت DataFormatString عبارت {0:G0} رو قرار بده.(تصویر رو ببین)

اگر هم می خواهی با TemplateField و Bind این کار رو انجام بدی به صورت زیر Bind کن:



<asp:LabelID="Label1"runat="server"Text='<%# Bind("price", "{0:G0}") %>'>

</asp:Label>


برای ویرایش :


<asp:TemplateFieldHeaderText="price"SortExpression="price">


<EditItemTemplate>

<asp:TextBoxID="TextBox1"runat="server"Text='<%# Bind("price", "{0:G0}") %>'>
</asp:TextBox>
</EditItemTemplate>
<ItemTemplate>

<asp:LabelID="Label1"runat="server"Text='<%# Bind("price", "{0:G0}") %>'></asp:Label>

</ItemTemplate>
</asp:TemplateField>

mehrdad201
شنبه 01 دی 1386, 01:52 صبح
البته این واسه فیل**تر کردنه

من منظورم این نبود. فرض کن میخوام مقدار این فیلد رو بفرستی به یه تابع و دو اون تابه مقدار برگشتی رو مشخص کنی...

در این حالت باید چه کار کرد.....


البته اینم گفته باشم که همون دیشب مشکل رو حل کردم اما صبر می کنم ببینم دوستان دیگه چه نظری دارند.

شاید اونها راه های بهتری رو پیشنهاد بدن

Alireza_Salehi
شنبه 01 دی 1386, 07:48 صبح
یکی از فیلدهای تیبل به این صورت هستش 8888.0000
یعنی یه عدده که تا 4 رقم اعشار رو نشون میده. حتی اگه صفر باشه.....

من میخواستم کاری کنم که موقع نمایش اطلاعات این صفر های اضافی از بین برن.
تا حدودی هم موفق شدم. به این صورت که اول اومدم اون فیلد گرید ویو رو به صورت تمپلیت در آوردم.
در این مورد قشنگ کار میکنه مثلا به جای 9898.1000 میزنه 9898.1
=======================
اما در مورد حالت ادیت مشکل داره.


با این توضیحاتی که دادی بهترین جواب همینه!



البته این واسه فیل**تر کردنه

من منظورم این نبود. فرض کن میخوام مقدار این فیلد رو بفرستی به یه تابع و دو اون تابه مقدار برگشتی رو مشخص کنی...



باشه در این صورت هم باز همین روش باید استفاده بشه، فقط یه تابع میاد این وسط!
این تابع (#C):

publicString GenerateOutput(Decimal input)
{
//.....
return input.ToString("G0");
}
این هم نحوه استفاده:


<asp:LabelID="Label1"runat="server"Text='<%#GenerateOutput((Decimal) Eval("price")) %>'></asp:Label>


(VB)

Public Function GenerateOutput(ByVal input As Decimal) As String
'....
Return input.ToString("G0")
End Function




<asp:LabelID="Label1"runat="server"Text='<%#GenerateOutput(Eval("price")) %>'></asp:Label>

mehrdad201
شنبه 01 دی 1386, 10:58 صبح
درسته اما وقتی که از eval استفاده می کنی (منظورم در حالت edittemplate هستش) دیگه این فیلد رو به عنوان فیلد قابل ادیت کردن در نظر نمیگیره

به عبارت دیگه در e.newvalues ها اصلا مقدارش ظاهر نمیشه!!

قبول دارید ؟؟؟؟؟؟؟؟؟؟

Alireza_Salehi
شنبه 01 دی 1386, 13:56 عصر
بله قبول

فکر کنم در رویداد RowDataBound میشه مقداردهی کردشون!