PDA

View Full Version : مشکل در ایجاد خروجی تابع



brida_kh
یک شنبه 22 آبان 1384, 21:58 عصر
با سلام
من یه تابع دارم که برای خروجی یک تگ اچ تی ام ال بر میگردونه.
خروجی یک رشته هست و تابع رو به این صورت فراخوانی میکنم


<%#getfla((S)DataBinder.Eval(Container.DataItem,"xname"))%>
در فایل اصلی هم فقط یه سلکت دارم .
الان میگه آرگومان تابع وجود نداره .از دستور
Page.databind ()
هم استفاده کردم اما باز هم آرگومان تابع رو نمیشناسه
راه حل چیه؟

Behrouz_Rad
یک شنبه 22 آبان 1384, 23:36 عصر
این چیزی که من می بینم، دو تا دستور متداخله که به هیچ وجه صحیح نیست!
از دو تگ Server Script مجزا استفاده کنید.
موفق باشید.

brida_kh
دوشنبه 23 آبان 1384, 11:06 صبح
من برای خواندن فایل xml دقیقا از همین دستور استفاده کردم و تابع خروجی داد. نمیدونم چطوری باید از دو تا تگ جاوا استفاده کنم. این فراخوانی هم برای ارسال تگی برای فایل فلش و عکسه. که اسمش از توی دیتا بیس میاد. اصلا این کار منطقی هست؟؟؟؟

Behrouz_Rad
دوشنبه 23 آبان 1384, 19:25 عصر
دوست عزیز!
اولا همیشه از تگ CODE برای نوشتن کدها در تاپیک های خود استفاده کنید و پس از ارسال تاپیک، آن را یک بار بازبینی کنید تا از ارسال صحیح تاپیک خود مطمئن شوید.
دستوری که شما نوشتید، به شکل زیر است:


<%#getfla((S)DataBinder.Eval(Container.DataItem,"xname"))%>

اصولا این دستور منجر به Syntax Error خواهد شد!!!
و اما...
به شکل زیر عمل کنید.
به عنوان مثال برای ایجاد یک تگ IMG که به منظور نمایش یک عکس استفاده می شود، کدی شبیه به کد زیر را بنویسید:


<img src='<% DataBinder.Eval(Container.DataItem, "myColumn") %>'>

موفق باشید.

brida_kh
سه شنبه 24 آبان 1384, 09:38 صبح
با سلام . ممنون از راهنمائیتون . ببینید من میخوام که این تگ توسط تابع بوجود بیاد . یعنی اینکه محدودیتی برای نشون دادن عکسها یا فلشها نباشه . چون ممکنه هر کدوم از اینا غالب باشند .( تعدادشون زیادتر از اون یکی باشه ) . برای تابع مشکلی ندارم فقط نمیدونم حالا که اون روش غلطه چطور باید صداش بزنم .با توجه به اینکه اسمش هم باید حتما از تو دیتابیس بیاد . ارسال بشه به تابع و معلو م بشه که کدوم تگ باید قرار بگیره .

با تشکر

Behrouz_Rad
سه شنبه 24 آبان 1384, 10:49 صبح
الهی شکورات لصبر العظیم...

من میخوام که این تگ توسط تابع بوجود بیاد
کدوم تگ؟


یعنی اینکه محدودیتی برای نشون دادن عکسها یا فلشها نباشه
منظورت از محدودیت چیه؟ مگر نه اینه که شما رکوردها رو از دیتابیس می خونید، پس واژه محدودیت چه معنایی داره؟


چون ممکنه هر کدوم از اینا غالب باشند .( تعدادشون زیادتر از اون یکی باشه )
تعداد چی از چی زیادتر باشه؟


برای تابع مشکلی ندارم فقط نمیدونم حالا که اون روش غلطه چطور باید صداش بزنم
تابع چی چی؟ کدوم روش غلطه؟



معلوم بشه که کدوم تگ باید قرار بگیره .

چه تگی کجا باید قرار بگیره؟

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

و من الله التوفیق.

iekrang
سه شنبه 24 آبان 1384, 11:37 صبح
جناب راد.من فکر کنم متوجه منظور این دوستمون شدم.
ایشون میخوان که تابع فوق یک تگ برگردونه.یعنی اینکه این تابع از دیتابیس میخونه که عکسه یا فلش.و برای هر کدوم تگ معادلش رو برمیگردونه.
مشکل اینجاست که نمیدونن از خروجیه تابع که یه تگ چه جوری استفاده کنند.

