PDA

View Full Version : كنترل هاي زمان اجرا در asp.net



SAMARE
شنبه 19 دی 1388, 12:29 عصر
سلام دوستان گرامي

ممنون ميشم اگر كسي در مورد ايجاد كنترل هاي زمان اجرا و نحوه استفاده از اونها در asp.net)(vb.net) توضيح بده !!!

SAMARE
یک شنبه 20 دی 1388, 08:48 صبح
من توي فرمم ميخوام دو تا dropdownlist‌بصورت run time‌ايجاد كنم كه محتويات اونها در همان لحظه ايجاد بايد از ديتابيس خونده بشه !!!

ممنون ميشم كمكم كنيد!!!

بهنام بهمنی
یک شنبه 20 دی 1388, 09:00 صبح
به لينکهاي زير مراجعه کنيد

http://www.developerfusion.com/code/4393/create-controls-at-runtime/
http://www.daniweb.com/forums/thread77018.html#

SAMARE
یک شنبه 20 دی 1388, 10:48 صبح
ممنون از لينكهايي كه گذاشتيد ولي من نتونستم جوابم رو بگيرم!!!

من طرز ساخت يك dropdownlist و نحوه پر شدن آن رو در هنگام اجزاي برنامه ميخوام!!!

SAMARE
دوشنبه 21 دی 1388, 09:49 صبح
من در صفحه ام يه دكمه دارم كه در رويداد كليك اون تابع زير رو فراخواني ميكنم
اين تابع سه كنترل dropdownlist‌ و يك textbox و يك button را در زمان اجرا ايجاد ميكنه



Protected Sub Create_RunTime_Controls()
Dim btnAdd As New Button()
btnAdd.Text = "ںهھي§ë ¬©ل ¤§ï§"
AddHandler btnAdd.Click, AddressOf btnAdd_Click
Me.PlaceHolder1.Controls.Add(btnAdd)

Dim text1 As New TextBox
text1.Visible = True
' text1.Location = New System.Drawing.Point(88, 50)
Me.PlaceHolder1.Controls.Add(text1)
Dim ddlSign As New DropDownList
ddlSign.Items.Add("=")
ddlSign.Items.Add(">")
ddlSign.Items.Add("<")
ddlSign.Items.Add("<>")
Me.PlaceHolder1.Controls.Add(ddlSign)

Dim ddlCustomer As New DropDownList
Dim DataSource As New SqlDataSource
DataSource.ConnectionString = ConfigurationManager.ConnectionStrings("EmailMark").ToString()
DataSource.SelectCommand = "select column_name from information_schema.columns where table_name = 'tblCustomer' "
ddlCustomer.DataSource = DataSource
ddlCustomer.DataTextField = "column_name"
ddlCustomer.DataBind()
Me.PlaceHolder1.Controls.Add(ddlCustomer)

Dim ddlType As New DropDownList
ddlType.Items.Add("And")
ddlType.Items.Add("OR")
Me.PlaceHolder1.Controls.Add(ddlType)

End Sub

Protected Sub btnAdd_Click(ByVal sender As Object, ByVal e As EventArgs)

Create_RunTime_Controls()

End Sub



با اول با فشار دادن دكمه تابع فراخواني شده و تمام كنترل هاي زمان اجرا ساخته ميشن ولي نميدونم چرا با فشار دادن دكمه ايجاد در زمان اجرا اين كار ديگه تكرار نميشه و حتي كنترل هاي ايجاد شده هم ناپديد ميشن!!!

ممنون ميشم كمكم كنيد مشكل كار رو پيدا كنم!!!

hadi000333
سه شنبه 22 دی 1388, 03:12 صبح
سلام
به کنترل هایی که runtime می سازی ID بده.

SAMARE
سه شنبه 22 دی 1388, 14:22 عصر
ممنونم درست شد
منتها مشكل جديد اينجاست كه نميدونم ايتم انتخاب شده dropdownlist و متني كه در textbox نوشته شده رو چجوري بايد نگه داشت كه در مرحله ايجاد كنترل هاي جديد از بين نرن؟؟؟

hadi000333
سه شنبه 22 دی 1388, 16:39 عصر
فکرمیکنم در زمان ایجاد request رو چک کنی.


Request[Ctrl.UniqueID]
Ctrl کنترل خودت هست.

ولی فکر میکنم باید راهی باشه بتونی در ViewState ذخیره کنی.

SAMARE
چهارشنبه 23 دی 1388, 11:49 صبح
مشكل textbox‌ با استفاده از همون request حل شد
ولي حالا نميدونم چجوري آيتم انتخاب شده ي dropdown list‌ رو حفظ كنم؟؟؟

