PDA

View Full Version : ارسال متغیر به user Control !



mohammad973
جمعه 18 اسفند 1391, 04:12 صبح
سلام دوستان . اینترنت رو زیرو رو کردم و آخرش نتونستم این کار رو انجام بدم ! آخرش بالاخره یه گیری میده .

حتی روش هایی که توی "برنامه نویس" بود هم بهم جواب نداد !

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

clover
جمعه 18 اسفند 1391, 12:52 عصر
چطور میتونم از صفحه ای که هستم ، یه متغیر یا مقدار رو به یوزر کنترلم بفرستم ؟؟؟؟

به سادگی :لبخندساده:

توی یوزر کنترل مورد نظر یک Property عمومی تعریف می کنید:

public string Text { get; set; }

بعد توی کد یا تگ کنترل مورد نظر می تونید بهش مقدار بدید:

<wc:WebControl ID="YourWebControl" runat="server" Text="Sample Text" />

YourWebControl.Text = "Sample Text";

موفق باشید

iranolom
جمعه 18 اسفند 1391, 14:43 عصر
السلام ... به زبان ساده تر

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

بعد تو هر صفحه ای که از اون یوزر داری استفاده کنی از اون صفحه نام یوزرت رو می نویسی بعد اسم اون تابع سراسری میاد تو لیست

اگه هم نیاز به مقدار دهی داشته باشه که راحت از همین جا چندین پارامتر هم می تونی بفرستی
شبیه همون کلاس هاست دیگه

mohammad973
جمعه 18 اسفند 1391, 16:25 عصر
به سادگی :لبخندساده:

توی یوزر کنترل مورد نظر یک Property عمومی تعریف می کنید:

public string Text { get; set; }

بعد توی کد یا تگ کنترل مورد نظر می تونید بهش مقدار بدید:

<wc:WebControl ID="YourWebControl" runat="server" Text="Sample Text" />

YourWebControl.Text = "Sample Text";

موفق باشید

ممنون دوست عزیز .
مشکل من اینجاست که از codeBehind صفحه ام ، چطور میتونم به مقدار text (همون property یزرکنترلم) دسترسی داشته باشمو مقدارش بدم . اینطور که شما مقدار دادی در حال Design هست . همینکارو از codeBehind چطور میتونم انجام بدم؟

مرتضی تقدمی
جمعه 18 اسفند 1391, 17:41 عصر
ممنون دوست عزیز .
مشکل من اینجاست که از codeBehind صفحه ام ، چطور میتونم به مقدار text (همون property یزرکنترلم) دسترسی داشته باشمو مقدارش بدم . اینطور که شما مقدار دادی در حال Design هست . همینکارو از codeBehind چطور میتونم انجام بدم؟
سلام
دوستمون درست گفتن دیگه. شما باید از مقدار پراپرتی ای که تعریف کردین استفاده کنید. فرضا نسبتش بدین به text یک Label یا چیزهای دیگه. دقیقا برای دسترسی در codeBehind هم به همین شکل که گفتند هستش. مشکلی نیست که!
موفق باشید

mohammad973
جمعه 18 اسفند 1391, 18:07 عصر
ببینید دوستان ف من توی کار با asp.net و #C نسبتا مبتدی ام و دارم تازه با مباحث آشنا میشم ! برای همین آشنایی درستی با کلاس ها و تنظیم property ندارم . کدم رو میگذارم ، بگید کجای اون رو باید درست کنم . خودم دیگه فکرم به جایی نمیرسه .

توی صفحه سایتم ، میخوام تعداد نظرات تایید نشده رو از دیتابیس بخونم ، از قالب موجود توی userControl ام استفاده کنمو محتواشو که درست کردم ، به تعداد نظرات توی صفحه ام بگذارم .
این کد رو توی صفحه نظرات گذاشتم :

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
SqlConnection conn = new SqlConnection("Data Source=MOHAMMAD-PC\\MOHAMMADMSSERVER;Initial Catalog=h3rd_DB;Integrated Security=True");
SqlCommand comm = new SqlCommand("Select * from [Question] where ([Q_state]='False')", conn);
conn.Open();
SqlDataReader reader = comm.ExecuteReader();
while (reader.Read())
{
UserControl uCtrl = (UserControl)Page.LoadControl("~/Private/controls/NewQuestionCtrl.ascx");
QuestionArea.Controls.Add(uCtrl);
}
reader.Close();
conn.Close();
}
}


و این کد رو توی قسمت کد یوزرکنترلم :

public int Rec_id
{
get;
set;
}

protected void Page_Load(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection("Data Source=MOHAMMAD-PC\\MOHAMMADMSSERVER;Initial Catalog=h3rd_DB;Integrated Security=True");
SqlCommand comm = new SqlCommand("Select * from [Question] where ([Q_state]='False') + ([Q_ID]=@a)", conn);
comm.Parameters.AddWithValue("@a", Rec_id);
conn.Open();
SqlDataReader reader = comm.ExecuteReader();
if (reader.Read())
{
PersonName_txt.Text = reader[1].ToString();
Question_txt.Text = reader[2].ToString();
Answer_txt.Text = reader[3].ToString();
DateTime_txt.Text = reader[4].ToString();
PersonWebSite.Text = reader[6].ToString();
PersonEmail.Text = reader[7].ToString();
}
reader.Close();
conn.Close();
}


اگر فقط بتونم توی کد صفحه ی اصلیم به Rec_id مقدار بدم ، مشکلم حل میشه . این کار رو نمیدونم چطور میتونم انجامش بدم .
خواهشا اگر میدونید بگید بدونم چطور این کارو انجام بدم

aebrs@yahoo.com
جمعه 18 اسفند 1391, 21:00 عصر
این تابع را توی یک کلاس تعریف کنید

public static void PropertySetter(Control control, string propertyName, object propertyValue)
{
PropertyInfo property = control.GetType().GetProperty(propertyName);
if (property != null)
property.SetValue(control, propertyValue, null);
}


بعد اون را اینجوری صدا بزنید:

control = LoadControl("~/UserControl/NewQuestionCtrl/NewQuestionCtrl.ascx");
ClassName.PropertySetter(control, "Rec_id", Id);
targetDiv.Controls.Add(control);

امید که مفید باشد