PDA

View Full Version : تغییر مشخصات یک کنترل bind شده در Datalist در C#.net



bardia goharbin
یک شنبه 01 بهمن 1385, 21:09 عصر
چگونه در #C میتوانم خصوصیات یکی از کنترلهای موجود در Datalist را که بایند شده است را تغییر دهم.
من یک کنترل Asp:Image در یک DataList دارم که باید بصورت داینامیک ImageUrl اون و با توجه به یک شرط خاص برای هر رکورد تغییر یابد.
برای vb.net مثالهایی در سایت موجود بود که مشکلی از من حل نکرد اگر دوستان لطف کنند ممنون میشم.

greenway
یک شنبه 01 بهمن 1385, 23:39 عصر
من یک کنترل Asp:Image در یک DataList دارم که باید بصورت داینامیک ImageUrl اون و با توجه به یک شرط خاص برای هر رکورد تغییر یابد.
ممنون میشم.

شما می توانید از Custom Binding Expression استفاده کنید و شرط خودتان را مستقیما در عبارت Bind بیاورید.
http://barnamenevis.org/forum/showpost.php?p=292545&postcount=12

Alireza_Salehi
دوشنبه 02 بهمن 1385, 09:10 صبح
شما می توانید از Custom Binding Expression استفاده کنید و شرط خودتان را مستقیما در عبارت Bind بیاورید.
http://barnamenevis.org/forum/showpost.php?p=292545&postcount=12

دقیقا از همون روشی که greenway (http://barnamenevis.org/forum/member.php?u=31558) گفته باید استفاده کنی.
این دو تا لینک رو هم ببین مثال های خوبی داره:
Beyond DataBinder (http://www.codeproject.com/aspnet/BeyondDataBinder.asp)
Two-Way Data Binding in ASP.NET (http://www.codeproject.com/aspnet/ASPNetTwoWayDataBinding.asp)

bardia goharbin
دوشنبه 02 بهمن 1385, 12:30 عصر
به نظرم یک مقداری پیچیده میاد اگه توضیح مختصری بدید در موردش ممنون میشم

Alireza_Salehi
دوشنبه 02 بهمن 1385, 13:24 عصر
اگر مستقیما فقط بخواهی ImageUrl یک کنترل Image را به فیلدی به نام URL در منبع داده وصل کنی کد زیر رو به قسمت Source کنترل image اضافه کن:

ImageUrl='<%#EVAL("URL") %>'اگر بخواهی طبق شرط خاصی ImageUrl عوض شود باید به روش زیر عمل کنی
فرض کن می خواهی بر اساس فیلد id از دیتابیس تصمیم بگیری چه عکسی در Image نمایش داده بشود
ابتدا یک تابع تعریف می کنی (در قسمت کد- البته این یک مثاله هر کاری خواستی توی این تابع می تونی انجام بدی)

Public Function GETURL(ByVal id As Int32) As String
Dim url As String
If id < 3 Then
url = "~/P1.jpg"
Else
url = "~/P2.jpg"
End If
Return url
End Functionبعد در قسمت Source عبارت زیر رو به کنترل Image اضافه می کنی:

ImageUrl='<%# GETURL(Eval("id"))%>'در ضمن این روشی که مثال زدم در مورد هر Property از کنترل ها که اراده کنی قابل استفاده هست!

یک سری کلاس های دیگری مثل DataSetBinder به جای DataBinder.Eval و یک سری کاراکتر های دیگری مثل $ به جای # می شه استفاده کرد که زیاد تفاوتی با هم نداره فقط قابلیت های بیشتری به برنامه نویس میده که اگر تو اینترنت بگردی حتما کلی مثال پیدا میکنی.

امیدوارم این مثال مشکلت رو حل بکنه.

bardia goharbin
دوشنبه 02 بهمن 1385, 17:46 عصر
مرسی از شما که وقت گذاشتید ، هرچند مشکل من با #C بود ولی با کدی که نوشتید کاملا متوجه شدم. البته یک اشکال دیگری در Type فیلد بود که در DataBase داشتم و در دیتابیس Type فیلد من Tinyint بود که بایستی در زمان Eval به Int32 تبدیل میشد که با دستور زیر مشکل حل شد.

'<% ((("ImageUrl='<%# ChangeCatIcon(Convert.ToInt32(Eval("TypeID

Alireza_Salehi
دوشنبه 02 بهمن 1385, 18:22 عصر
tinyint رو باید Byte تبدیل کنی.(برخی مواقع تبدیل ناصحیح اشکالات ناخواسته ای ایجاد می کند)

در ضمن اون Int32 که گذاشتم مهم نیست (هر چی بذاری فرقی نمی کنه) لینک زیر معادل دات نت انواع داده ای SQL :
SqlDbType Enumeration (http://msdn2.microsoft.com/en-us/library/system.data.sqldbtype.aspx)