hadi000333
چهارشنبه 23 دی 1388, 23:54 عصر
ولی حالا نمیدونم چجوری آیتم انتخاب شده ی dropdown list‌ رو حفظ کنم؟؟؟ چون کدت VB هست و کدی که فرستادی خیلی تمیز نیست نتونستم
کدت رو بفهمم ولی اگه مشکلت تنها در مورد dropdown list باشه فکر می کنم این کد بتونه کمک کنه
البته کد من C#‎‎ هست تبدیلش با خودت
:اول مقدار انتخاب شده رو از Request تحویل میگیریم.


var selectedValue = Request[ddl.UniqueID];بعد مقدرا انتخاب شده رو select می کنیم

ddl.ClearSelection();

var selItem = ddl.Items.FindByValue(selectedValue.ToString());

if (selItem == null)
{ ddl.SelectedIndex = 0; }
else
{ selItem .Selected = true; }

ddl کنترل dropdownlist هست

موفق باشی

SAMARE
پنج شنبه 24 دی 1388, 13:39 عصر
اين موردم برطرف شد
ممنونم
الان ميخوام در رويداد كليك دكمه ايجاد شده در زمان اجرا - كدي رو بنويسم كه تمام كنترل هاي ايجاد شده در يك پنل مشخص حذف بشه!!!

hadi000333
جمعه 25 دی 1388, 02:51 صبح
ببین دوست من تو ASP.NET هر کنترلی از کلاس Control ارث برده .حتی Page .
پس تمام کنترل ها دارای مشخه ای به نام Controls هستند که تمام کنترل هایی که در محدوده اونها هست
میشه دسترسی داشت.
اگه می خوایی مثلا تمام کنترل های یک Panel رو حذف کنی :

foreach (Control item in pnl.Controls)
{
pnl.Controls.Remove(item);

}

pnl کنترل Panel هست.
البته با توجه به کنترل مورد نظر خودت می تونی اون کنترل رو حذف کنی.
و اگه بخوایی مثلا یه کنترل خواص رو حذف کنی
کافی UniqueID اون کنترل رو بدونی یا بدست بیاری


Control myctrl =Page.FindControl("UniqueID") as Control;
Page.Controls.Remove(myctrl);

به همین راحتی.
موفق باشی

SAMARE
جمعه 25 دی 1388, 23:17 عصر
دوست عزیز از راهنمایی تون ممنونم
ولی این یک حذف ساده نیست
من برنامه ام رو باز میکنم تا قابل فهم تر باشه :


من روی صفحه ام یک دکمه بنام btnAdd دارم که هر بار با فشردن آن یک کنترل Panel بصورت runtime ساخته میشه و بعد از ایجاد پنل یک تکست باکس و یک دکمه بنام btnDel بصورت runtime ایجاد شده و در پنل مربوطه قرار میگیرند
مثلا در Panel1 - textbox1 و btnDel1 قرار میگیرند
در panel2 – textbox2 و btnDel2 قرار میگیرند و بهمین ترتیب ....
حالا میخوام با فشردن دکمه btnDel فقط پنل مربوط به همون دکمه و تکست باکس حذف بشه!!!
یعنی با فشردن Panel1 - btnDel1 حذف بشه ولی نمیدونم چه کدی رو در btnDel_Click بنویسم؟؟؟
منظورم اينه كه چجوري آي دي پنل مربوطه رو بگيرم و حذفش كنم!!!

SAMARE
شنبه 26 دی 1388, 12:33 عصر
چطور ميشه آي دي يك button كه در زمان اجرا ساخته ميشه رو در رويداد كليك خود اون button‌بدست آورد؟؟؟

hadi000333
شنبه 26 دی 1388, 14:01 عصر
protected void btn_click(object sender, EventArgs e)
{
Control ctrl = ((Control)sender);

ctrl.UniqueID;// فقط برای دکمه
ctrl.Parent.Controls;//برای نگه دارنده کنترل مثلا پنل
ctrl.NamingContainer.Controls;//برای نگه دارنده هایی که Template دارند. مثل ListView

}

در رویداد مربوط به button بااین کد می تونی به کنترل هات دسترسی داشته باشی

SAMARE
شنبه 26 دی 1388, 17:43 عصر
ببينيد مشكل اينجاست كه حلقه for كه براي ايجاد كنترل ها نوشتم با postback مشكل داره بهمين دليل با هر بار فشردن دكمه btnDel كه بصورت runtime ايجاد شده همه كنترل هاي ايجاد شده از بين ميرون و در نتيجه نميتونم آي دي دكمه مربوطه رو بدست بيارم
نميدونم چه كدي در رويداد دكمه btndel بنويسم كه هم بتونه آي دي دكمه رو بگيره و هم اينكه بقيه كنترل هاي ايجاد شده از بين نرن!!!