brida_kh
سه شنبه 24 آبان 1384, 12:15 عصر
توی دیتا بیس ما یه فیلد داریم که موقع اضافه کردن وقتی فایل فلش بود true میشه . توی تابع هم ما میخواهیم وقتی این فیلد true بود یه دونه تگ mbed برگردونه . وگرنه تگ img تابع اینه
public string getfla(int s, int b)
{

if(s==1
{ return "<embed src=\"image"+b.ToString()+".swf\"></embed> else
{
<return "<img src=\"image"+b.ToString()+".jpg\"></img>
}
}
تگ که خروجی تابع هست باید قبل از این جمله قرار بگیره'<% DataBinder.Eval(Container.DataItem, "myColumn") %>
حالا که باید تابع فراخوانی شود چی بگم ؟ اسمش و آرگومانش رو قبول نمیکنه . خودتونم گفتید اشتباهه .
ببخشید اما من فکر کردم با توجه به تاپیکهای قبلی شما متوجه میشید.

Behrouz_Rad
سه شنبه 24 آبان 1384, 13:55 عصر
احسنت!
حالا میشه خیلی راحت به شما پاسخ داد.
البته نفرمودید که از چه Container ای استفاده کرده اید.
بنا به کاری که قصد انجامش را دارید، بنده با استفاده از کنترل Repeater به شما پاسخ خواهم داد.
عبارت Data Binding در فایل aspx را به صورت صریح ننویسید و از یک کنترل واسط استفاده کنید. (من از Literal Control استفاده کردم)
نشان فلگ را نیز در یک Literal Control مجزا قرار دهید. خاصیت Visible این Literal Control را به False تنظیم کنید.
چون خروجی شما نیاز به فرمت دهی ندارد، از عبارت DataBinder.Eval استفاده نکنید!


<asp:repeater id="Repeater1" runat="server">
<ItemTemplate>
<asp:Literal ID="litName" Runat=server Text='<%# Container.DataItem("xName") %>'>
</asp:Literal>
<asp:Literal ID="litFlag" Runat=server Visible="False" Text='<%# Container.DataItem("intFlag") %>'>
</asp:Literal>
</ItemTemplate>
</asp:repeater>


تابع شما نیز نیاز به کمی تغییرات دارد. این تغیرات را برای شما انجام دادم.


public string getfla(int s, Literal myLit, string b)
{
if(s == 1
{
myLit.Text = "<embed src='\image" + b.ToString() + ".swf'></embed>";
else
{
myLit.Text = "<img src='\image" + b.ToString() + ".jpg></img>";
}
}

حال کار اصلی شما در روال ItemDataBound کنترل Repeater انجام می پذیرد.
به شکل زیر عمل کنید.


Protected Sub Repeater1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles Repeater1.ItemDataBound
If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
Dim litFlag As Literal = CType(e.Item.FindControl("litFlag"), Literal)
Dim litName As Literal = CType(e.Item.FindControl("litName"), Literal)
getfla(Convert.ToInt32(litFlag.Text), litName, litName.Text)
End If
End Sub

روال ItemDataBound کنترل Repeater برای هر ردیف از داده های Repeater فراخوانی می شود.
در روال فوق، نشان فلگی که در Literal Control با نام litFlag ذخیره شده در متغیری با نام litFlag قرار خواهد گرفت.
نام Literal Control ای نیز که خروجی در آن قرار می گیرد، به تابع اصلی ما پاس داده می شود.
موفق باشید.

brida_kh
سه شنبه 01 آذر 1384, 23:05 عصر
با سلام . مشکلم حل شد . آقای راد برای تابع خودم فقط یه مقدار تبدیل متغیرها لازم بود . :چشمک:
هیچ کدوم از اینا نیاز نبود :لبخند:

Behrouz_Rad
چهارشنبه 02 آذر 1384, 05:00 صبح
حقیر ، اصول کار گفتی! خواه عمل کن ، خواه به طریقت خویش رو...

brida_kh
چهارشنبه 02 آذر 1384, 10:44 صبح
کارای اصولی چقدر سختند. :لبخند:
[CODE]
<%# getfla( bool.Parse(DataBinder.Eval(Container.DataItem,"flash").ToString()), DataBinder.Eval(Container.DataItem, "xname").ToString()) %>
[CODE/]
اینو که نوشتم حل شد. به هر حال ممنون از لطفتون