PDA

View Full Version : مشکل با دستیابی به property های داینامیک user control



nazaninam
دوشنبه 17 مهر 1385, 01:37 صبح
باسلام
من یک user control دارم که یک property به نام text داره ( هم رایت هم رید)
این usercontrol بصورت داینامیک داخل یک placeholder اضافه میشه ( در هنگام لود صفحه )
خوب حالا میخوام به خاصیت text این property مقدار "saalam" رو وارد کنم
ولی نمدونم چطور میشه به این usercontrol دسترسی پیدا کرد چون داینامیک ادد شده...

البته باید بگم یکی از دوستان مشکل بنده رو داره که چون سوالش رو بد مطرح کرده جواب درستی نگرفته :http://barnamenevis.org/forum/showthread.php?t=53596

SalarSoft
دوشنبه 17 مهر 1385, 09:05 صبح
از findcontrol استفاده کن


MyControl ctrl=(MyControl) PlaceHolder1.FindControl("controlname");
ctrl.Text="Something";

nazaninam
دوشنبه 17 مهر 1385, 11:56 صبح
آخه مشکل اینه که وقتی داینامیک اد میشه من آی دی اون یوزر کنترل رو نمیدونم که بخوام findesh کنم... بعدشم با چی ctype کنم؟

nazaninam
دوشنبه 17 مهر 1385, 13:17 عصر
خوب خودم راهشو پیدا کردم
برای دوستانی که مشکل بنده رو دارن توضیح میدم که :
ابتدا دقت کنن که کلاس یوزر کنترلشون حتما از نوع public particial class باشه
مرحله دوم اد کردن یوزر کنترل بود که مشکلی نداشت :



Dim myControl As Control = LoadControl("scaler_viewer.ascx")

Me.PlaceHolder1.Controls.Add(myControl)


حالا نکته اینجاست که میخوایم مثلا به خاصیت text این کنترل دستسی پیدا کنیم



For Each myprop As Modules_scaler_viewer In PlaceHolder1.Controls


myprop.txt = "salam"

Next



کار تمومه خاصیت تکس این یوز کنترل رو برابر سلام قرار دادم ....

Modules_scaler_viewer هم که اسم کلاس یوز کنترلمه...

pegasos
دوشنبه 17 مهر 1385, 14:12 عصر
بادرود.
شاید این پاسخ ضروری نباشد.
ولی به نظر من راهی که شما برای این کار انجام می دهید منطقی نیست.
بیاید فقط یک ذره OOP را رعایت کنیم.
شما اگر پراپرتی عمومی در یوزر کنترل خود دارید فقط کافی است ,کنترلی که لود کرده اید CAST کنید به کلاس اصلی UserControl خودتان و سپس به تمام منابع عمومی آن کلاس دسترسی خواهید داشت.
این کار را انجام بدهید چنانچه مشکلی بود،من سورس این کار را اینجا قرار می دهم.

به امید موفقیت.

nazaninam
سه شنبه 18 مهر 1385, 00:33 صبح
دوست عزیز وقتی شما دارید مثلا 10 تا کنترل ادد میکنید چطور میفهمید که کدوم به کدوم هست؟
آی دی کنترل ها پس از ادد شدن تغییر میکنه و نمیشه پیداشون کرد
از روی ایندکس میشه اینکار کرد که کار درستی نیست
شما کاری که گفتید رو امتحان کردید ؟ جواب میده؟
اینم ببنید بد نیست ؟http://www.beansoftware.com/ASP.NET-Tutorials/Controls-Run-Time.aspx

pegasos
سه شنبه 18 مهر 1385, 15:11 عصر
با درود .
برداشت ذهنی من از صحبتهای شما به این صورت است :


من یک user control دارم که یک property به نام text داره ( هم رایت هم رید)




public class Control1 : System.Web.UI.UserControl
{

private string text;
public string Text
{
get
{
return this.text;
}
set
{
this.text = value;
}
}

private void Page_Load(object sender, System.EventArgs e)
{
Response.Write("This is Control 1.");
}

}





این usercontrol بصورت داینامیک داخل یک placeholder اضافه میشه ( در هنگام لود صفحه )




public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.PlaceHolder PlaceHolder1;
//write by Hand
protected Control1 ctr;

private void Page_Load(object sender, System.EventArgs e)
{
ctr = (Control1)LoadControl("Control1.ascx");
this.PlaceHolder1.Controls.Add(ctr);


}
}





خوب حالا میخوام به خاصیت text این property مقدار "saalam" رو وارد کنم
ولی نمدونم چطور میشه به این usercontrol دسترسی پیدا کرد چون داینامیک ادد شده...

ابتدا در مورد نوشته آقای SalarSoft که کاملا درست است و من با یک مقدار دخل و تصرف باز هم اینجا قرار می دهم




Control1 MyControl=(Control1) PlaceHolder1.FindControl(ctr.ClientID);
MyControl.Text="Something";

Response.Write(MyControl.Text);


و چیزی که من می گویم این است :
شما می توانید در تمامی رویدادهای این صفحه به کنترلتان دسترسی داشته باشید بدون هیچ زحمت اضافه ای :



ctr.Text = "Hello New World.";
Response.Write(ctr.Text);



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

به امید موفقیت.

nazaninam
سه شنبه 18 مهر 1385, 20:48 عصر
ممنون از راهنماییتون متوجه شدم