PDA

View Full Version : سوال: اظافه کردن کنترل به صورت runtime



jafar007
دوشنبه 16 شهریور 1388, 12:38 عصر
سلام
من می خوام یک CMS طراحی کنم و می خوام بعضی جاها توی سایت مثل قسمت ثبت نام ، مدیر سایت اگر خواست یک سری کنترل دیگر هم اظافه کنه مثل یک textbox که مثلا نام مادر پدر بزرگ طرف هم ازش سوال کنه .

حالا نمی دنم چطور وقتی یک کنترل به صورت runtime اضافه می کنم ، یک ستون توی جدول دیتابیس بسازم.

اصلا راه حل همچین موضوعی چیه؟

البته می دونم میشه چندتا ستون توی جدولم از قبل بسازم ولی می خوام runtime بسازم.

و یک چیزه دیگه اضافه کردن یک کنترل به سایت به صورت runtime چطوری انجام بگیره تا کنترل همیشگی بشه .
من این قطع کد رو نوشتم ولی همیشگی نیست.



TableRow tbrWeight = new TableRow();

TableCell tbcWeightTitle = new TableCell();
tbcWeightTitle.CssClass = "TitleColumn";

Label lblWeight = new Label();
lblWeight.ID = txtlbl.Text ;
lblWeight.Text = txtName.Text;

tbcWeightTitle.Controls.Add(lblWeight);
tbrWeight.Cells.Add(tbcWeightTitle);

TableCell tbcWeightControl = new TableCell();
tbcWeightControl.CssClass = "TitleControl";


TextBox txtWeight = new TextBox();
txtWeight.ID = txtID.Text;

tbcWeightControl.Controls.Add(txtWeight);
tbrWeight.Cells.Add(tbcWeightControl);

tblRuntime.Rows.Add(tbrWeight);

ali.akhbary
دوشنبه 16 شهریور 1388, 15:22 عصر
کسی تا حالا همچین کاری نکرده ؟
اصلا می شه بصورت runtime به جدول sql server ستون اضافه کرد؟

بله. فقط یکم سرچ می خواد.

ALTER TABLE Media1 ADD COLUMN BDate Date

jafar007
دوشنبه 16 شهریور 1388, 18:02 عصر
مرسی
اگه می شه بگین چطور می شه کنترلی که به سایت به صورت runtime اضافه می کنیم دائمی باشه. یعنی وقتی یک بار اظافه می کنیم برای مراجعات بدی هم وجود داشته باشه . یا مثلا اگر مدیر کنترلی را اضافه کرد دیگران هم بتونن ببیننش.

z_bluestar
دوشنبه 16 شهریور 1388, 18:27 عصر
خوب اين تنظيمات رو مي توني تو يه جايي مثل فايل xml يا Database ذخيره كني و در Event Page Load اونا رو بخوني و متناسب با اونا فرم رو بسازي

jafar007
دوشنبه 16 شهریور 1388, 23:07 عصر
با تشکر می شه درباره این تکه کد یک مقدار بیشتر توضیح بدین؟:بوس:


ALTER TABLE Media1 ADD COLUMN BDate Date

با تشکر

silverfox
دوشنبه 16 شهریور 1388, 23:15 عصر
یه ستون به جدول media1 به اسم bDate اضافه می کنه با دیتا تایپ date
در ضمن مگه اینکه همون زمان اجرا یه چیزی جنریت بشه realtime نبود؟یا runtime بود؟من اشتباه می کنم؟

jafar007
سه شنبه 17 شهریور 1388, 14:55 عصر
با تشکر از SILVERFOX
من خودم نمی دونم همین جوری گفتم RUNTIME آخه وقتی تو سایت ها سرچ می ردم runtime می نوشتن.

خوب حالا من همین یک خط کد و بنویسم درست می شه (البته به غیر از تنظیمات معمولش)
کار اضافه دیگری نباید بکنم؟

silverfox
سه شنبه 17 شهریور 1388, 21:00 عصر
اون ستونی که با اضافه شدن کنترل اضافه می شه که همیشگی هست البته باید حواست باشه به کدوم سطح یوزر این امکان رو میدی چون جای زیادی برای سو استفاده داره...می تونی کنترل های تو صفحه ات رو یه چیزی هم توی جدولت بذاری یا مثلا با اسم یا دیتاتایپ ستون های جدولت کنترل ها رو تو صفحه اضافه کنی اگر هم طرف می تونه صفحه رو با تغییرات جدید ذخیره کنه که هیچی...ولی تغییرات جدولت دائمی هستن..البته توی sql نه اون جدولی که شما با کد ساختی...یعنی باید به دیتابیس کانکت شی و تغییرات رو رو جدول تو دیتابیست اعمال کنی...به نظرم باید اون کنترل جدید رو یه جا مثلا دیتابیس نوعش رو ذخیره کنی تا 2باره توی لود شدن صفحه ساخته بشه...

jafar007
چهارشنبه 18 شهریور 1388, 02:39 صبح
یک مشکل
چطور میشه نام ستون و نوع ستون را متغییر گرفت؟
مثل دستورات Insert ، Select و ...
مثلا همچین چیزی نوشت


ALTER TABLE Media1 ADD @Column @DateType

بعد با بهش مقدار داد مثلا از طریق دوتا Textbox که یکی برای نام ستون و دیگری برای نوع ستون باشد.

من این کارو کردم ولی از @Column ایراد می گیره.


Incorrect syntax near '@Column'

silverfox
چهارشنبه 18 شهریور 1388, 10:23 صبح
این رو ببین...فعلا باید جایی برم بعدا اگر متوجه نشدی توضیح هم می دم ولی واضحه چجوریه...


public static void sp_1(int c)
{
SqlCommand cmd = new SqlCommand();
SqlConnection cn = new SqlConnection();
cn.ConnectionString = "Context Connection = True;";
cmd.Connection = cn;
cmd.CommandText = "Select Products.*,categories.categoryName from Products inner join categories on Products.CategoryID= Categories.CategoryID where (Products.CategoryID = @catID) ";
cmd.Parameters.Add(new SqlParameter("@CATID", c));
cn.Open();
SqlDataReader dr = cmd.ExecuteReader();
SqlContext.Pipe.Send(dr);
cn.Close();
}

jafar007
چهارشنبه 18 شهریور 1388, 11:32 صبح
خلی ممنون
ولی اینکه مال دستور select هستش .اینو که می دونستم توی این دوستور می شه از پارامتر های متغییر استفاده کرد.
من توی دستور اضافه کردن ستون به جدول مشکل دارم .
توی این دیستور پارامتر های متغییر نمی تونم بذارم . توی اینترنت هم که سرچ کردم کسی این کارو نکرده بود .یعنی همه همون موقع اسم ستون ها شون می نوشتن .

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

jafar007
چهارشنبه 18 شهریور 1388, 15:34 عصر
بالاخره با کلی سرچ توی سایت codproject یه بابایی توی پروژه اش نوشته بود .
با کد زیر تونستم نام جدول ، نام ستون ها و نوع ستون ها رو به صورت متغییر و runtime تعیین کنم .
اینجوری خیلی انعطاف بیشتری داره.



SqlCommand cmd = new SqlCommand("exec('ALTER TABLE ['+ @TableName +'] ADD ['+ @COLUMN_NAME +'] ['+ @Datatype +'] ') ", con);
cmd.Parameters.AddWithValue("@TableName", TextBox1.Text);
cmd.Parameters.AddWithValue("@COLUMN_NAME", TextBox2.Text);
cmd.Parameters.AddWithValue("@Datatype", TextBox3.Text);


امید وارم بدرد دیگران هم بخورد.