سلام
من به یه مشکل بر خوردم که نتونستم حل کنم، گفتم شاید کسی بتونه اینجا کمکم بکنه.
شرح ماجرا از این قرار است که من یه Custom Control نوشتم که طرز کارش شبیه به کنترل Panel هست با این تفاوت که دور محتویات خود (کنترل های درون خود) در هنگام Render ، جهت تزئین یک جدول ایجاد می کند و در چهارگوشه آن عکس های کوچکی قرار می دهد و علاوه بر عکس ها یک کادر هم رسم می کند. مثل شکل زیر :
خوب این کنترل ما از Panel به ارث می بره و کار ما رو بسیار آسون می کنه ولی یه مشکل کجاست ؟!
من به دو صورت می تونم عمل Rendering رو انجام بدم. یک راه اینکه به صورت کثیف کد های HTML رو که جدول رو تولید می کند رو در داخل متد RenderContents قرار بدم. مثلا :
output.Write("<table ....> some html code ...");
base.RenderContent(output);
output.Write("... some html code ..</table>");
خوب به محل قرار گیری متد base.RenderContent نگاه کنید که چگونه با جایگیری در بین رشته ها عمل Render سایر کنترل ها را تحریک می کند.
خوب روش بعدی استفده از متد CreateChildControls هست و به این صورت که با استفاده از کنترل های Table, TableRow وTableCell و Image به هدف خودم برسم. روش دوم خیلی کاراست و خیلی هم شفاف و تمیز.
سوال : چگونه کنترل های داخلی یا همان کنترل هائی که داخل Panel قرار دارد را دقیقا در یک مکان مشخص Render کنم ؟
به عنوان مثال فرض کنید با توجه به شکل نیاز است که کنترل های Panel را داخل سلول مرکزی Render کنم، با استفاده از روش قبلی این امکان وجود داشت ولی حالا که کنترل ها رو به صورت غیر رشته ای و HTMLای دارم ایجاد می کنم چه کار باید بکنم ؟
ذکر این نکته هم خالی از لطف نیست که من چند روش رو امتحان کردم ولی جواب نداد. مثلا کنترل های موجود در
base.Controls رو به centerCell.Controls اضافه کردم ولی جواب نداد، با این روش فقط کنترل های Literal به centerCell اضافه می شد.