# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > Silverlight >  آموزش گام به گام سیلورلایت - Silverlight 4

## taghvajou

سلام به همه
به نام و  یاری خدا 
با توجه به ریلیز شدن سیلورلایت 4 و حل شدن بسیاری از مشکلات که از ورژنهای قبل دامن گیرمون بود، و علاقه که در خودم و (احتمالا بقیه دوستان) در به کار گیری این تکنولوژی ناز وجود داره، تاپیک آموزش کام به گام سیلورلایت رو شروع میکنیم.
فقط قبلش چند تا موتو و تذکر خدمتت دوستان عرض کنم:
*1- آهسته و پیوسته* - اینکه آروم مطالب گفته شد، حوصله تون رو سر نره!
*2- همه چیز را همگان دانند* - پس من کوچیک شما هستم و اگر جایی هم اشتباه کردم خوشحال میشم که باهم و ازهم یاد بگیریم
*3- اول تمرین بعد مسابقه* -  اول مباحث رو جدا جدا یاد می گیریم بعد مرور و کد!

دوستان خواهش میکنم که یه اعلام آمادگی بکنند تا ببینیم که چند نفر مخاطب خواهیم داشت.
امیدوارم که بتونیم زکات علمی که داریم رو بدیم.

----------


## shgroup

خوب به نام خدا من سوالامو شروع میکنم البته یکیشو خودم بلدم اما میپرسم تا برای بقیه دوستان هم مفید باشه خواهش می کنم دوستان دیگه تشکر نکنند و نظرات رو اینجا نگذارند - ممنون

*1-*اگه دقت کرده باشید تو Visual studio البته من نسخه 2010 رو منظورمه زمانی که بخواهید در پروژه سیلورتون خاصیت فونت رو تغییر بدید مشاهده می کنید که 10 فونت بیشتر وجود نداره و بقیه فونتهایی که روی سیستم نصب است مشاهده نمی شه ! باید چطوری فونتها رو به پروژه اضافه کرد ؟

*2-*دوستانی که Web یا Windows کار کردند می دونند زمانی که می خواهیم به یک کنترل در Code دسترسی پیدا کنیم نام کنترل رو تایپ می کردیم مثلا TextBox1. ... اما تو سیلور اینطور نیست یعنی من پیداش نکردم حتی با خاصیت Name کنترل هم کار کردم اما نشد ! خاصیت ID ای هم تو VS نیست ! ممنون میشم جناب تقواجو عزیز راهنمایی کنند یا هر کدام از دوستان که بلد هستید.

ممنونم

----------


## shishe

برای سیلور لایت یک سری toolkit  ها هست که قبلش   دانلود و به vs اضافه شه که کار رو راحت تر میکنه
حالا در مورد سوال دومت نمی دونم این کار هم با اونا قابل انجام هست یا نه؟

----------


## taghvajou

سلام به همه و آقا ایمان گل!
در مورد بسم الله که گفتین، ماهم لبیک میگیم و شروع میکنیم
خوب بریم سراغ سوال اولتون که تو چت جوابشو بهتون دادم، ولی برای استفاده بقیه هم میگم:

دقیقا به قول شما، فقط چندتا فونت خاص انگلیسی تعریف شده که متاسفانه فونت مهم و پرکاربرد تاهوما بین اونها نیست.
دقت کردین که هر *Solution* سیلورلایت از دو تا پروژه تشکیل شده: یکیش خود سیلور و فرمها و متعلفاتش با نام سالوشن، و دیگری پروژه وب اونه!

در مورد اینکه هر کدوم چیه و چه وظایفی دارند بعدا مفصلا توضیح میدم، فعلا بریم سراغ جواب:
1- تو پنجره *ُSolution Explorer، * تو ریشه پروژه سیلورلایت، یه پوشه درست کنین و اسمش رو فونت بذارین
2- فونت مورد نظرتون را انتخاب کنید یا دانلود کنید یا بسازید یا خلاصه یه جوری گیر بیارین دیگه فقط خواهش تو انتخاب فونت از فونتهای خانواده دار ( :لبخند گشاده!: ) استفاده کنین.
3- روی پوشه فونتمون رایت کلیک کنین و گزینه "*Add ---> Existing Item*" را انتخاب کنید.
4- فونت رو *Browse* کنین.
5- حالا فونت(ها) اضافه شده رو انتخاب کنین و برین تو پراپرتی باکسش.
6- باید دو تا تنظیم انجام بدین که یکیش واجبه و اون یکیش مستحب.
6-1-* گزینه BuildAction* که تنظیم میکنه که به دنبال ساخت پروژه چه برخوردی با این آیتم داشته باشه، رو از کمبوباکس روی *گزینه Resource* بذارین تا فونت رو تو ریسورس خروجی من بذاره تا تو فایلایی که قراره از سرور به کلاینت بره، انتقال پیدا کنه و فونت رو کامپیوتر کلاینت هم بشه نمایان!
6-2- یه گزینه ای که عموما تو ریسورس های تنظیم میشه گزینه *Copy to output Directory* شه که بهتر بذارین رو گزینه *Copy If Newer* بذارین تا اگه طی مراحل مختلف پروژهتون تغییر رو فونت یا خانواده اش یا ورژنش داشتین، نسخه جدید به کار گرفته بشه.

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

سوال بعدی رو برای جلوگیری از پاسخ خیلی بلند تو پست بعدی میگم.

----------


## taghvajou

بچه نیازه عکس هم از مراحل بذارم یا توضیحات به نظرتون کافیه!

----------


## shishe

مرسی کافیه

----------


## taghvajou

خوب اما سوال دوم:
تو ویژوال استودیو 2010 یه تنوعی دادند که ویژگی (Property) اسم کنترل رو از آکاردیونهای پنجره *Properties* به بالای پنجره انتقال یافته، بالا تب کنترلهای ویژگیها و رویدادها یه فضایی تخصیص یافته که تصویر کنترل، نام کنترل و کلاس کنترل قید شده که فوق العاده راحت و سریع الوصول شده!

با این کار نام کنترلی که وارد میکنین، تو تگ های  XAML ، ویژگی Name مقدار به خودش گرفته! یعنی حتی می تونین حین قدیمی ها ( اشاره به دوران HTML) مقدار هر ویژگی رو هم خودتون دستی تو تگهای زمل مقدار دهی کنین. 
البته این کار رو تو خیلی جاها باید انجام بدیم؛ جدی میگم. چون هنوز IDE ویژوال 2010 پخته نیست و نمی تونه جوابگوی تمام خواسته های Coder باشه.

حالا تو صفحه سی اس (CS) همون فرم، کافیه چند حرف اول کنترلتون رو بنویسین و با تکیه به Intellisence  و با زدن دکمه های Ctrl و Space اسم کنترل رو تکیل کنین و ادامه کارتون . 

با دقت بیشتر، با دومین حالی که ویژوال استودیو 2010 بهمون داده آشنا بشین. :کف کرده!: 
هوش تایپی 2010 یه قدم جلو برداشته و گزینه هایی که میتونین ازش استفاده کنین رو با تایپ کارکترهای بیشتر، فیلتر میکنه تا به کلمه مورد نظر برسه! تو استودیو های قبل همه گزینه ها رو می آورد و تو این دراپ داون که باز میشد گزینه نزدیکتر فقط انتخاب شده بود.

گاهی پیش میاد، که ما هر چی تغییر میدیم ولی ویژوال استودیو کار خودشو میکنه؟!!  :اشتباه:  تو این شرایط، با رایت کلیک کردن رو Solution و انتخاب Clean یه بار هر آنجه که به جا مونده از کامپایلهای قبلی تون پاک بشه بعد دوباره Build کنین. اگه نشد، کنترل رو پاک کنین و از اول بندازین و نامکذاری کنین که شاید فرجی حاصل شود؛ بازم نشد؟!؟!؟ فرمتون رو پاک کنین و از اول بسازین (البته زیر لب به مایکرو سافت و بیل گیتس هم ... نثار کنین). :متعجب: 
خداییش اگه بازم نتیجه نگرفتین، به فکر سالوشن عوض کردن باشین.
تو سیلورلایت 3 و ویژوال 2008 از این موارد من خیلی داشتم که ناگفته نماند بعد از اینکه SP1 ویژوال استودیو اومد دیگه چنین مشکلی نداشتم. :خیلی عصبانی: 
تو 2010 هم ندیدم هنوز، ولی انگار این بار این باگ گریبان گیر آقا ایمان شده! :گیج: 

عکس هم پیوست کردم. بازم سوالی در مورد نامگذاری باشه در خدمتیم. :قلب:

----------


## taghvajou

یه نکته ای رو قبلا از اینکه دوستان بپرسند در ادامه سوال فونت خدمتتون عرض کنم.
اگه یادتون باشه موقع اضافه کردن فونت، گفتم به خانواده فونت دقت کنین!
تو موقع استفاده، اگه تو محیط IDE تون فونت نمایان نشد، از خود بیخود نشین. برین 
تو صفحه ی XAML تو شکم کنترل مورد نظرتون و تو تگ *Font Family* باید مقدار فونت رو وارد کرد. البته اول خانواده شود بنویسین بعد علامت # و بعد اسم فونت.

----------


## <برنامه نویس>

سلام دوستان دست شما درد نکنه من میگیم اگه از اول آموزش ها رو روی یک برنامه ریزی خاص جلو ببرید بهتره تا هر کس سوال داشت بپرسه

----------


## taghvajou

دوست خوبم ragandasht!
اصلا نیاز به سردرگم شدن نیست.
بذار به یه مثال ساده برات توضیح بدم که سیلورلایت چیز خاصی نیست.
قطعا سایت هایی که با فلش کار شدند، را که دیدین. حالا یه تکنولوژی جدید  مایکروسافت رو کرده که مثل همونه!
تو هر دوشون، در واقع یه کنترل با توانایی های انجام شده قرار گرفته! یعنی  بروزر عملا کنترل مورد نظر (در اینجا سیلورلایت ) رو تحویل میده! 
کنترل سیلورلایت فراخوانی شده در صفحه html، هم فایل زمل XAML اون پیج رو دریافت میکنه.

فایل زمل (*XAML*) هم از خانواده فایل های بوم و حامل (*Canvas*) محسوب میشه، سرتون درد نیارم یه چیزی مثل ایکس امل ال (XML) خودمون که با تگ بندی، یه پایگاه داده از کنترلها و ویژگیهای اونهاست. با این تفاوت کد انواع تگهای و کنترلها و اشیایی که قبول میکنه خیلی بیشتره؛ مثل خطوط و اشیا مختلف، فایلها و پسوند و افکتها.
خداییش در حدی که مطالعه و کاربرد داشتم، تو افکتها و رویدادهای که در اختیار میذاره دمش گرمه!

حالا مایکروسافت یه لطفی کرده، که نقصهای سایر تکنولوژیهای مشابه را سعی  کرده به مرور رفع کنه! و روز به روز هم کاملتر میشه، مثلا شما یه فایل فلش که تو سایت هست هر بار که رفرش میکنین، باید لود بشه، ولی تو سیلورلایت این طوری نیست که بهش میگن اجرای خارج از بروز (*Out Of Browser*). 

یه کم میگم؛ البته یه کم که چه عرض کنم :گیج:  خیلی...
تو چند مرحله میگم ولی سوال خیلی خوبیه! 

*سیلورلایت یک* که اسمش WPF Everywhere بود نه سیلورلایت. این نسخه، در واقع بیشتر ماموریت رابط کاربری داشت (UI یا همون User Interface) و البته کنترلهای اولیه و پایه وب رو هم داشت و یه سری قابلیتهای انیمیشن، پخش مدیا و ... . برای اولین بار بود که زمل (XAML) خودشون نشون داد. (البته به من  :لبخند گشاده!: )
من تجربه کاری با سیلورلایت یک ندارم و همه اینها در حد حرف می دونم. :لبخند: 

اینها رو نقدا داشته باشین، تا بعد (به قول سنجد). بر میگردم حتما!

----------


## taghvajou

سلام به همه
بریم سراغ سیلورلایت خودمون

امروز یه کم در مورد سیلورلایت 2 حرف میزنیم و یه کم هم کاربردی گپ میزنیم.

*سیلورلایت دو* که من خودم شروع کردم به مطالعه و آشنایی باهاش.
تو سیلورلایت دو مایکرو سافت یهو یه حالی به تکنولوژی جدیدش داد. اولش اسمش گذاشت سیلورلایت 1.1 !
ولی از همین ورژن بود که یه *نسخه خیلی سبک از دات نت فرم ورک* سه (Net Framwork.) و (CLR (*Common Language Runtime* بهش اضافه شد. امیدوارم که با این عظمت که فریم ورک و سی ال آر داریم آشنا باشین ولی خلاصه اش این میشه که دیگه میشه، با زبانهایی که دات نت ساپورت میکنه، برنامه نوشته بشه و موقع اجرا هم فایلها به آی ال و موتور سی ال آر برسند که ایشون هم ما رو مورد عنایت قرار بدند.

خلاصه قشنگی کار از اینجا بود که دیگه میتونستیم بدون درگیر شدن با اسکریپت و ... خیلی راحت، واسه بخش کلاینت ساید برنامه مون، کد به سی شارپ یا وی بی بنویسیم و حالشو ببریم.

دقت کنین که نسخه دات نت فریم ورک موجود توسیلورلایت ( حتی 4 ) یه نسخه خیلی سبکی از کتابخانه کلاسها پایه(Base Class Library) است! :افسرده:  مثل کنترلها، وب سرویس های ایکس ام ال، کمپوننت های شبکه و شاید گمنامتریشون هم لینک (LINQ) باشه که متاسفانه کمتر مورد استفاده قرار میگیره!

یکی از مشحرهای جدید سیلورلایت اضافه شدن سندباکسش (Sand Box)بود که کدهای مورد نظرشو تو این لایه اجرا میکنه تا برای اجراش دیگه نیازی به تبادل با ای پی آی (API) های پلتفرم نباشه. یعنی یه چیزی داره تو اون سند باکس به نام مجری دینامیک (*DLR = Dynamic Language Runtime*) که کارش اینه که فایل xap رو دریافت کنه و باز کنه که استفاده کنه.

البته تا جایی که من انگولک کردم این فایل زپ یه نوع فایل زیپه که میتونین، اگسترک کنین و توش رو ببینین.

دیگه اینکه یه زیرشاخه هایی هم اضافه شد از مدلهای رابط کاربری WPF (با کلی شکل، انیمیشن ، تصویر)  و کالکشنها، انعکاسها، رگولار اکسپرشن و شاه نیازهامون یعنی *دیتا* (*Data Access*) هم با wcf و هم با سرویس خود ADO.Net. 

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

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

----------


## taghvajou

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

پیش فرض این روش: دوستانی که از دیتا ست و تیبل آداپتور استفاده میکنن.
1- تو بخش WEB، یه دیتا ست اضافه کنین و بعد ساختن کانکشن (Connection String) و ساخت دیتا تیبل (Data Table) و تیبل آداپتور (Table Adapter) و ساخت کوری (Query) مورد نظرتون.
2- تو بخش WEB، یه وب سرویس سیلورلایتی (SilverLight-enabled WCF Service) اضافه کنید.
3- تو وب سرویس، تابع مورد نظرتون رو به صورت پابلیک (public) با استفاده از ساخته هاتون تو مورد 1 بنویسین.
4- برای استفاده از تابع در قسمت کلاینت تابع رو جزو قراردادهای اجرایی وارد کنین: برای اینکار کافیه که بالای تابع تون عبارتشو داخل براکت بنویسین یعنی: [OperationContract]. دقت کنین که اگه اینو ننویسن تابع تو قسمت سیلورلایت برنامه مون دسترس نخواهد بود.

5 - پروژه وب رو کامپایل کنین. همون F6 خودمون

از اینجا به بعد کار تو بخش سیلور لایته.

6- برین تو بخش سیلورلایت، رو پوشه سرویس رفرنس رایت کلیک کنین و گزینه Add Service Reference رو انتخاب کنین تا پنجره اش بالا بیاد.
7- تو پنجره اش با دکمه Discover سرویستون رو پیدا کنین، انتخابش کنین و نیم اسپسشو رو هم تعریف کنین و ثبت کنین.
8- این بار کل سالوشن رو کامپایل کنین
9- برین تو کد صفحه ی پیج مورد نظرتون و اول نیم اسپیس سرویس رو اضافه کنین.
10- بالا متدی اصلی پیج (همونی که کمپوننت ها رو اینیشیالایز میکنه (Initialize) ) یه نمونه (Instance) از رفرنس رو بسازین. 
11- حالا برین تو متد اصلی پیج، و با استفاده از رویداد به پایان رسیدن (Completed) تابع یه هندلر از اون رویداد (Event Handler) بسازین. 
12- برین تو شکم هندلر و کار مورد نظرتون رو بنویسین.
13- حالا برین سراغ کنترل مورد نظرتون و تو متد اجرای اون کنترل، متد غیرهمزمان (Async) تابعی که تو سرویس ساختین، رو با استفاده از نمونه ای که ازش دارین فراخوانی کنین.
14- غذا آماده ست. F5 عنایت فرمایین. :چشمک:

----------


## taghvajou

این سوال یکی از دوستانه!
برای جلوگیری از پراکندگی آموزشمون، جوابشون رو اینجا مینویسم.

امیدوارم با آی آی اس (*IIS: Internet Inforamation Services*) آشنا باشین و بدونین که چیه و چی کار میکنه! (اگر هم کسی ندونست، بپرسه خلاصه براش میگم). حالا اون لحظه که درخواست نمایش یه صفحه سیلورلایت به آی آی اس میره، برای پاسخ باید هندلر مورد نظر صفحه اش وجود داشته باشه. که این تخصیص با استفاده از مایم تایپ ها (Mime Type) انجام میشه. بگذریم.

برای این کار، باید به روش زیر مایل تایپ زپ (xap) رو (که مجموعه فایلهای مورد نیاز برای سند باکسه) به آی آی اس اضافه کنیم:

توجه: این آموزش برای آی آی اس هفت تهیه شده اگه شش هم نیازه در خدمتم.

1- مراحلی که باید بریم تا به صفحه اضافه کردن مایم تایپ برسیم به ترتیب و با عکس گذاشته شده در ضمیمه.

2- این سه تا گزینه رو اضافه کنین:
نام اکستنشن: xap   مقدار مایم تایپ:  application/x-silverlight-app
نام اکستنشن: xaml.  مقدار مایم تایپ: application/xaml+xml
نام اکستنشن: xbap. مقدار مایم تایپ: application/x-ms-xbap

3- یه بار سایت رو ریستارت کنین تا اینیشیالایز بشن.

----------


## taghvajou

سلام به همه و صبح عالی تون بخیر
jingiliboyz با آپلود کردن مشکل پیدا کرده! در مورد اینکه چه فایلهایی باید آپلود بشه هم یه توضیح سریع بدم که به وقتش اون رو هم باز خواهیم کرد:
شما پوشه های
 bin - که توش دی ال ال پروژه وب ما هست (یعنی بخش سرور ساید برنامه مون)
 Client Bin - که توش فایل زپ ما قرار گرفته ( یعنی فایلهای کلاینت سایدمون، همون چیزهایی که واسه کلاینت اونها لود میشن و ...)
 (در صورت وجود) Images، و یا سایر پوشه ها مثل مدیا
 صفحه اصلی (هم aspx و هم html) - این همون صفحه است که کنترل سیلورلایت توش قرار گرفته و ...
 سرویس - وب سرویس (ها) معرف حضور هستند دیگه ان شا الله
جاوا اسکریپت سیلورلایت که برای مرتب سازی صفحه اصلی و نمایش اونه
و Web Config - که اگه نباشه خودتون میتونین تا آخرشو حدس بزنین.

----------


## taghvajou

با اجازه تون بریم سراغ ادامه آشنایی با خود سیلورلایت

*سیلورلایت سه*
تو سیلورلایت 3 تعداد کنترلها زیاد شد. یه چیز خوب که اومد تولکیت بود (Silverlight Toolkit). دیپ لینکینگ (deep-linking) و دیتا پیجینگش (DataPager) واقعا به درد خورد. 

مدیاش تقویت شده (که بنده استفاده ای نداشتم و اطلاعاتی ندارم).

علاوه بر تغییرات تو انیمیشن ها و افکتها، مهمترین چیزی که تو بخش گرافیک بولده و به چشم میخوره بهره گیری از GPU سخت افزار کلاینته برای سرعت بخشیدن به رندرهای گرافیکی، افکتها، استایلها و ...! و جالبه که ساختارهای ویژوالشو کش میکنه تا سریعتر به کار گرفته بشه.

یه چیز خیلی به درد بخورش بایند کردن المنت به المنته که تو فیلترینگ (Filtering) و ولیدیشن (Validation) نجاتمون داد! (اگه نیازه و با مفهوم والای (_element-to-element_ binding آشنایی ندارین بگین تا در مورد این قضیه هم یه گپی بزنیم).

این یکی قابلیت جدید سیلورلایت سه یکی از نیازهامون رو تامین کرد: برخلاف سیلور یک و دو، امکان ذخیره فایل با استفاده از دیالوگ ذخیره (Save File Dialog) بر روی سیستم بود.

اگه از ای پی آی های پایپ برای ارتباط با برنامه های در حال اجرا در سیستم و حتی مانیتورینگ شبکه و رویدادهای اون بگذریم، یه چیزی که خیلی خیلی خیلی باحال بود و روح ما رو شاد کرد و بعد از دیدنش فک مان را تا دو سه روز آویزان نگه داشت: امکان طراحی برنامه برای اجرا به صورت *Out-Of-Browser* بود.

در مورد اوت از براوزر و معنیش و بقیه قابلیتهای سیلور سه در ادامه و در آتی.

شرمنده سرم خیلی شلوغه و باید به پروژه هامون هم برسم که در حال تحویل و استقراریم. :چشمک:

----------


## reza_62

سلام به نظر من برای این که چون وقت همه پره این tutorial رو همه بخونند خودشون
http://www.silverlight.net/learn/tutorials/full/1/
بعد بیاییم این جا اگه کسی سوالی داشت بگه نظرتون چیه؟

----------


## reza_62

این سری آموزشی رو هم پیدا کردم که از قبلی راحت تره 
http://weblogs.asp.net/scottgu/pages...ch-client.aspx
به نظرم با این شروع کنیم تو این فروم یکی از دوستان برا wpf یادگیری فارسی راه انداخته بود ولی ادامه پیدا نکرد واسه همین می گم با این سری شروع کنیم هم کمه هم مشکلی بود راحت تر و سریع تر می شه جواب داد

----------


## taghvajou

من که از دیدن این لینک، فوق العاده ذوق زده شدم.

سیلورلایت 5
http://forums.silverlight.net/forums...34/411224.aspx

----------


## mazoolagh

> دوستان این سکوت به معنی اینه که لال شم یا واقعا مطالب مفید هست


خوب ماهیت تاپیک چون آموزشی هست (نه سئوال و جواب) بطور متعارف استاد هست که اون رو اداره میکنه و بقیه گوش میدن و درستش هم همین هست که وسط صحبت وارد نشیم

از طرفی خود سیلورلایت هنوز برای خیلیها مشخص نیست که اصلا چی هست اینه که فعلا اکثریت شنونده هستن ولی شما مطمئن باشین که اینجا مخاطب خودش رو داره

----------


## taghvajou

> بی خیال بابا کی شروع می شه؟؟؟


می بینم که  هنوز نیومده حوصله تون سر رفته! :تشویق: 

صبور باشین و با پشتکار! هرچند دوست ندارم بی خیال بشین ولی من هم قبلا گفتم *آهسته و پیوسته*! 

از دیروز بیست و پنجمین دوره مسابقات سراسری دانشجویان کشور در دانشگاه تبریز آغاز شد. بنده از اول سال به عنوان مشاور دبیر اجرایی مسابقات در برنامه ریزی مشغول به همکاری بودم (با توجه به سوابق و علایقمون) و حالا دیگه سرمون وحشتناک شلوغه و در حال پذیرایی، برگزاری و خدمت کردن به تمام متسابقین (180 نفر از 56 دانشگاه کشور).

اگه به ساعت پست های آخرهم توجه کنین و به پریود مراجعاتم متوجه خواهین شد.

عذرخواهی میکنم اگه کمتر تونستم خدمت برسم. چون حتی اگه وقت خالی هم پیدا میکنم سریعا میرم سراغ پروژه خودمون که در حال تحویله ( سامانه مدیریت خوابگاههای دانشجویی Faran Dorm). 


از دوست خوبمون رایان گستر هم نهایت تشکر رو دارم و ازشون میخوام که اگه کمکی از دستشون برمیاد حتما ما رو همیاری کنند.

----------


## exlord

> این سوال یکی از دوستانه!
> برای جلوگیری از پراکندگی آموزشمون، جوابشون رو اینجا مینویسم.
> 
> امیدوارم با آی آی اس (*IIS: Internet Inforamation Services*) آشنا باشین و بدونین که چیه و چی کار میکنه! (اگر هم کسی ندونست، بپرسه خلاصه براش میگم). حالا اون لحظه که درخواست نمایش یه صفحه سیلورلایت به آی آی اس میره، برای پاسخ باید هندلر مورد نظر صفحه اش وجود داشته باشه. که این تخصیص با استفاده از مایم تایپ ها (Mime Type) انجام میشه. بگذریم.
> 
> برای این کار، باید به روش زیر مایل تایپ زپ (xap) رو (که مجموعه فایلهای مورد نیاز برای سند باکسه) به آی آی اس اضافه کنیم:
> 
> توجه: این آموزش برای آی آی اس هفت تهیه شده اگه شش هم نیازه در خدمتم.
> 
> ...


IIS7 خودش داره اینارو فقط تو IIS 6 لازمه
در مورد هاست هم Cpanel خودش اجازه اضافه کردن Mime type میده .... بقیه panel ها رو تست نکردم ...

----------


## taghvajou

سلام به همه و وقت بخیر

یه کم سرمون خلوت شد و تونستیم خدمت برسیم.

هاستی که ما استفاده میکنیم، Plesk بود که این امکان رو نمیده که خودت تنظیم کنی، مجبوری که به ادمین زنگ بزنی و ازش بخوای

----------


## taghvajou

برگردیم سر مبحث خودمون:
تو سیلورلایت *سه*، قابلیت اجرای خارج از مرورگر (*Out-Of-Browser*)، یکی از ایده های ناب بود! دقت کردین که مثلا یه سایتی دارین که خیلی خوشگل مشگل با جاوا اسکریپ نوشته شده و کلی هم امکانات گذاشته شده! ولی اون همه اسکریپت هر بار که برنامه میخواد اجرا بشه باید لود بشه که کلی حجم و زمان میگیره! حالا تصور کنین یه برنامه ای داشته باشین که فایلها رو یه بار دانلود کنه و خودش مدیریت کنه و هر بار که کاربر میخواد به اون سایت مراجعه کن اونها رو لود کنه!

این دقیقا همون کاری که سیلورلایت خارج از مرورگر انجام میده! خیلی راحت نصب میشه و یا پاک میشه! شورت کات میندازه و مثل یه برنامه دسکتاپ اپلیکیشن به کار میره. 
در واقع فقط برای بررسی ورژن و دریافت داده باید به سرور وصل باشه! یعنی شما میتونین یه گیم تحت وب بنویسین و کاربر خیلی راحت اون رو نصب کنه!(البته اگه شما این امکان رو فعال کنین). 
اگه سطر بالا رو خوب خونده باشین، متوجه میشین که فکر ورژن رو هم کردند! امکان توپ این تکنولوژی اینه که (با چند خط کدنویسی ساده) بعد از اینکه تو ویندوز نصب میشه، هر بار که اپلیکشن سیلورتون ران میشه، میره ورژن خودشو با سرور چک میکنه و اگه آپدیت شده باشه اون رو دانلود میکنه و کافیه که فقط کاربر یه بار برنامه رو بسته و دوباره باز کنه تا آپدیت دیده بشه!

هرچند وقتی برنامه تو حالت خارج از مرورگر اجرا میشه، اینتروپ اچ تی ام ال دیکه در اختیارمون نیست ولی کلیدهای فانکشن (Fهای بالا کیبورد) در اختیارمون قرار میگیره که میشه باهاشون شورتکات کی تعریف کرد.
 :تشویق:  :تشویق:  :تشویق:  :تشویق:  :تشویق:  :تشویق:  :تشویق:  :تشویق:  :تشویق:  :تشویق:  :تشویق:  :تشویق:  :تشویق:

----------


## exlord

> هاستی که ما استفاده میکنیم، Plesk بود که این امکان رو نمیده که خودت تنظیم کنی، مجبوری که به ادمین زنگ بزنی و ازش بخوای


اقای تقواجو میدونم ...من خودم زنگ ردم دیگه ...  :لبخند گشاده!:  ولی بعد یهخورده گشتم دبدم که پنل شمام داره .....  :قهقهه:  :قهقهه:

----------


## taghvajou

خودت چطوری ایکس لورد؟ یه وقت هماهنگ کن بیام نت یه دست دات ای بزنیم، روشن شیم! :چشمک:

----------


## exlord

> خودت چطوری ایکس لورد؟ یه وقت هماهنگ کن بیام نت یه دست دات ای بزنیم، روشن شیم!


من دیگه دات ای نمیزنم World of war craft میزنم  :قهقهه:  :قهقهه:

----------


## assari

سلام جناب تقواجو
در مورد موضوعی که مطرح کردم، اگه منو راهنمایی کنید ممنون میشم.
Entity Data Model
همونطور که گفتم شدیدا به این موضوع نیاز دارم. هرچی Search کردم به نتیجه مقبولی نرسیدم.
متشکرم

----------


## taghvajou

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

اگه خیلی عجله دارین اشکالتون طی یه پیام شخصی ارسال کنین. ترجیحا اجازه بدین ارائه مطالب بهم نخوره!

----------


## shgroup

سلام دوستان
متاسفم که این تاپیک هم مثل بقیه تاپیکهایی که فقط جهت آموزش ایجاد می شن داره به مسیر اشتباهی پیش می ره. قبل از راه افتادن این تاپیک گپ مفصلی با جناب تقواجو در مورد هدف ایجاد این تاپیک زدیم ولی مثل اینکه ایشون باز هم داره کار بقیه دوستان در تاپیکهای دیگه رو انجام می دن که به نظر بنده آینده خوبی نداره و مثل اونها کم کم OFF می شه.
هر کس داره هر سوالی که براش پیش میاد رو اینجا مطرح می کنه و اصلا به میزان اطلاعات بقیه کاری نداره و از هر جایی می پرسه.
(یادمون رفته اسم این تاپیک آموزش *گام به گام* سیلورلایته ؟ )
من که نا امید شدم حداقل واسه چند روزی که نبودم فکر می کردم مطالب مفیدی باید اومده باشه اینجا اما...
موفق باشید.
بای.

----------


## taghvajou

من از همه دوستان از بابت وقفه پیش اومده عذر خواهی میکنم! به روی چشم! سعی می کنیم این تذکر آیین نامه شما رو به گوش جان سپرده و از سیستم پیام خصوصی برای چاق سلامتی استفاده کنیم.

----------


## taghvajou

سلام به همه
در مورد سیلورلایت چهار هم به وقتش میگیم. فعلا برای اینکه روحیه مخاطبهای زنده و پیگیر نگه داریم بریم سراغ کد:
دقت کنین که ویژوال استودیو مورد استفاده مون 2010 استتتتتتتتتتت.

واینکه قصد داشتم در مورد تک تک گزینه ها توضیح بدم، ولی میبینم که خیلی عجله دارین که هر چه سریعتر یه کار هر چند کوچیک انجام بشه! پس بزن بریم:

1- یه پروژه (سالوژن) جدید بسازین با انتخاب:
 کاتوگوری سیلورلایت و گزینه سیلورلایت اپلیکیشن و انتخاب زبان (در اینجا سی شارپ)، اسم بدین و محل ذخیره رو انتخاب کنین و بعد اوکی!
تصویر شماره 1

2- بعد تنظیمات بعدی ساخت پروژه جدید سیلورلایت:
تو این صفحه اسم بخش سرورساید برنامه مون رو ست میکنیم 
و نوع وب پروجکتی که این مسئولیت رو به گردن داره. 
ورژن سیلورلایت رو هم میشه عوض کرد که لطفا بذارین *چهار* بمونه! 
اگر هم قرار باشه از ریا سرویس (RIA Services) و انتیتی فریم ورک (Entity Framework) (همونی که دوست خوبمون assari خیلی دنبالشه ) استفاده کنیم گزینه آخر رو تیک میزنیم که فعلا بذارین باشه! تیک نزنین تا به وقتش!
اوکی آخر یادتون نره! (دوستان اوکی را OK نخونین بلکه Oki بخونین  :لبخند گشاده!: )
تصویر شماره 2

3- سالوشن ساخته و آماده است
تصویر شماره 3

4- به سرورساید (یعنی بخش WEB) یه دیتا ست (DataSet) اضافه کنین:
از گزینه Add --> New Item استفاده کنین.
از کتوگوری دیتا گزینه دیتاست رو انتخاب کنین و بهش اسم بدین و به سیستم اضافه کنین
تصویر شماره 4 , 5

----------


## taghvajou

5- تو دیتاست یه تیبل آداپتور (TableAdaptor) و دیتا تیبل (DataTable)  بسازین:
رایت کلیک کنین و از گزینه Add ---> TableAdaptor استفاده کنین
کانکشن استرینگ رو ست کنین

----------


## Somayeh_Zamani

با سلام و احترام،
من یک نگاه کلی به این تاپیک انداختم انگار زیاد مفید نیست. چرا انقدر بی راهه می رید؟ حرفهای نامربوط بین اش زده می شه و مطالب دسته بندی شده نیست.

----------


## shgroup

> با سلام و احترام،
> من یک نگاه کلی به این تاپیک انداختم انگار زیاد مفید نیست. چرا انقدر بی راهه می رید؟ حرفهای نامربوط بین اش زده می شه و مطالب دسته بندی شده نیست.


این دوستمون هم نظر منو داشتن. قابل توجه جناب تقواجو  :متفکر:

----------


## taghvajou

سلام به همه
یه خداقوت و خسته نباشید به اونهایی که با امتحانات دست و پنجه نرم می کنند. ان شا الله که به نتیجه زحمتهاتون برسین. ما هم دعا می کنیم.

از جام جهانی چه خبر؟ نگاه میکنین؟

یکی از دوستان، بهم پیام شخصی فرستاده بودند و میگفتند که با استفاده از دیتاست و ... نمی تونند کار کنند و ... .  :خیلی عصبانی:  :خیلی عصبانی:  :خیلی عصبانی: 
به این سوال ایشون لبیک میگم ولی یه نکته رو یادآوری میکنم که لطفا حواستون باشه که این تاپیک برای آموزش سیلورلایت راه اندازی شده نه واسه اینکه هر آنچه که در مورد سی شارپ و اس کیو ال سرور و دات نت نیاز دارین.

و یه چیز دیگه! از اینکه فاصله من نمی تونم تند تند خدمت برسم. عذر خواهی میکنم. ولی این رو مطمئن باشین که *آهسته و پیوسته * در خدمتون خواهم بود. 

خوب دیگه بریم سراغ آموزش خودمون.
برین پست قبلی تا پایان مرحله 3 که سالوشن آماده شد.

خوب:

4- تو قسمت وب سالوشن یه کلاس درست کنید مثلا به نام General.cs
(تصویر شماره 1)

5- تو کلاستون یه رشته عمومی به نام و به عنوان ConnectionString درست کنین.


public static string connectionstring = "Data Source=AT-PC/SQLExpress;Initial Catalog=Barnamenevis;Persist Security Info=True;User ID=BarnamenevisUser;Password=123456";

  ( تصویر شماره 2) 
کانکشن برای ارتباط آماده با پایگاه داده آماده است. من یه دیتابیس به نام همین برنامه نویس ساختم.
در مورد اجزای کانکشن استرینگ هم امیدوارم که دیگه نیاز به توضیح نباشه

6- حالا بریم سراغ ساخت سرویس برقراری ارتباط:
به قسمت وب (طبق همیشه از گزینه add/new item) استفاده کنین و تو صفحه اضافه کردن آیتم جدید، کاتوگوری سیلورلایت رو انتخاب کنین و از بین گزینه های موجود، Silverlight-enabled WCF Service رو انتخاب کنین. 
و اسم سرویس رو هم بذارین و اضافه کنین.
(تصویر شماره 3 )

چنین صفحه ای نمایان میشه
(تصویر شماره 4)

7- تو سرویس و تو کلاس سرویس، تابع مورد نظرمون رو درست میکنیم:
اون تابع اولیه DoWork رو و کامنت هاشو پاک کنین.

دقت کنین برای اینکه هر تابعی که تو سرویس می نویسین برای استفاده تو قسمت سیلور، در دسترس باشه، نه تنها که باید عمومی تعریف بشه، بلکه باید بالای تابع داخل براکت عبارت OperationContract رو بنویسید.

[OperationContract]
باید به تابع بنویسیم که مثلا تعداد برنامه نویسهامون رو بهمون بده!
یه تابع عمومی با خروجی اینت:

نیم اسپس لازم برای کار با دیتا رو اضافه کنین.

using System.Data.SqlClient;
خوب یه کانشکشن استرینگ بسازین با ورودی همون کانکشنی که تو کلاس جنرال ساخته بودیم. بعد، باز کردن کانکشن، بعدش کامند () درست کنین و کوری () بدین و دستور اجرا و دست آخر بستن کانکشن یادتون نره!


            SqlConnection connection = new SqlConnection(General.connectionstring);
            connection.Open();
            SqlCommand command = new SqlCommand("", connection);
            command.CommandText = "SELECT Count(ProgrammerID) FROM Programmer";
            _resultCount = (int)command.ExecuteScalar();

            connection.Close();

برای دیدن نسخه رنگی! تصویر شماره 5

دوستان من خسته شدم! شما هم خسته نباشین. برمیگردم و ادامه میدم.

----------


## taghvajou

بعد از صرف یه چایی، ادامه بدیم:

8 - بعد از آماده سازی تابع، حالا یه بار بخش وب رو بیلد (Build) کنین.

9- حالا تو بخش سیلور سالوشن، یه رفرنس سرویس باید اضافه و کانفیگ بشه:

طبق تصویر شماره (1)، در درخت سالوشن، بر روی رفرنس رایت کلیک کنین و گزینه اضافه کردن مرجع سرویس (add service reference) رو بزنین.

در صفحه نمایان شده، با زدن دکمه اکتشاف (Discover) سرویس های موجود لیست میشن، تصویر شماره (2)

نیم اسپیس سرویس رو هم نامگذاری کنین و اوکی بزنین. تصویر شماره (3)

10- حالا صفحه زمل مورد نظرتون رو باز کنین (در اینجا MainPage.xaml) و 
کنترل مورد نظرتون رو از تول باکس سمت چپ بندازین تو صفحه (در اینجا یه لییبل label)

تصویر شماره (4)

و نام گذاری کنین.(در اینجا uxCountlabel نام گذاری کردم)

تصویر شماره (5)

----------


## taghvajou

11- حالا برین تو صفحه سی شارپ این پیج (در اینجا MainPage.xaml.cs)
اول اضافه کردن نیم اسپیس سرویس:

using BarnameNevis.BarnameNevisServiceReference;


قبل از کلاس اصلی پیج (در اینجا MainPage) یه نمونه خصوصی (Instance) از کلاس کلاینت سرویس بسازین.

private BarnamenevisServiceClient client = new BarnamenevisServiceClient();




در داخل نمونه کلاینت سرویستون، یه هندلر داریم، ساخته شده از همون تابعی که تو سرویس نوشتیم: هندلر رویداد پایان یافتن تابع، compeleted
و متد مورد نظرمون هم قابل انجام  به صورت ناهمزمان (async) که خیلی خوبه!

در داخل تابع صفحه، بعد از تابع فراخوانی و آماده سازی  اولیه(InitializeComponent)، 
یک رویداد از هندلر از تابع مورد نظرتون بسازین:

   client.GetProgrammersCountCompleted += new EventHandler<GetProgrammersCountCompletedEventArgs  >(client_GetProgrammersCountCompleted);


که اگه با Tab از کد اسنیپت استفاده کنین، خودش تابع اتمامش رو هم میسازه:


        void client_GetProgrammersCountCompleted(object sender, GetProgrammersCountCompletedEventArgs e)
        {
              throw new NotImplementedException();
        }



تو شکم این تابع کاری که مدنظرتونه رو بنویسین (دراینجا من میخوام تعداد مورد نظر نشون بدم):

uxCountLabel.Content = e.Result.ToString();


حالا باید تابع رو یه جایی اجرا کنیم. یه دکمه () بندازین و اسمش رو هم ست کنین و روش دابل کلیک کنین و تو رویداد کلیکش تابع اجرایی رو فراخوانی کنین. تصویر شماره (1)


        private void uxLoadButton_Click(object sender, RoutedEventArgs e)
        {
            client.GetProgrammersCountAsync();
        }



یه تصویر از کدهای نوشته شده - تصویر شماره (2)

12 - مصدوم آماده است. لطفا F5 مرحمت فرمایید.

----------


## taghvajou

امیدوارم که مطالب امروز مفید باشند.

----------


## shgroup

عالی بود
لطفا فایل این پروژه هم ضمیمه گردد.

----------


## taghvajou

چشم! فایل ضمیمه کردم.
چایی؟ نوشابه؟ شربت؟ هندونه؟  :چشمک: 
چیز دیگه ای میل داشتین، اصلا تعارف نکنین ها! :قهقهه: 
در خدمتم.

----------


## taghvajou

سلام به همه
یه مطلب جالب در مورد همخوانی سیلورلایت با پلتفرمها و مرورگرهای مختلف:
http://www.microsoft.com/getsilverli...l/default.aspx

----------


## taghvajou

سلام به همه
یکی از دوستامون تو اینجا
https://barnamenevis.org/showthread.php?t=231493

پرسیدند که :
طریقه ی ذخیره ی اطلاعات یک TextBox درون پایگاه داده در سیلورلایت را به  ساده ترین شکل ممکن به وسیله ی کد نویسی بیان کنید*؟*

برای جمع و جور بودگی پاسخها من همینجا جوابشون رو می نویسم.
پس Let's Go

----------


## taghvajou

برای اینکه دیگه تکراری گویی نکرده باشیم، حتما اول پست های شماره 31، 35،  36، 37 و 40 رو جلوتون باز کنین که من فقط بگم تو کدوم مراحل باید تغییر  ایجاد کرد.

مرحله 1 الی 6 فرقی نمیکنه!

در مرحله 7 بریم یه تابع دیگه بنویسیم:
(تفاوت تو کوئری است فقط!)

        [OperationContract]
        public bool InsertProgrammerName(string FirstName)
        {
            bool _result = false;

            SqlConnection connection = new SqlConnection(General.connectionstring);
            connection.Open();
            SqlCommand command = new SqlCommand("", connection);
            command.CommandText = "INSERT INTO [Programmer] ( FirstName ) VALUES (@firstname) ";
            command.Parameters.AddWithValue("@firstname", FirstName);
            try
            {
                if (command.ExecuteNonQuery() == 1)
                    _result = true;
            }
            catch { _result = false; }

            return _result;
        }
یه تابع نوشتیم که ورودیش نام برنامه نویس باشه و خروجیش یه فلگ بول که اگه ترو باشه یعنی ثبت شده و اگه فالس باشه یعنی ثبت نشد.(سعی کنین تو تابع نویسی کامنت یادتون نره!)
البته خود دستور ExecuteNonQuery یه مقدار صفر و یک بهمون میده از نوع اینت ولی با توجه به تعداد بایتهای اشغالی دو نوع متغیر اینت و بول، من برای سبک شدن از بول استفاده میکنم.

(تصویر شماره 1)

مرحله 9 رو انجام بدین

تو مرحله 10:
اگه بار اول که این سرویس رو استفاده میکنین، عین مرحله 10 برین جلو.
ولی اگه قبلا این سرویس رو درست کردین و اضافه کردین:

رو سرویس رایت کلیک کنین و اون را *آپدیت کنین*

(تصویر شماره 2)

تو مرحله 11:
نیم اسپیس رو به همون روال اضافه کنین. نمونه ای از سرویس کلاینت بسازین.

هندلر اتمام تابع ثبت نام برنامه نویس رو بسازین و داخل حداقل یه پیام بذارین که ثبت شدگی رو بهمون اعلام کنه:

        public MainPage()
        {
            InitializeComponent();
            client.GetProgrammersCountCompleted += new EventHandler<GetProgrammersCountCompletedEventArgs  >(client_GetProgrammersCountCompleted);

            client.InsertProgrammerNameCompleted += new EventHandler<InsertProgrammerNameCompletedEventArg  s>(client_InsertProgrammerNameCompleted);
        }

        void client_InsertProgrammerNameCompleted(object sender, InsertProgrammerNameCompletedEventArgs e)
        {
            MessageBox.Show("ثبت شد.");
        }

حالا یه تکست باکس بندازین تو صفحه زمل و نام گذاریش کنین (در اینجا: uxProgrammerNameTextBox).
 یه دکمه جدید هم بندازین و نام گذاریش کنین (در اینجا uxInserButton)
(تصویر شماره 3)

دوستان از گذاشتن اسمهای بلند و گویا اصلا ابا نداشته باشین، یه بار یه اسم بلند گذاشتن بهتر از سردرگم شدن تو اسمهای مخففه! نگران تایپ اسمها هم نباشین که خدا برکت بده به اینتلیسنس ویزوال استودیو!

به قول بخش خبری 21 شبکه یک : *و در ادامه*
رو دکمه دابل کلیک کنین و توش تابع اجرای دستور ثبت نام برنامه نویس رو از داخل نمونه سرویس ساخته شده با پارامتر ورودی متن تکست مورد نظر کنین:

        private void uxInsertButton_Click(object sender, RoutedEventArgs e)
        {
            client.InsertProgrammerNameAsync(uxProgrammerNameT  extBox.Text);
        }

(تصویر شماره 4)

مصدوم آماده است.


بچه ها! دیدین دیروز برزیـــــــــــل چطور از جام حذف شد!!! :کف کرده!: 

التماس دعا داریم.

----------


## taghvajou

سلام به همه مجددا!
تو تاپیک زیر:
https://barnamenevis.org/showthread.php?t=231576
دوست عزیزی (آقا محمد متا) در مورد نحوه نمایش راهنما سوال کرده بودند که بحث به نحوه نمایش عکس و نمایش اچ تی ام ال رسید. ان شاء الله به ترتیب زیر همینجا خدمتتون عرض خواهم کرد.
1- نحوه آپلود عکس
2- نحوه نمایش عکس از پایگاه داده
3- نحوه نمایش اچ تی ام ال

----------


## mohammad meta

دوست عزیز زودتر شروع کن دیگه همچنان منتظرم

----------


## mostafarastin239

سلام
من از یه سایت خارجی یه چیزایی برای ذخیره ی داده در بانک پیدا کردم ولی خطا میده می دونم توضیح داده شده ولی می خواهم بدونم مشکل کار من کجاست. یه فایل ورد و دوتا عکس ضمیمه کردم.

----------


## taghvajou

مصطفی جان!
علی الظاهر، پراکسید تایپ های تعریف شده تو کلاس اینتیتی کارمند، یکییشون سردر هواست! یعنی کامپایلر تو دیکشنری که میخواد به ازای هر نوع، مقدارش رو بخونه، نتونسته تشخیص بده که مثلا به ازای نوع (کلید) نام چه مقداری باید از دیکشنری تعریف شدش، بخونه!

----------


## mostafarastin239

سلام مهندس تقواجو،
شما اگر سطح بیان را به زیر دیپلم کاهش بدید شاید بفهمم چی می گید همه که مثل شما حرفه ای نیستن.البته ببخشیدا!!؟
به ساده ترین زبانی که بلدید بگید چیکار کنم.
با تشکر

----------


## shgroup

سلام دوست عزیز (تقواجو)
بنابه صحبتی که با هم داشتیم راجع به مشکلی که تو ایجاد پروژه ای که آموزش داده بودید و من به مشکل بر خورده بودم این فایل را ضمیمه می کنم در صورت امکان یک نگاهی بهش بندازید ممنون میشم
جهت اطلاع دوستان دیگه هم بگم که من تو پروژه در مرحله Add Service reference با پیغام خطا رو به رو میشم ابتدا تصور کردم شاید مشکل از Connection String است اما بعد از تغییر رشته اتصالی باز هم مشکل پابرجاست اگه از دوستان کسی پروژه ای که جناب تقواجو در مرحله قبل آموزش دادند را مرحله به مرحله جلو رفتند و به مشکل بر نخوردند اینجا اعلام کنند و اساتید 1 نگاهی به مشکل بنده هم بیندازید ممنون میشم.
عکس پیغام خطا هم ضمیمه شد.

----------


## taghvajou

سلام به همه 
خوب خدمت آقا ایمان عارض که:

همون طور که تو گوگل تاک باهم بحث کردیم و شما متن دیتل این پیام رو واسم دادی، گفتم که مشکل از کانکشن استرینگه!

این کانکشن استرینگ شماست:

public static string connectionstring = "Data Source=OMID-PC/;Initial Catalog=Users;Persist Security Info=True;User ID=iman;Password=12345";


و این هم کانکشن استرینگی که من واسه دیتابیس شما ساختم و باهاش به سرویس رو دپلوی کردم و ...

public static string connectionstring = "Data Source=AT-PC\\SQLEXPRESS;Initial Catalog=Users;User ID=Users;Password=12";


اما موضوع از چه قراره؟!
تو یه استرینگ که بین دو تا دابل کونئیشن قرار میدیم ("")، ما رشته مورد نظرمون رو می نویسیم. هر موقع بخواهیم وسط رشته کاری بکنیم از کارکتر جداکننده مفسر( \ ) استفاده میکنیم. 
مثلا اگه بخوایم وسط رشته مون یه تب بندازیم می نویسیم ("ali\ttaghvajou") که خروجی این رشته میشه: ali        taghvajou. و انواع دیگه اش مثل انداختن به سطر جدید.

حالا اگه قرار باشه از خود کارکتر (\) استفاده کنیم داخل رشته باید این رو به کامپایلر یه جوری بفهمونیم که برداشت دیگه ای نکنه، و این بار به عنوان کارکتر فرض کنه نه جداکننده!

تو این شرایط از دوتا بک اسلش استفاده میکنیم یعنی (\\) همون کاری که من کردم.

ولی دقت کنی شما از بک اسلش استفاده نکردی تو رشته ای که به عنوان کانکشن استرینگت!

درسته؟!

البته دلیلش اشتباه رو میشه به جز اشتباه چشم ناشی از یه جایی دیگه هم دونست: شما این کانکشن استرینگ رو تو سند xml که به عنوان کانفیگ تو پروژه تولید شده هم دیدین. غافل از اینکه مدل شی سندی (DOM) یه سند ایکس ام ال رفتاری متفاوت داره از یه رشته! و نیز استودیو هم میدونه که یه کانکشن استرینگ رو از تو فایل کانفیگ چطور بکار ببره!

نکته کار این بود.

برای اینکه حرفهامو باور کنی هم، هم سالوشنت رو مجددا برات آپ میکنم و هم تصاویری که بعد از اد کردن سرویس ازش گرفتم. البته بیشتر ادامه ندادم.

----------


## taghvajou

ضمنا دوستان نام خانوادگی من تقوی جو نوشته میشه و تقواجو خونده میشه مثل عیسی و موسی! :قهقهه:

----------


## shgroup

سلام دوباره بر (*تقوی  جو*) عزیز
دوست عزیز من دوباره کاری که شما گفته بودید رو تست کردم اما به دلیل اینکه من تو sql server ، سروری با نام پیشنودی (به عنوان مثال کانکشن استرینگ خودتون) که SQLEXPRESS// داشته باشه ندارم و نام سرور من فقط OMID-PC خالی است به همین دلیل نیازی به // یا / نیست و همه حالات رو تست کردم اما باز هم نشد!!
لطفا راهنمایی بفرمایید ممنونم

----------


## taghvajou

علیک سلام.
اصلا یه کار جدیدتر میکنیم که دیگه به این مشکلات برنخوریم. استفاده از دیتاست!
تو پست بعدی اول این رو میگم بعد میریم سراغ عکس
یاعلی التماس دعا

----------


## taghvajou

سلام به همه
بریم سراغ وعده ای که با آقا ایمان داده بودیم.

با رایت کلیک تو پروژه بخش web، و با استفاده از گزنیه AddNewItem از کاتوگوری دیتا یه دونه DataSet به انتخاب و نامگذاری (در اینجا ProgrammerDataSet) وبه پروژه اضافه کنین.

خوب
حالا تو دیتاست رایت کلیک کنین و یه دونه تیبل آداپتور اد کنین.

همین که میخواد اد بشه صفحه اضافه کردن کانکشن استرینگ میاد.

دکمه رشته ارتباطی جدید (NewConnectionString) رو بزنین.
دوباره یه صفحه مودال باز میشه. از کمبوباکس اول نام سرور رو انتخاب کنین. بعد ذیلش نام کاربری و پسورد یوزر دیتابیس رو وارد کنین و دست آخر نام دیتابیسی که به این یوزر مپ شده رو هم انتخاب کنین.
اول دکمه تست رو بزنین تا مطمئن شین (دکمه پایین چپ)
بعد دکمه اوکی رو بزنین. تا صفحه کانشکن جدید بسته بشه

در ادامه به کانکشن استرینگتون اسم بدین (در انیجا ProgrramerConnectionString)

دوباره ادامه
حالا با زدن دکمه ساخت کوئری (Query Buliing)  صفحه ساخت کویری باز میشه، تیبل مورد نظر رو اضافه کنین، توش کویری مورد نظر رو بنویسین 
نکست کنین
اسم کویری رو بنویسین

و فینیش بزنین.
حالا بیلد کنین.

----------


## taghvajou

سلام به همه
ببخشید دیروز عجله ای شد نتونستم عکسهاشو ضمیمه کنم. تصویرها رو به ترتیب نگاه کنین.

بعد از ساخت دیتاست و آداپتور و کوئریهای لازم و بیلد کردن اون، برین تو وب سرویس و یه تابع جدید بنویسن با استفاده از آداپتور و متدهاش، پروژه رو بیلد کنین و ادامه کار رو هم دیگه میدونین (آپدیت کردن وب سرویس تو بخش سیلورلایت و ...)

متد جدیدی که تو وب سرویس نوشتم:

        [OperationContract]
        public int GetProgrammerCount()
        {
            int _result = 0;

            BarnameNevisDataSetTableAdapters.ProgrammerTableAd  apter adapter = new BarnameNevisDataSetTableAdapters.ProgrammerTableAd  apter();
            _result = (int)adapter.GetProgrammerCount();

            return _result;
        }



فقط یه نکته اینکه تعداد تصاویری که تو هر پست میشه ضمیمه کرد محدوده! لذا طی چند پست خدمتتون تقدیم میکنم.

----------


## taghvajou

ادامه تصاویر

----------


## taghvajou

باز هم ادامه تصاویر

----------


## taghvajou

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

----------


## taghvajou

سلام دوست عزیز (خانم یا آقای -----|------ )
این توضیح های که دادم *در واقع مراحل 4 و 5 و 6 و 7 و 8 از پست شماره 35 بودند* که اونجا همه کار ها رو دستی انجام دادیم ولی اینجا با بهره گیری از ای دی او دات نت!
منظورتون رو واضح تر و لطفا همینجا مطرح کنین!

ادامه کار عین بقیه! پست 36 و به بعد!

----------


## Hossein tazimi

بابا silverlight !   اول ازتون تشکر می کنم دوم آموزشتون کی شروع میشه؟ سوم اینکه اگه آموزشتون در طی هر چند گام با یک مثال از اون گامها همراه شه عالی میشه

----------


## Hossein tazimi

ببخشید! توی ضمیمه ها تون امکان جمه آوری آموزش های تابحال (pdf ای ...) هست؟؟؟

----------


## taghvajou

سلام به همه و حسین آقای گل!
خیالت راحت مهندس! نهضت ادامه دارد!
مفصل در خدمت خواهم بود.

----------


## taghvajou

سلام به همه
بعد از مدتی که سایت برنامه نویس بالا نمی اومد (صادقانه اینا بهونه بود، سر منم شلوغ بود)، بین آموزشمون فاصله افتاد. حالا امروز میخوایم ادامه بدیم و بریم سراغ وعده قبلی مون یعنی عکس:

*اولین مطلب در مورد گذاشتن عکس به صورت استاتیکه:*

1- از تول باکس یه کنترل عکس (Image) بندازین تو صفحه زمل و نامگذاری کنین. (در اینجا uxImageBox )
تصویر شماره 1

2- رو بخش سیلورلایت رایت کلیک کنین و یه پوشه درست کنین به نام همون ایمیجز. بعد رو خود پوشه هم رایت کلیک کنین و از گزینه Add>Existing Item استفاده کنین و یه تصویر به پوشه ایمیجز اضافه کنین.
تصویر شماره 2

نکته خواهشا عادت کنین به پوشه بندی و نیم اسپیس سازی و ... که تو پروژه های بزرگ گیج میشه آدم!

3- حالا ایمیج باکس رو انتخاب کنین و از تو پنجره پراپرتیز (جنوب شرقی استودیو معمولا) پراپرتی سورس این قاب رو مقدار دهی کنین به با زدن دکمه براوزش و انتخاب تصویر مورد نظرتون.

تصویر شماره 3 

دست آخر هم با تنظیم بقیه پراپرتی ها، حالت بهینه تصویرتون رو بدست بیارین مثلا مثل استرچ کردن.

تو قسمت بعدی گذاشتن تصویر به صورت دینامیک رو تقدیم خواهم کرد.
در این ماه شعبان، دوستان رو از دعای خیر خودتون بی نصیب نذارین.

----------


## taghvajou

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

طبق دستور کار قبلی امروز میریم سراغ مقدار دهی تصویر با کد و به صورت دینامیک:

1- تو همون سالوشن قبلی مون، تو صفحه زمل، یه دکمه بندازین و نامگذاری کنین (در اینجا Set Image). قصد داریم به دنبال کلیک شدن این دکمه، یه عکس موجود در ریسورس در مقدار سورس ایمیج باکس (به پست قبلی توجه کنین) ست بشه.
تصویر شماره (1)

2- اونت کلیک این دکمه رو بسازین: دو روش وجود داره:
یک: دابل کلیک کنین روش: این روش برای همه جا کار راه انداز نیست.
دو: تو تگ اصلی کنترل اونت مورد نظرتون رو بنویسین و یه نیو کنین مانند تصویر شماره (2) - این روش برای همه کنترلها به کارمیاد.

*نکته:* تو مقداردهی از طریق کد، شما نمی تونین پث (Path) عکس رو از ریسورس مستقیم بذارین تو مقدار پراپرتی سورس عکس، بلکه باید اول یه نمونه از کلاس بیت مپ (BitMap) از نیم اسپیس (System.Windows.Media.Imaging) بسازین و پث رو در قالب یه یو آر آی (URI) به خوردش بدین و دست آخر مقدار پراپرتی سورس عکس رو با این بیت مپ پر کنین.
این که چرا تو مقدار دهی کردن در صفحه زمل  (XAML) این ادا و اصول رو در نمیاریم اینه که خود ویژوال استودیو زحمت این کارها رو میکشه!

3- خوب تو اونت اجرای دکمه، کد زیر را بنویسین با توجه به توضیحات بالا البته:
البته یه کمک دیگه اینکه برای رفتن به اونت مورد نظر، رو اونت مورد نظرتون تو صفحه زمل رایت کلیک کنین و نویگیت (Navigate) کنین به رویداد مورد نظرتون - تصویر شماره (3)

            uxImageBox.Source = new BitmapImage( new Uri("/BarnameNevis;component/Images/Avator.jpg", UriKind.Relative));

تصویر شماره (4)
البته گاهی مرض مجمل نویسی بنده عود میکنه، ولی برای دوستانی که یه مقدار تازه کارند، توضیح هم عرض خواهم کرد.

4- خوب دیگه هیچی! نکته فقط همونی بود که گفتم! برنامه رو اجرا کنین! مصدوم آماده است. F5 عنایت فرمایین.

تو پست ها بعدی نحوه آپلود کردن و ذخیره عکس تو پایگاه داده رو خدمتتون عرض خواهم کرد.

برای سلامتی و تعجیل در ظهور آقا و مولامون، یه صلوات از ته دل بفرستین.
التماس دعا

----------


## taghvajou

یادم رفت بگم: :لبخند گشاده!: 

Uri _uri = new Uri("/BarnameNevis;component/Images/Avator.jpg");
BitmapImage _image = new BitmapImage(_uri);
uxImageBox.Source = _image;
این مفصلا همون کد بخش 3 پست بالا بود. در واقع اول یه نمونه یو آر آی ساختم با آدرس پث تصویر.
بعد یه نمونه بیت مپ ساختم (از اور رید دوم کلاس بیت مپ استفاده کنین از تون یو آر آی میخواد.)
دست آخر هم مقدار دهی سورس ایمیج باکس با مقدار ایمیج ساخته شده!

----------


## mostafarastin239

> سلام به همه و آقا ایمان گل!
> در مورد بسم الله که گفتین، ماهم لبیک میگیم و شروع میکنیم
> خوب بریم سراغ سوال اولتون که تو چت جوابشو بهتون دادم، ولی برای استفاده بقیه هم میگم:
> 
> دقیقا به قول شما، فقط چندتا فونت خاص انگلیسی تعریف شده که متاسفانه فونت مهم و پرکاربرد تاهوما بین اونها نیست.
> دقت کردین که هر *Solution* سیلورلایت از دو تا پروژه تشکیل شده: یکیش خود سیلور و فرمها و متعلفاتش با نام سالوشن، و دیگری پروژه وب اونه!
> 
> در مورد اینکه هر کدوم چیه و چه وظایفی دارند بعدا مفصلا توضیح میدم، فعلا بریم سراغ جواب:
> 1- تو پنجره *ُSolution Explorer، * تو ریشه پروژه سیلورلایت، یه پوشه درست کنین و اسمش رو فونت بذارین
> ...


  سلام
این *BuildAction* که می گی را از کجا باید بخرم؟
با تشکر

----------


## taghvajou

سلام به همه
خریدنی نیست! پیدا کردنیه! :چشمک: 

تو پراپرتی باکس! این ویژگی تمام آبجکت هاست. پنجره پراپرتیز رو هم تو جنوب شرقی ویژوال استودیو (به صورت پیش فرض) می تونین پیدا کنین.
تو عکس ضمیمه هم بهش اشاره شد.

----------


## mostafarastin239

سلام
دست شما درد نکنه
با تشکر

----------


## bluemoonatnight

سلام .
می شه لطفا بگین که خود فولدر باید آپ بشه یا محتواش ؟
من تو لوکال با اس کیو ال راحت ارتباط بر قرار می کنم ولی موقعی که آپ میکنم error میده و فقط صفحه اول سایت بالا میاد

----------


## taghvajou

> سلام .
> می شه لطفا بگین که خود فولدر باید آپ بشه یا محتواش ؟
> من تو لوکال با اس کیو ال راحت ارتباط بر قرار می کنم ولی موقعی که آپ میکنم error میده و فقط صفحه اول سایت بالا میاد


سلام به همه و شبتون بخیر
میلاد خانم معصومه رو هم بهتون تبریک میگم و اونهایی که دستشون به ضریح میرسه رو هم التماس دعا داریم!

اول یه خسته نباشید به خودم بگم که بالاخره از طوفان ثبت نام ورودی های جدید دانشگاه خلاصی پیدا کردم.
دوم هم یه عذرخواهی از بابت تمامی دوستانی که به این تاپیک سر میزند تا تو بحث شرکت کنند.

و اما پاسخ این دوستمون:
برای اینکه اشکال کار کامل قابل درک بشه باید یه چند تا نکته عرض کنم.

تو سیلورلایت اگه دقت کرده باشین ما یه وظیفه جابه جایی دیتا و داده رو به یه سرویس واگذار میکنیم. یه سرویس از نوع دبیلیو سی اف (wcf) که ارتباط با سیلورلایت در اون فعال شده است یعنی (silverlight-enalbled) که تو تمپلیتهای نیو آیتم وجود تو کاتوگوری وب هست.

و از توابعی که تو این سرویس نوشته شده استفاده میکنیم.
پس با این تفاصل باید دقت کنیم که صرف آپلود کردن اون سه تا پوشه و چند تا فایل کانفیگ کافی نخواهد بود *البته برای دریافت دیتا*
(این البته را واسه حالتی میگم که از سیلورلایت به عنوان یه بنر مدیا یه چیزی از همون فلشهایی که بالای سایت ها میذارن و یا یه پلیری که فایل مدیاشو رو از یه پوشه تو هاست میخونه، استفاده شده باشه خوب بالتبع دیگه نیازی به سرویس نخواهد بود)

----------


## taghvajou

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

اگه دقت کرده باشین بعد از اینکه ما به پروژه ی وب سالوشن مون یه وب سرویس اضافه کردیم، میام تو پروژه سیلور سالوشنمون رفرنس وب سرویس رو اضافه میکنیم. (به یاد بیارین پست شماره 36 رو)
به دنبال این اضافه کردن یه فایل کلاینت کانفیگ به پروژه سیلور اضافه میشه:
تصویر شماره 1

فایل رو باز کنین. تو تگ کلاینتش آدرس یوآر الی که این وب سرویس از اون به پروژه اضافه شده دیده میشه که در اینجا طبیعتا لوکال هاست و پورتش خواهد بود:
تصویر شماره 2

حتما اگه سایت سیلورلایتی نوشتین که از وب سرویس توش استفاده کردین، قبل از آپلود این فایل رو باز کنین و آدرس سایت خودتون رو به جای لوکال هاست وپورت بنویسین!
تصویر شماره 3

----------


## saradashti

با سلام و خدا قوب به آقای تقوی جو 
بحث واقعا خوبی را شروع کردید
من مدتی بود که میخواستم silverlight را شروع کنم و حالا این تاپیک واقعا من را کمک میکنه
 بیصبرانه منتظر ادامه آموزش هستم

----------


## taghvajou

سلام به همه
عرض ادب واحترام به همه دوستان و خواهر بزرگوارمون سرکار خانم دشتی

مطلب امروز ادامه مقوله عکس و این بار آپلود اون به پایگاه داده است.
مطالبی که ذیلا خدمتتون عرض میکنم برای جلوگیری از تکرار، در راستا و مرتبط با پست قبلی آپلود عکس (شماره 64) تقدیم میشه.

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

قبلا توضیح مطلب درباره نحوه نگهداری تصویر نکاتی رو عرض کنم:
*محل نگهداری تصویر*: یکی تو دیتابیس، یکی تو یه پوشه تو سرور و یکی هم تو سایت های آپلود عکس. برای نگهداری عکس تو دیتابیس، عکس رو بعد از آماده سازی به آرایه ای از بایت تبدیل میکنیم و اون بایت هارو تو دیتابیس ذخیره میکنیم، تو روش دوم عکس رو کپی میکنیم تو یه پوشه خاص و نام و مسیرش رو تو پایگاه داده ذخیره میکنیم، روش سوم یو آر ال عکس رو ذخیره میکنیم.

نکته های بعدی در مورد نوع تصاویر مد نظر و اندازه اونهاست که برای جلوگیری از اینکه پست مون فقط به توضیح و لالایی سپری نشه ادامه نکات رو تو پست های بعدی میگم و حالا بریم سراغ کد:

هدف پیاده سازی روش اول:
برای آپلود کردن ما مثل ای اس پی دات نت کنترل آپلود نداریم و باید خودمون بسازیم:

1- یه کنترل بردر (Border) بندازین تو فرم و یه کنترل ایمیج (Image) هم تو شکمش و بعد نامگذاری کنینش. (در اینجا uxUserImageBox) تصویر شماره 1

2- یه دکمه بندازین کنارش و نامگذاریش کنین (uxUploadImageButton) و بعد براش اونت (Event) کلیک بسازین. (ساخت اونت : بند دوم پست 64)

3- تو شکم اونت کلیک دکمه، باید از کلاس Open File Dialog یه نمونه بسازیم و با استفاده از اون عکس مورد نظر رو دریافت کنیم:

        private void uxAddUserPicButton_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog openDilog = new OpenFileDialog();
            openDilog.Multiselect = false;
            openDilog.Filter = "Image|*.jpg|*.JPG";
            if ((bool)openDilog.ShowDialog())
            {

            }
            else
                MessageBox.Show("Nothing Selected.");
}

برای جلوگیری از انتخاب چند تا تصویر، ویژگی مالتی سلکت رو کور کنین و اگه خواستین فرمت عکس هایی که میشه گرفت رو هم فیلتر. با استفاده از شرط if مقدار بازگشتی متد شودیالوگ رو کنترل کنین که حتما چیزی انتخاب شده باشه (کست ضمنی به بول فراموش نشه)

تو کلاس OpenFileDiolog متدهای لازم از جمله باز کردن و خواندن (OpenRead) تدارک دیده شده که این متد فایل رو باز میکنه و بعد از خوندن یه خروجی استریم (stream) بهمون میده

حالا دیگه باید یه تابع بنویسیم که استریم رو به بایت و ایمیج تبدیل کنیم.

4- تابع تبدیل استریم به آرایه ای از بایت
[code][
        public static byte[] ConvertStreamToByte(Stream stream)
        {
            BinaryReader binary = new BinaryReader(stream);
            byte[] _resultBytes = binary.ReadBytes((int)stream.Length);

            return _resultBytes;
        }

/CODE]

لطفا اضافه کردن نیم اسپیس لازم (using System.IO;) فرامویش نشه!

5- تابعی برای تبدیل استریم به تصویر

        public static Image ConvertByteToImage(byte[] byteImage)
        {
            Image _resultImage;

            MemoryStream stream = new MemoryStream(byteImage, 0, byteImage.Length);
            stream.Write(byteImage, 0, byteImage.Length);
            _resultImage = Image.FromStream(stream, true);

            return _resultImage;
        }

این جا هم نیم اسپیس (using System.Drawing;)

6- حالا کد رو تکمیل میکنیم:

            OpenFileDialog openDilog = new OpenFileDialog();
            openDilog.Multiselect = false;
            openDilog.Filter = "Image|*.jpg|*.png|*.JPG";
            if ((bool)openDilog.ShowDialog())
            {
                uxUserImageBox.Source = ConvertStreamToImage(openDilog.File.OpenRead());
byte[]  userImage = ConvertStreamToByte(openDilog.File.OpenRead());
            }
            else
                MessageBox.Show("Nothing Selected.");

ابتدا، عکسی که گرفتیم رو تو سورس اون ایمیج که کنار دکمه هست گذاشتیم تا خود کاربر هم ببینه که چی انتخاب کرده!
بعدش هم یه آرایه بایت درست کردیم به نام userImage و این همون آرایه بایتی است که قراره بره تو دیتا بیس. در مورد نحوه ارسال داده به پایگاه داده هم تو پست های قبل گفتم ولی اگه بازهم نیاز باشه در مورد بایت هم عرض خواهم کرد.

تا اینجا داشته باشید. تا بعد :قلب:

----------


## taghvajou

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

برای آموزش، مطلب رو به دو بخش تقسیم میکنم: سرور ساید و کلاینت ساید.
پیش نیازهای لازم:
یه دیتابیس با حداقل یه جدول شامل چند تا فیلد
و اینکه پست های شماره 31 الی40   و 54 الی 59 رو خونده باشین تا نیاز نباشه که من در مورد ساختن سالوشن، دیتاست، سرویس، اونت و بقیه خورده کاری ها خیلی ریز بشم.
ممنون. تا شما یه پست های بالا رو مرور کنین من هم عکسهای آموزش رو تهیه میکنم.

----------


## M * M * A

سلام آقای تقوی جو
ما منتظریم همچنان

----------


## taghvajou

سلام به همه
و عرض ارادت و صبح بخیر
از دوستان تشکر میکنم که صبوری کردند.
بر حسب وظیفه امروز ساده ترین حالت نمایش لیست اطلاعات در گرید رو تقدیم خواهیم کرد.

من سعی میکنم به ساده ترین شکل ممکن بنویسم. اگه دوستان احساس میکنم که زیاده دیگه دارم ساده میگم و درازه گویی میشه، بگن تا یه کم جمع و جور تر کد بزنیم.

با فرض بر اینکه پیش نیازها رعایت شده اند(VS 2010 - SQL 2008 و نکات پست قبل):

میخواهیم لیست برنامه نویس هایی رو که دیتا بیس داریم رو نمایش بدیم. 
در کل:
اول کلاسهای لازم رو میسازیم، بعد تابع لازم رو، بعد سرویس رو آپدیت میکنیم، بعد متد داخل سرویس رو فراخوانی میکنیم و دست آخر خروجی متد رو به گرید بایند میکنیم

اما گام به گام:

1- تو بخش وب پروژه مون یه کلاس اد کنین (RightClick->Add->Class) و نامگذاری کنین (Entities.cs). تصویر شماره 1

2- کلاس برنامه نویس رو با ویژگیهاش بسازین.
    public class Programmer
    {
        /// <summary>
        /// Properties - ویژگیها 
        /// </summary>
        public int ProgrammerID;
        public string FirstName;
        public string LastName;

        /// <summary>
        /// Constructor - سازنده 
        /// </summary>
        public Programmer()
        {

        }
    }
3- برین تو وب سرویس(BarnamenevisService.svc)، اون بالا، نیم اسپیس لازم برای تهیه یه لیست از کلاس برنامه نویس که نوشتیم (using System.Collections.Generic;) رو اضافه کنین.

4- یه متد بنویسین برای دریافت تمام برنامه نویسهای موجود تو پایگاه داده ( بدون ورودی و با خروجی لیستوار از کلاس برنامه نویس):

        [OperationContract]
        public List<Programmer> GetAllProgrammer()
        {
            List<Programmer> _result = new List<Programmer>();

            BarnameNevisDataSetTableAdapters.ProgrammerTableAd  apter adapter = new BarnameNevisDataSetTableAdapters.ProgrammerTableAd  apter();
            BarnameNevisDataSet.ProgrammerDataTable table = adapter.GetAllProgrammer();
            foreach (var item in table)
            {
                Programmer _prog = new Programmer();
                _prog.ProgrammerID = item.ProgrammerID;
                _prog.FirstName = item.FirstName;
                _prog.LastName = item.LastName;
                _result.Add(_prog);
            }

            return _result;
        }

5- بخش وب رو بیلد کنین
6- وب سرویس رو تو بخش سیلور لایت آپدیت کنین (اگه نیست اضافه کنین). 
تصویر شماره 2

7- تو صفحه مورد نظرتون تو سیلورلایت یه گرید بندازین.
8 - ستونهاشو اضافه کنین و بعد به فیلد مورد نظر از کلاس برنامه نویس بایند کنین (این بند باید دستی و تو کد انجام میشه)

            <sdk:DataGrid AutoGenerateColumns="False" Height="224" Name="dataGrid1" Width="256">
                <sdk:DataGrid.Columns>
                    <sdk:DataGridTextColumn Header="ID" Binding="{Binding Path=ProgrammerID}"/>
                    <sdk:DataGridTextColumn Header="FirstName" Binding="{Binding Path=FirstName}"/>
                    <sdk:DataGridTextColumn Header="LastName" Binding="{Binding Path=LastName}"/>
                </sdk:DataGrid.Columns>
            </sdk:DataGrid>


9 - تو نمایه سی شارپ اون صفحه، تو  فرم لود یه نمونه از سرویس بسازین و یه نمونه از اونت بسازین و بعد تابع رو فراخوانی کنین.


        private BarnamenevisServiceClient client = new BarnamenevisServiceClient();
        public MainPage()
        {
            InitializeComponent();
            client.GetAllProgrammerCompleted += new EventHandler<GetProgrammersCountCompletedEventArgs  >(client_GetProgrammersCountCompleted);
            client.GetAllProgrammerAsync();
        }


10- دست آخر تو اونت اجرایی تابع، مقدار بازگشتی رو به خورد گرید بدین یعنی:


namespace BarnameNevis
{
    public partial class MainPage : UserControl
    {
        private BarnamenevisServiceClient client = new BarnamenevisServiceClient();
        public MainPage()
        {
            InitializeComponent();
            client.GetAllProgrammerCompleted += new EventHandler<GetProgrammersCountCompletedEventArgs  >(client_GetProgrammersCountCompleted);
            client.GetAllProgrammerAsync();
        }

        void client_GetAllProgrammerCompleted(object sender, GetProgrammersCountCompletedEventArgs e)
        {
            uxProgrammerDataGrid.ItemsSource = e.Result;
        }


}



11- مصدوم آماده است. اف 5 لطفا

----------


## M * M * A

[
    public class Programmer
    {
        /// <summary>
        /// Properties - ویژگیها 
        /// </summary>
        public int ProgrammerID;
        public string FirstName;
        public string LastName;

        /// <summary>
        /// Constructor - سازنده 
        /// </summary>
        public Programmer()
        {

        }
    }


ممنون از کد بالا
حالا چه طوری با dataset  میتونیم گریدمون رو پر کنیم؟

----------


## taghvajou

سلام مجدد به همه
معین جان، متوجه نمیشم که چی میخواین؟ اصلا دیتاست رو میخواین چی کار؟
شما یه نکته رو توجه نمیکنین که لایه داده ها (Data Layer) ما سمت سرور ه نه سمت کلاینت! پس دیتاست که می فرمایین رو نمیشه کلاینت ساید به کار برد.
تو اون تابع که تو سرویس نوشتیم در واقع ما دیتاست رو تبدیل کردیم به یه لیست از شی مورد نظر، بعد با استفاده از سرویس بسته شامل اون لیست رو میفرستیم به سمت کلاینت.

یعنی در واقع ما دیتاست رو به گرید متصل نمیکنیم بلکه نتیجه اجرای متد موجود تو سرویس (یعنی e.Result) که میشه یه نوع لیستی (به نام آبزروال کالکشن که نوعی لیسته ولی با لیست تفاوت داره) رو به عنوان منبع مورد نظر به خورد گرید میدیم (بند 10 پست قبلی).

امیدوارم که مفهوم اینکه یه بار یه نمونه از سرویس درست میکنیم، بعد اول به صورت آسینک (()AsynC#‎####.######) متد موجود توش رو فراخوانی میکنیم و بعد تو اونت پایان یافتنش (compeleted#####.######) کار مورد نظرمون رو انجام میدیم رو دقت کرده باشین!

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

----------


## M * M * A

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

----------


## taghvajou

سلام به همه
از یه نگاه حرفتون درسته! یعنی یه لیست با وب سرویس رو از دیتابیس لود کنیم و نمایش بدیم، بسته به حجم دیتامون در مقایسه با لود همون مقدار با استفاده از مثلا ای اس پی دات نت و دیتاست، در حد چند میلی ثانیه کندتر میشه ولی در مجموع کل اپلیکیشن باید نگاه کنیم.
ببینین اگه بخواین یه برنامه خیلی خوشدست تحت وب داشته باشیم باید کلی جاوا اسکریپت و اینجور چیزا به کار ببریم که در مجموع هر بار باید کلی لود بشه (حتی اگه از ای جکس استفاده کنیم) ولی تو اینجا یه بار برنامه لود میشه بعد نصبش میکنی (اشاره به ویژگی OOB سیلورلایت) و من بعد فقط یه ارتباط داده ای نیازه! من یه برنامه رو با هر دوتاشون نوشتم! 
در مجموع نگران حجم دیتا و سرعت نباش! تقریبا این مورد آزارت نخواهد داد یا حداقل بهتره بگم بیشتر از حالات دیگه و تکنولوژیهای دیگه آزار نخواهد داد!


دست آخر یه برداشت دیگه ای هم از سوال میشه کرد و اون اینه که اشکال به روش کار تبادل اطلاعات با استفاده از سرویس و ساخت کلاس و عدم امکان مستقیم از دیتاست وارد کنین. باید عرض کنم که روش دیگه برای تبادل اطلاعات بین سرور و کلاینت وجود نداره. چون مثلا تو ای اس پی دات نت، وقتی ریکوئست میرسه به آی آی اس، یه نمونه از هندلر کلاس مربوطه اش ساخته میشه و جزئیات صفحه به انضمام پاسخ درخواست فرستاده شده به مرورگر کلاینت برگردونده میشه و اونجا هم نمایش داده میشه! اینجا دیگه درخواست به اون معنا نیست و عملا باید خود دیتا تبادل بشه و تو کنترل نشون داده بشه!

----------


## M * M * A

سلام
من با استفاده از linq تونستم از وب سرويس اطلاعات ارسال كنم
و توي ديتا گريد نمايش بدم

حالا با اين روش آيا مشكل سرعت حل ميشه ؟ يا سرعت پايينتر مياد ؟

----------


## taghvajou

استفاده ازلینک روان بخشی به کاره و تاثیر رو سرعت تبادل اطلاعات نمیذاره! چرا که باز هم دارین از وب سرویس مذکور استفاده میکنین
اگه از ریا سرویس استفاده کنین، در مقایسه، یه کم تفاوت میکنه اون هم به خاطر ساز و کار ریا ست وگرنه بازهم انتقال اطلاعات با استفاده از یه وب سرویسه!

----------


## M * M * A

مرسي از راهنماييات 
حالا يك سوال ديگه
من child window دارم.چه طوري ميتونم بهش افكت بدم.مثلا موقع show شدن بچرخه و ظاهر بشه!؟

----------


## taghvajou

سلام به همه
خدمتتون عرض کنم انیمیشن و افکت واسه کنترل دیگه نوشتم ولی واسه ویندوچایلد ننوشتم.
ولی مثلا میشه با نوشتن یه استوری بورد (Story Board) که بخواییم با پلاس پلاس کردن طول و عرض با انتخاب مبدا مناسب در زمان اجراش (Duration) نحوه باز شدنش لغزشی کنیم یا تغییر پله پله اوپاسیتی فید کنیم! 

ولی چرخش و دوران امکانی ندیدم!

نظر دیگه ای نداریم و زیاد هم مایل نیستم تو اجرای چایلد ویندو مانور بدم! عذر میخوام.

خیلی مصر باشی یه سر برو تو کدپلکس یا کدپروجکت، هستند چند نفری که چایلد ویندوی مودال نوشته از بیس، ازش اون کدها استفاده کن و تغییر بده و الی آخر.

----------


## taghvajou

سلام به همه 
فرا رسیدن ماه پیروزی خون بر شمشیر رو تسلیت و تهنیت میگم

این آموزش یه کم ناگهانی و بی ربط با بقیه است ولی لازم شد.
یه برنامه hta. نوشتم که میشه باهاش ورژن سیلورلایتی که رو سیستم نصبه رو فهمید.

توضیح اینکه پسوند اچ تی ای به معنی html application 

رسما یه فایل اچ تی ام اله که شما فقط بعد از ذخیره کدهاتون، پسوندشو به hta. ویرایش کنین.

تو این کد من یه فانکشن جاوا اسکریپت نوشتم که توش یه نمونه از شی اکتیو ایکس ای جی کنترل درست میکنیم و با پارامتر ورودی اجراش میکنیم. یعنی یه بار با ورودی 4 اجرا میکنیم، اگه جواب نداد با 3 اگه نه با 2 بازم نه با یک واگه با هیچکدوم نشد پس نیست.

البته زیاد روش جالبی نیست ها! چون زیر ورژن ها رو نمیشه تشخیص داد.


<html>

<head>

    <title>Find Silverlight Version</title>

    <script type="text/javascript" language="javascript">

  

         function GetSilverlightVersion() {

             var silverlightVersion = -1;

             getSilverlightVersion = function () {

                 try {

                     //  ایجاد یه نمونه از آبجکت اکتیو ایکس

                     var control = new ActiveXObject('AgControl.AgControl');

  

                     if (control.IsVersionSupported("4.0")) {

                         silverlightVersion = 4;

                     }

                     else if (control.IsVersionSupported("3.0")) {

                        silverlightVersion = 3;

                     }

                     else if (control.IsVersionSupported("2.0")) {

                         silverlightVersion = 2;

                     }

                     else {

                         silverlightVersion = 0;

                     }

                     control = null;

                 }

                 catch (e) {

                     // if any exception while creating the ActiveX Object,

                     // will set the silverlightVersion as -1.

                     silverlightVersion = -1;

                     alert("Unable to create the ActiveX Object from Browser window.");

                 }

             }
             getSilverlightVersion();

             // بازگرداندن مقدار بدست آورده

             return silverlightVersion;

         }

     

</script>

  

</head>

<body>

     <script type="text/javascript">

         //  اینجا تابع فراخوانی شده

         var silverlightVersion = GetSilverlightVersion();

 

         // مقدار منفی یک رو برای عدم توفیق در تشخیص در نظر گرفت

         if (silverlightVersion == -1) {

             document.writeln("Unable to detect the Silverlight Version.");

         }

         // مقدار صفر به معنی عدم نصب فرض شده

         else if (silverlightVersion == 0) {

             document.writeln("Silverlight is not installed in your PC.");

         }

        //  دستور نمایش ورژن

        else {

             document.writeln("Version of Installed Silverlight is: " + silverlightVersion);

         }

     

</script>

</body>

</html>

----------


## exlord

> مرسي از راهنماييات 
> حالا يك سوال ديگه
> من child window دارم.چه طوري ميتونم بهش افكت بدم.مثلا موقع show شدن بچرخه و ظاهر بشه!؟


  <Popup x:Name="popUpChild" Canvas.Top="50" Canvas.Left="50">
            <Border BorderBrush="Black" CornerRadius="10" Background="Aqua" Width="100" Height="100"></Border>
            <Popup.RenderTransform>
                <RotateTransform x:Name="rotateMe" CenterX="75" CenterY="75" ></RotateTransform>
            </Popup.RenderTransform>
        </Popup>

<Storyboard x:Name="rotateStory">
            <DoubleAnimation BeginTime="00:00:00" Duration="0:0:5" Storyboard.TargetName="rotateMe" Storyboard.TargetProperty="Angle" From="0" To="360"/>
        </Storyboard>

rotateStory.Begin();
            popUpChild.IsOpen = true;

----------


## taghvajou

این که گفتی خوبه ولی مربوط میشه به یه پاپ آپ نه چایلد ویندو که نمیشه رپ کرد!
یه کاری که میشه کرد که پروژه رو با بلند باز کنیم بعد روی چایلدویندو مورد نظر رایت کلیک کنیم و گزینه ویرایش تمپلیت رو انتخاب کنیم، بعد تو زملش به دنبال <VisualStateGroup x:Name="WindowStates">
         <VisualState x:Name="Open"> و سعی کنین استوری بورد مورد نظر رو توش پیاده سازی کرد.

ولی بازهنوز نظر من اینه که شما یه نگاهی به این تاپیک بندازی و اگه بتونی این رو واسه خودت سفارش سازی کنی

----------


## exlord

> این که گفتی خوبه ولی مربوط میشه به یه پاپ آپ نه چایلد ویندو! 
> یه کاری که میشه کرد که پروژه رو با بلند باز کنیم بعد روی چایلدویندو مورد نظر رایت کلیک کنیم و گزینه ویرایش تمپلیت رو انتخاب کنیم، بعد تو زملش به دنبال <VisualStateGroup x:Name="WindowStates">
>          <VisualState x:Name="Open"> و سعی کنین استوری بورد مورد نظر رو توش پیاده سازی کرد.
> 
> ولی بازهنوز نظر من اینه که شما یه نگاهی به این تاپیک بندازی و اگه بتونی این رو واسه خودت سفارش سازی کنی


مفهوم ChildWindow تو silverlight مثل winform یا wpf نیست .... یعنی childwindow یه چیز جداگانه نیست که روی صفحه نمایش داده میشه ... بلکه فقط یه usercontrol هست که تو runtime به صفحه اضافه میشه ... ما اون قدیم ها که این ژیگول بازیا نبود همین کار رو دستی انجام میدادیم ... حالا اومدن اینو به صورت کنترل در آوردن که کار راحتتر بشه ... یعنی این داخل این childwindow یه usercontrol یا از grid ارث برده و یا layoutroot مربوطش یه grid  هستش ..
برای انجام این کار نمیشه از childwindow مربوط به خود silverlight استفاده کرد ... 
برای انجام این کار باید خودتون یه childwindow  بسازین  :
1 - یه usercontrol تعریف کنین و این usercontrol رو به شکل یه window طراحی کنین ( با titlebar و دکمه بستن و ... ) 
2 - حالا این usercontrol رو موقع اجرا به صفحتون اضافه کنین ...

----------


## msh13792

سلام
میشه نحوه بارگذاری یک سیلورلایت وب پروجکت رو روی نت یا IIS آموزش بدین  لینک کمکی واسه آموزش بدین؟
ایا میشه سیلورلایت پروژه رو هر کدوم از page  ها رو یک فایل dll مجزا واسش ساخت که واسه اپلود روی سایت و پشتیبانی بهتر بشه عمل کرد
و کلا چطوری من dll  پروژه رو داشته باشم و روی سایتم آپلود کنم تا کسی نتونه ببینه چی استفاده کردم تو پروژه ؟
ممنون میشم بهم کمک کنین

----------


## taghvajou

سلام به همه
پاسخ قسمت اولتون رو باشه بعد
دوم: در واقع به ازای هر پروژه ای که داخل یه سالوشن باز میشه یه دی ال ال درست میشه، شما اگه میخوای چند تا دی ال ال داشته باشی، باید به همون تعداد که میخواین داخل سالوشن پروژه درست کنین و پروژه ها رو بهم دیپندنسی بدین.
سوم که نکته خوبی بود و من خودم روش یه کم کار کردم چون نیاز داشتم:
 این هم رو میگن کد گیج کردن (obfuscation) که سری نرم افزارها (مثل Xeno , RedGate , Crypto , ) هستند که پروژه رو بهش میدی، واست کد میکنه تا هرکسی که بخواد با رفلکتور (reflector) کدتو ببینه نتونه! 
یا حتی فایل اجرایی رو میشه فشرده کرد! نسخه های رایگانش هم هست.

فراموش کردم بگم که من خود از این استفاده میکنم

----------


## AftaB66

سلام .
چجوری میشه مثل این مثال 


> در این نمونه می خواهیم یک RadialGradientBrushتعریف کرده سپس آن را به خاصیت Backgroundچند دکمه نسبت دهیم.
> 
> 
> کد:
> <Window.Resources>        <RadialGradientBrush  x:Key="btnGRBrush" >            <GradientStop Color="Azure" Offset="0.4"/>            <GradientStop Color="Peru" Offset="0.55"/>            <GradientStop Color="PaleGoldenrod" Offset="1"/>        </RadialGradientBrush>    </Window.Resources>    <StackPanel >        <Button Background="{StaticResource btnGRBrush}" Margin="5">Button 1</Button>        <Button  Margin="5">Button 2</Button>        <Button Background="{StaticResource btnGRBrush}" Margin="5">Button 3</Button>        <Button  Margin="5">Button 4</Button>    </StackPanel>


برای Font هم یک Resource تعیین کرد و برای کنترل های مختلف آن را نسبت داد؟

----------


## taghvajou

سلام به همه
اون مثال رو از پست شماره چند نقل قول کردین؟

در مورد فونت ریسورس کردن، تو چند پست های اول تاپیک نوشته ام.

----------


## AftaB66

سلام .
من از آموزشWPF آقای اقدم (پست4)) استفاده کردم .
منظورم اینه که مثلا در مورد کنترل هایی که می خوایم این سه ویژگی رو ست کنیم 

```
FontFamily="Traffic" FontSize="15" FontWeight="Bold"
```

 بیایم به صورت ریسورس درآورده و مثلا اون رو به FontStyle کنترل نسبت بدیم که هربار این ویژگی ها در تگ کنترل تکرار نشن .

----------


## AftaB66

سلام.
سوال قبلی ام جواب داده نشد. 
این مهم تره لطفا راهنمایی کنید.
برای اینکه زبان جاری کیبورد در هنگام باز شدن صفحه فارسی بشه باید چکار کنم؟
(با توجه به این که در سی شارپ از InputLanguage.CurrentInputLanguage استفاده می کنم.)
مرسی

----------


## farashah_jalal

سلام می تونی در محیط xaml این کد رو بنویسی.
InputLanguageManager.InputLanguage="fa"

----------


## AftaB66

> سلام می تونی در محیط xaml این کد رو بنویسی.
> InputLanguageManager.InputLanguage="fa"


 ببخشید ولی این صفت رو به چه کنترلی نسبت بدم . امتحان کردم نشناخت؟!

----------


## Peysab

سلام
یه سوال آیا در Silverlight چیزی مثل تم و CSS وجود داره ؟چه  طور میشه مثل دات نت گفت مثلاً تمامی باتنها که تو صفحه میزاریم همشون بک گراند مثلاً سبز فوت قرمز تاهوما با اندازه 13 داشته باشه که واسه هرکدوم تعریف نکنیم!!!
مرسی

----------


## farashah_jalal

> ببخشید ولی این صفت رو به چه کنترلی نسبت بدم . امتحان کردم نشناخت؟!


این کد رو ما در محیط xaml wpfمی نوشیم الان برام جالبه که در این جا کار نمی کنه

----------


## farashah_jalal

> سلام
> یه سوال آیا در Silverlight چیزی مثل تم و CSS وجود داره ؟چه طور میشه مثل دات نت گفت مثلاً تمامی باتنها که تو صفحه میزاریم همشون بک گراند مثلاً سبز فوت قرمز تاهوما با اندازه 13 داشته باشه که واسه هرکدوم تعریف نکنیم!!!
> مرسی


می تونی از style ها استفاده کنی
که style رو می تونی در محیط app.xamlبسازی 
این پست می تونه بهت کمک کنه.
https://barnamenevis.org/showthread.p...ر-می-کنه

----------


## AftaB66

> این کد رو ما در محیط xaml wpfمی نوشیم الان برام جالبه که در این جا کار نمی کنه


  :ناراحت:  :ناراحت: !!!!
یعنی راهی نیست؟!

----------


## taghvajou

سلام به همه
متاسفم که چند روزیه نتونستم خدمت دوستان برسم و این برمیگرده به شلوغی سرم و حتما در مورد سوال قبلی دوست خوبمون آفتاب، در اولین فرصت مطالعه و با بدست آوردن علم و دانش کافی راهنمایی خواهم کرد.

ولی در مورد سوال دومتون که واسه خودم هم نیاز شده بود باید عرض کنم که متاسفانه تو سیلور (حداقل تا حالا) ما به ای پی آی های سیستم دسترسی نداریم. و نمیتونیم زبان سیستم رو عوض کنیم. یعنی همون کاری که تو وین فرم میشه انجام داد.
کاری که من کردم این بود که دور زدن انجام دادم که زیاد هم البته از نظر خودم خوب نبود و بعدش بیخیال شدم و فقط تو بعضی فیلدهای خاص تو کنترل های خاص خودمون ازش استفاده کردم این بود که کدهای اسکی کیبورد انگلیسی رو دریافت و با تناظری به کارکتر فارسی مربوط به اون سویچ میکردم. البته میگم زیاد هم خوب نیست چون کلید ترکیبی داریم، اگه زبان غیر انگلیسی میشد نقص داشت و الی آخر
اگه باز هم بخواین میتونم، این کد رو بهتون یاد بدم و تقدیم کنم.

ولی کلی گشتم و میشه گفت که راهی نیست. حداقل تا این ورژن سیلور که بشه زبان سیستم رو عوض کرد.

----------


## taghvajou

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

در صورت نیاز، امر بفرمایین تا یه مثال تقدیم کنم.

----------


## mhkazemi

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

----------


## mrsalam

سلام
استاد عزیز جناب تقوای جو ، خسته نباشید و ازاین حرفا...
و اما سوال:

1-چگونه می توان یک شکل(مثلا مستطیل) را با ایونت های مورد نظر تعریف و بصورت پویا به تعداد نیاز در صفحه ترسیم کنیم؟(مثلا با کلیک یک دکه به نام btnDrawRect)
2-محدودیت ترسیم این اشکال چه تعداد می باشد.بطور مثال آیا تا    10000 مستطیل کوچک (با ایونت ها)می توان در یک صفحه داشت؟
متشکرم

----------


## AftaB66

سلام . 



> در مورد سوال قبلی دوست خوبمون آفتاب، در اولین فرصت مطالعه و با بدست آوردن علم و دانش کافی راهنمایی خواهم کرد.


ممنون ، من از راهنمایی farashah_jalal استفاده کردم و خوب بود . 


> کدهای اسکی کیبورد انگلیسی رو دریافت و با تناظری به کارکتر فارسی مربوط به اون سویچ میکردم


از این روشتون استفاده می کنم، تا ببینیم چی میشه . باز هم ممنون...

----------


## AftaB66

سلام .
اول بگم که واقعا ببخشید که من اینقدر سوال می پرسم . ولی من روشون کار کردم نشد. 
من میخوام روی یوزرکنترل سیلورلایتیم یک یوزر کنترل دیگه باز شه و یوزرکنترل زیرین همراه با صفحه aspx متعلق به آن fade بشه. از javascript استفاده کردم و تقریبا از این روش:http://blogs.silverlight.net/blogs/m...lverlight.aspxاستفاده کردم ( به این دلیل میگم تقریبا که ارور میده و نمی تونم کامل ازش استفاده کنم !!)
در واقع نمیتونه صفحه منو رجیستر کنه.
حالا من مشکل باز شدن یوزر کنترل دوم روی اولی رو حل کردم (مقداری که میخوام بهش بفرستم رو اینطور فرستادم :

HtmlPage.Window.Invoke("USC2Name",id);

و توی متد جاوااسکریپتی :
var control = document.getElementById("<%=Loader.ClientID %>");
control.InitParams += ",id=" + Id;

و توی کانستراکتور USC2 ازش استفاده می کنم . ولی موقعی که میخوام از دومی به اولی برگردم به id نیاز دارم ولی دیگه کانستراکتوری درکارنیست!!!
بنابراین به متد [ScriptableMember ]نیاز دارم که کار نمی کنه !!!]
ببخشید که توهم توهم شد!!
لطفا راهنمایی کنید..

----------


## AftaB66

احتمالا آقای تقوی جو سرشون خیلی شلوغه ...

----------


## exlord

برای اینکار نیازی به جاوا اسکریپت نیست شما فقط کافیه توی root صفحت 2 تا container داشته باشی یکی برای خود صفحه اصلی و یکی هم برای user control و قبل اینکه usercontrol رو اضافه کنی opacity مربوط به container صفحه اصلی رو 0 کن ...

----------


## AftaB66

سلام . ممنون از راهنماییتون .
ولی من زیاد متوجه نشدم ، تو این زمینه مبتدی ام.
1- Root صفحه منظورتون همون صفحه اصلیه که از نوع سیلورلایتیه؟(من برای تمام صفحاتم از یوزرکنترل استفاده کردم)
2- توی صفحه اصلی کانتینرهام رو به این صورت تعریف کردم :



```
[LEFT]   <Grid x:Name="main" >
 
<Grid x:Name="LayoutRoot" Background="White" ShowGridLines="True" Opacity="0" FlowDirection="RightToLeft">
 
        </Grid>[/LEFT]
 
[LEFT]  <Grid x:Name="LayoutChild" Background="White" ShowGridLines="True" Opacity="0" Grid.Row="1" FlowDirection="RightToLeft">
 
        </Grid>[/LEFT]
 
[LEFT]       </Grid>[/LEFT]
```

3- Code Behind:

 private void btn_Click(object sender, RoutedEventArgs e)
      {
          LayoutRoot.Opacity = 0;
          USCChild usc = new USCChild();
 
          LayoutChild.Children.Add(usc) ; 
          LayoutChild.Opacity = 1;
      }


با زدن دکمه یوزرکنترل اصلی محو میشه ولی یوزرکنترل دوم نمایش داده نمیشه !

کدم ایراد داره ؟
در ضمن نمیشه کاری کرد که صفحه اصلی تار بشه ؟(نه این که کلا نمایش داده نشه )
مرسی

----------


## AftaB66

سلام .
 مشکلات پست قبلیم تقریبا حل شد ( البته من می خواستم یوزکنترل زیرین transparent بشه ولی در این صورت کنترل هاش فعال می مونن که فکر می کنم باید تک تک اونها رو disable کنم)
حالا زمانی که یوزکنترل دوم رو از بین می بریم (یا همون فرزند کانتینر موردنظر) یا Opacity اون رو صفر می کنیم ایونتی نداره که اجرا بشه (در یوزر کنترل اول ، یه چیزی مثل FormColsed تو winApp )؟؟؟

----------


## exlord

> سلام .
>  من می خواستم یوزکنترل زیرین transparent بشه ولی در این صورت کنترل هاش فعال می مونن که فکر می کنم باید تک تک اونها رو disable کنم


 برای اینکار یه border بساز با opacity=0.3 یا هر مقداری که صلاح بدونین ... بعد اینو بزار روی uc1 و زیر uc2 یعنی بین این2 تا اینجوری کنترل های uc1 غیر قابل دسترسی میشن ....

----------


## AftaB66

نمی دونم منظورتون رو از 


> اینو بزار روی uc1 و زیر uc2 یعنی بین این2 تا


درست متوجه شدم یا نه


```
<UserControl 
Name="usc1"
">
<Grid x:Name="LayoutRoot">
<Grid x:Name="grUsc2 >
 
<myApp:USCNew x:Name="usc2" />
</Grid>
<Border BorderThickness="5" Opacity="0.3" BorderBrush="#6964646C"/>
　
<Grid x:Name="grusc1" Background="White" ShowGridLines="True" FlowDirection="RightToLeft" DataContext="{Binding}">
کنترل های یوزرکنترل 1

</Grid>
</Grid>
</UserControl>
```


این که من نوشتم که کار نکرد ، اگه میشه بیشتر توضیح بدین. مرسی

----------


## a_mari323

salam mishe lotfaan tarigheie kaar ba chart va treebar ham tozih bedin?

----------


## exlord

background برای border بزارین درسته باید کار بکنه اینجوری ...
 button توی usercontrol2 هستش ... 

<Grid x:Name="LayoutRoot">
        <app:UC1/>
        <Border Background="Black" Opacity="0.6"/>
        <app:UC2 Width="300" Height="300" Margin="349,290,151,210" />
    </Grid>

img1 --> بدون border 
img2 --> با border

----------


## AftaB66

سلام.
ممنون از راهنماییتون . 
ولی من مشکلم اینه که وقتی مثل شما عمل می کنم یعنی :
اول usc1 بعد border و بعد usc2 اونوقت وقتی صفحه ام لود میشه usc1 غیر فعاله ، به نظرم به خاطر اینه که usc2 با opacity =0 روش قرار داره و بنابراین نمی تونیم دکمه مربوطه برای لود شدن usc2 که در usc1 قرار داره رو بزنیم . و و قتی هم که برعکس کدهاشون رو قرار میدم کنترل های usc2 فعال نمیشن بلکه فقط نمایش داده میشن . تنها با invisible کردن usc1 تونستم این کار رو انجام بدم که عملا transparent شدن usc1 اتفاق نمی افته !!!
حالا نمی دونم تونستم منظورم رو بفهمونم؟!!

----------


## AftaB66

لطفا اگه کسی برا پست 110 این تاپیک نظری داره بگه ، خیلی بهش احتیاج دارم . آیا واقعا کاری که می خوام انجام بدم امکانپذیره ؟

----------


## exlord

> سلام.
> ممنون از راهنماییتون . 
> ولی من مشکلم اینه که وقتی مثل شما عمل می کنم یعنی :
> اول usc1 بعد border و بعد usc2 اونوقت وقتی صفحه ام لود میشه usc1 غیر فعاله ، به نظرم به خاطر اینه که usc2 با opacity =0 روش قرار داره و بنابراین نمی تونیم دکمه مربوطه برای لود شدن usc2 که در usc1 قرار داره رو بزنیم . و و قتی هم که برعکس کدهاشون رو قرار میدم کنترل های usc2 فعال نمیشن بلکه فقط نمایش داده میشن . تنها با invisible کردن usc1 تونستم این کار رو انجام بدم که عملا transparent شدن usc1 اتفاق نمی افته !!!
> حالا نمی دونم تونستم منظورم رو بفهمونم؟!!


2 کار میتونین انجام بدین :
1 - uc2  و border  رو تو runtime به صفحه اضافه کنین .
2 - برای uc2 و border  :    
          visibility=collapsed

----------


## AftaB66

مرسی از راهنماییتون exlord. 
درست شد ،border و یوزرکنترل به همراه کانتینرش رو در runtime ساختم .

----------


## AftaB66

اون موضوع تاپیک 110 رو هم حل کردم ، با استفاده از متد [scriptableMember] و remove کردن border و usc2، اگه توضیح خواستین بگین تا بگم.

----------


## AftaB66

سلام. 
چرا این تاپیک سوت و کور شده ؟ دلیل خاصی داره ؟ 
قرار نیست آموزش از طریق سوال و جواب ادامه پیدا کنه ؟!

----------


## mrsalam

به نظر من اگر بچه ها موافق باشند،سوالات را به گروه SilverLight انتقال یابد چون اینجا ظاهرآ مثل بقیه تاپیک ها ،متاسفانه متروکه شده :افسرده:

----------


## AftaB66

منظورتونو خوب نفهمیدم ! یعنی  سوالامونو خصوصی بپرسیم یا اینکه برا هر کدومشون یک تاپیک بزنیم ؟!

----------


## mahan62

> سلام. 
> چرا این تاپیک سوت و کور شده ؟ دلیل خاصی داره ؟ 
> قرار نیست آموزش از طریق سوال و جواب ادامه پیدا کنه ؟!


چون دیگه همه خودشون استاد شدن و کسی سوال نداره یا مد شده تاپیک جدا میزنن

----------


## taghvajou

سلام به همه
یه کم خیلی سرم شلوغ شد و یه کم خیلی شرمنده دوستان شدم و نتونستم در خدمتتون باشم. امیدوارم که بزرگواری خودشون ببخشند. 
داشتم امشب رو یه چیزی کار میکردم. یهو یادم اومد که اینجا یه سوالی در مورد تمینگ پرسیده شده بود. بعد اومدم تو سایت برنامه نویس و تالار سیلورلایت و ...  :متعجب: 

در حال بیشتر در خدمتتون خواهم بود. لطفا کسی به دل نگیره. ما که هیچ ادعایی نداریم. فقط چند کلمه بیشتر بلدیم و اون رو هم انتقال میدیم.




> یادم رفت بگم که در مورد استایلینگ هم از قضا خیلی امکانات خوب داریم تو تولباکس سیلور که باید تولیکیت رو نصب کنین و ما مجموعه کنترلهامون رو تو اون تگهای استایل شکل شمایل میدیم.
> 
> در صورت نیاز، امر بفرمایین تا یه مثال تقدیم کنم.


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

1- حتما باید تولکیت رو نصب کرده باشین. اگه نکردین هنوز از این جا دانلود کنین و ست آپ رو اجرا کنین خودش همه کار های برای اضافه شدن به ویژوال استودیو رو انجام میده

2- تم ها به دو روش میشه به فرمتون اضافه کنیم: 
یکی اینکه رفرنس رو دستی اد کنیم، واسه رفرنس یه اسم محلی میذاریم و تو داخل تگ ها با بهکار گیری نام متسعار که گذاشتیم استفاده کنیم مثلا:
 xmlns:them="clr-namespace:System.Windows.Controls.Theming;assembly  =System.Windows.Controls.Theming.TwilightBlue"
1.jpg
این کار یه کم مهارت بیشتر میخواد ولی اگه یه موقع قرار باشه از تم ساخته شده خودتون استفاده کنین لازم میشه. چون باید با نیم اسپیسها آشنا باشین. ضمنا دقت کنین تم هایی که تو خودت تولکیت داده شده همه تو یه نیم اسپیس نیستند و متفاوتند.

روش دوم هم اینه که از تولباکستون از اون آخر ماخر ها تم مورد نظرتون رو از گوشش بگیرین و درگ دراپ کنین تو فرمتون. خودش یه رفرنس به نام تولکیت درست میکنه و یه نمونه از تم رو براتون تو زمل میاره.

حالا هر چی که داخل تگ های این تم ها قرار بگیره اون تم رو به خود میگیره! پس هواستون باشه که ته تگ رو با زدن </ نبدین ها! مثلا


        <toolkit:TwilightBlueTheme>
            <Button x:Name="CancelButton" Content="انصراف" Click="CancelButton_Click" Width="75" Height="23" HorizontalAlignment="Right" Margin="0,12,0,0" Grid.Row="1" />
            <Button x:Name="OKButton" Content="ثبت" Click="OKButton_Click" Width="75" Height="23" HorizontalAlignment="Right" Margin="0,12,79,0" Grid.Row="1" />
        </toolkit:TwilightBlueTheme>



تا اینجا نحوه استفاده از تم

2- نحوه عوض کردن تم
مطمئنا فکر نمیکنین که منظورم من از عوض کردن تو موقع طراحی و برنامه نویسیه! چون کافیه این رو پاک کنین و یکی دیگه بندازین بجاش
منظورم عوض کردن در ران تایمه:
نکته ای که باید اول کار بدونین اینه که کنترلها پراپرتی به نام تم ندارند که شما براحتی بتونین اون رو به یه مقدار جدید ست کنین. 
نمیشود نمیشود نمیشود نمیشود نوشت
            TextBlock txt = new TextBlock();
            txt.theme = new TwilightBlueTheme();

این هم برمیگرده به ماهیت نگهدارندگی خود تم. یعنی خودش یه در برگیرنده است.

پس یه نمونه از کلاس کانتنت کنترل میسازیم و یه رفرنس از تم مورد نظرمون رو بهش تخصیص میدیم. (*نکته کار اینجا بود*) یعنی:

            TextBlock txt = new TextBlock();
            ContentControl newThem = new TwilightBlueTheme();
            newThem.Content = txt;


بازهم فراموش نکنین که رفرنس تم جدید هم باید به یکی از دو روش بالا از قبل اضافه شده باشه ها! بعدا نگین فلانی نگفت!

ببخشید گنگی مطلب به خاطر ضعف امکان مفاهیم به زبان فارسی و عمومیه. شاید هم از ضعف تدریس بنده!
البته ممکنه یه کم قاطی کنین ولی به صورت اشاره گفتم. اگه لازم شد یه مثال کامل براتون تقدیم میکنم.

3- کاستومایز کردن تم.
این رو هم دارم مطالعه میکنم. هنوز کامل خودم نتونستم یه تم کامل بنویسم. یه چیزهایی پیاده سازی کردم. اما کلیات کاری که انجام میدیم اینه
یه عالمه استایل باید بسازیم. میشه گفت برای هر کنترل
مقدار نوع مورد هدف (TargentType) رو ابتدای استایل به کنترل مورد نظرمون نسبت میدیم. مثلا
<Style TargetType="Buuton"></Style>

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

<Style TargetType="Button">
<Setter Property="FontFamily" Value="Tahoma"/>
<Setter Property="Foreground" Value="#FFCC23"/>
<Style/>


این تم رو در قالب یه رفرنس لوکال(روش اول از بند یک) اضافه کنین و استفاده کنین
هنوز خودم تبدیل به کنترل نکردم تم هام رو.


خوب دوستان شب عالی بخیر
امیدوارم که تو تمام مراحل زندگی به نتیجه تلاشتون برسین

----------


## AftaB66

سلام.
واقعا نمی دونم ایراد کار کجاست ؟!
اولا اینکه می تونیم یک متد داشته باشیم که متد و ایونت سرویسی (WCF Serviece) رو استفاده کنه و در ایونت متد(Compeleted...) متغیر boolean پابلیکی رو براساس مقدار برگشتی ایونت true یا false داده و بعد از خط کد فراخوانی متد و فراخوانی ایونت براساس این متغیر تصمیم گیری کنیم ؟

privatevoid Valid(....., SR_...  sr)
{
SR_.SR_Client sR_ = new SR_.SR_Client();


فراخوانی متد
فراخوانی ایونت Compeleted
استفاده از متغیر بولین


}
 


مشکلی که من دارم اینه که در بار اول ایونت مربوطه اصلا Raise نمیشه بنابراین متغییر بولین اشتباه مقداردهی شده بعد خودش دوباره متد و ایونت رو اجرا می کنه و..
خدا کنه متوجه مشکلم شده باشین .
اگه توضیح اضافه تر هم لازم بود لطفا بگین کامل کنم .

----------


## exlord

> سلام.
> واقعا نمی دونم ایراد کار کجاست ؟!
> اولا اینکه می تونیم یک متد داشته باشیم که متد و ایونت سرویسی (WCF Serviece) رو استفاده کنه و در ایونت متد(Compeleted...) متغیر boolean پابلیکی رو براساس مقدار برگشتی ایونت true یا false داده و بعد از خط کد فراخوانی متد و فراخوانی ایونت براساس این متغیر تصمیم گیری کنیم ؟
> 
> privatevoid Valid(....., SR_...  sr)
> {
> SR_.SR_Client sR_ = new SR_.SR_Client();
> فراخوانی متد
> فراخوانی ایونت Compeleted
> ...


 completed رو فراخوانی نمیکنن ... event ها بر اساس شرایطی توسط خود سیستم raise میشن ... در اینجا تمام شدن متد و دریافت جواب باعث raise شدن event میشه ....

SR_.SR_Client sR_ = new SR_.SR_Client();
sR_.callMyMethosAsyncCompleted += new eventhandler(callmymethosdasyncc_completed);

void callmymethosdasyncc_completed(....,eventargument e)
{
    bool result = e.result;
    //do something with result
}

private void DoSomeThing()
{
    sR_.callMyMethodAsync()
}

----------


## AftaB66

> completed رو فراخوانی نمیکنن ... event ها بر اساس شرایطی توسط خود سیستم raise میشن ... در اینجا تمام شدن متد و دریافت جواب باعث raise شدن event میشه ....
> 
> کد:
> SR_.SR_Client sR_ = new SR_.SR_Client();sR_.callMyMethosAsyncCompleted += new eventhandler(callmymethosdasyncc_completed);void callmymethosdasyncc_completed(....,eventargument e){    bool result = e.result;    //do something with result}private void DoSomeThing(){    sR_.callMyMethodAsync()}


من طبق چیزی که شما گفتید اومدم ایونت Compeleted رو در کانستراکتور صدا زدم ، و بقیه هم مثل قبل ، ولی باز هم همون نتیجه رو داشت ، یعنی اون کاری رو که نباید براساس e.result انجام میداد ، انجام میشه و بعد ایونت raise میشه و پیغامی رو که در به دلیل غیرمجاز بودن اون request باید بده،میده !!!
(داخل متدی که در WCF Service نوشتم جایی که متد async اش رو صدا زدم نمیره !!! و باید بگم در جاهایی دیگه از متد Async استفاده کردم و درست و به موقع هم اجرا میشه)

----------


## taghvajou

سلام به همه یه نکته ای رو ذیل گفته های ایکس لورد عرض کنم تو ترتیب ساخت اونت ها و فراخوانی آسینک متدها دقت کنین. وقتی به دنبال فراخوانی یه متد، یه سری چیزها رو موقتا غیرفعال میکین، صفر میکنین، فالس میکنین، رید انلی میکنین و الا آخر ممکنه. مراقب باشین که رویداد دیگه ای اونها رو به دست کاری نکنه! یعنی ممکنه یه متد یه چیزی رو غیرفعال کنه، بعد پشت سرش شما یه متد دیگه هم فراخوانی کنین و متد دوم زودتر به نتیجه برسه و رویداد اتمامش قصد فعال کردن اون شی رو داشته باشه در حالی که اولی هنوز تموم نشده! این جور مواقع از یه پرچم استفاده کنین. و اینکه ترتیب ساخت رویداد و فراخوانی متدهاشون هم مهمه و گیچ کننده! تو اجرا اول رویدادها ساخته بشند بعد متدش فراخوانی بشه!

----------


## AftaB66

سلام . ممنون بابت راهنمایی .
ولی میشه این قسمت 



> یعنی ممکنه یه متد یه چیزی رو غیرفعال کنه، بعد پشت سرش شما یه متد دیگه هم فراخوانی کنین و متد دوم زودتر به نتیجه برسه و رویداد اتمامش قصد فعال کردن اون شی رو داشته باشه در حالی که اولی هنوز تموم نشده! این جور مواقع از یه پرچم استفاده کنین


رو بیشتر توضیح بدین.

----------


## exlord

> یعنی اون کاری رو که نباید براساس e.result انجام میداد ، انجام میشه و بعد ایونت raise میشه


من اینجوری متوجه شدم که شما میخوای یه کاری رو انجام بدی قبل از اینکه ایونت completed اجرا شده باشه ....
اگه شما میخوای یه چیزی رو بر اساس e.result تغیر بدی باید اونو توی eventhandler مربوط به ایونت completed بنویسی ... تو پست قبلی هم گفتم اینم یه نمونه واقعی ...
public partial class MainPage : UserControl
    {
        ServiceReference1.Service1Client sc;
        public MainPage()
        {
            InitializeComponent();
            sc = new ServiceReference1.Service1Client();
        }
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            sc.DoWorkCompleted += new EventHandler<ServiceReference1.DoWorkCompletedEven  tArgs>(sc_DoWorkCompleted);
            sc.DoWorkAsync();
        }
        void sc_DoWorkCompleted(object sender, ServiceReference1.DoWorkCompletedEventArgs e)
        {
            bool result = e.Result;
            //استفاده از متغیر بول
            //تغییراتی که قراره بر اساس 
            //result
            //انجام بگیره باید در اینجا قرار بگیره
        }
    }

----------


## AftaB66

مشکله من این بود که ایونت Compeleted ام با تاخیر اجرا میشد همونطور که آقای تقوی جو گفتن:



> یعنی ممکنه یه متد یه چیزی رو غیرفعال کنه، بعد پشت سرش شما یه متد دیگه هم فراخوانی کنین و متد دوم زودتر به نتیجه برسه و رویداد اتمامش قصد فعال کردن اون شی رو داشته باشه در حالی که اولی هنوز تموم نشده! این جور مواقع از یه پرچم استفاده کنین


برا حلش از enum Flags استفاده کردم و تقریبا درست شد، فقط مشکلم اینه که حالا ایونت compeleted وقتی چند بار پشت سر هم دکمه مربوطه رو می زنم در هر مرتبه به تعداد بیش از یکبار اجرا میشه ، بار اول 1 بار ، بار دوم 2 بار و ....!!!!!

بازم از همگی ممنون

----------


## taghvajou

سلام به همه
خوب سه راه داریم:
وقتی دکمه زده شد، تو اونت اجرای دکمه (که تابع رو به صورت آسینک اجرا میشه) بعد از اجرای متد: 

1- خود دکمه رو هم غیرفعال کنین تا کسی نتونه دوباره اون رو بزنه و تابع رو دوباره اجرا کنه. اون طرف هم تو رویداد اتمام تابع، دکمه رو فعال کنین.

2- یه بول پراویت واسه فرم درست کنین و مقدار اولیه اش رو مثلا فالس بدین. وقتی متد اجرا میشه اول چک کنین که مقدار این بول رو بررسی کنین اگه فالس بود متد آسینک اجرا کنین و به دنبال اجرا مقدار رو ترو کنین؛ ولی اگه مقدار بول ترو بود، یه مسیج باکس بدین که تابع در حال اجراست و یه کم صبر کنین و ری ترن (return) کنین.

3- از بیزی ایندکیتور استفاده کنین که تو تولکیت هست (busty Indicator) که در واقع یه گریدی (به یه پروکرس بار و یه متن پیام داخلش) است که روی فرم قرار میگیره و اجازه نمیده که هیچ کدوم های کنترلهای زیرش در دسترس باشه. بعد از اجرای تابع این بیزی رو شو کنین و بعد از اتمام هاید کنین.

----------


## jo0ojo0o_iut

سلام
من دوتا سوال داشتم
یکی اینکه من silverlight4 رو نصب کردم ولی توی vs10 گزینه ی silverlight4 رو ندارم!!!
یکی دیگه اینکه می خوام توی پنجره ی login برای use و pass به database دسترسی پیدا کنم،می شه بگید چجوری؟!
ممنون

----------


## taghvajou

سلام به همه
در مورد سوال اولتون

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

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

----------


## jo0ojo0o_iut

ممنون
اگه ميشه لطف کنيد جواب اون يکيش رو هم بديد،اخه شنبه بايد پروژه رو تحويل بديم :ناراحت:

----------


## AftaB66

سلام . ممنون



> خوب سه راه داریم:
> وقتی دکمه زده شد، تو اونت اجرای دکمه (که تابع رو به صورت آسینک اجرا میشه) بعد از اجرای متد: 
> 
> 1- خود دکمه رو هم غیرفعال کنین تا کسی نتونه دوباره اون رو بزنه و تابع رو دوباره اجرا کنه. اون طرف هم تو رویداد اتمام تابع، دکمه رو فعال کنین.
> 
> 2- یه بول 
> پراویت واسه فرم درست کنین و مقدار اولیه اش رو مثلا فالس بدین. وقتی متد اجرا میشه اول چک کنین که مقدار این بول رو بررسی کنین اگه فالس بود متد آسینک اجرا کنین و به دنبال اجرا مقدار رو ترو کنین؛ ولی اگه مقدار بول ترو بود، یه مسیج باکس بدین که تابع در حال اجراست و یه کم صبر کنین و ری ترن (return) کنین.
> 
> 3- از بیزی ایندکیتور استفاده کنین که تو تولکیت هست (busty Indicator) که در واقع یه گریدی (به یه پروکرس بار و یه متن پیام داخلش) است که روی فرم قرار میگیره و اجازه نمیده که هیچ کدوم های کنترلهای زیرش در دسترس باشه. بعد از اجرای تابع این بیزی رو شو کنین و بعد از اتمام هاید کنین.


از روش بول پرایوت استفاده کردم . البته چون من تابع async رو در یک حلقه استفاده کردم، خیلی به غیرهمزمانی ش توجه نکرده بودم ، بنابراین ایندکس اول در حلقه رو اجرا کرده ، در صورتی که e.result درست بود اجرای ادامه حلقه صورت می گیرد، و در تمامی این مدت متغیر بولین false است و بنابراین عملیاتی که باید بعد از اجرای تابع async صورت گیرد بعد از true شدن این متغیر انجام می شود.
باز هم ممنون

----------


## taghvajou

سلام به همه
به جای اینکه شما یه تابع رو حلقه nبار فراخوانی میکنین، یه لیست (List<>)  به عنوان آرگومان ورودی به تابع بدین و مقدار بازگشتی رو هم یه لیست بگیرین. هرچند متدهای سرویس در سیلورلایت هیچ وقت نمیتونن از نوع استاتیک باشند درنتیجه حتما ترد سیف هستند ولی ممکنه اون تابع تعداد تو اون حلقه تعداد خیلی زیاده نمونه بسازه و اگه چند تا کاربر همزمان این کار رو بکنن ممکنه سرویس دی داس بشه. کار خیلی خطرناکی میکنین.

اگه گویا نبود یا خواستین بفرمایین با مثال بیشتر توضیح بدم.

----------


## AftaB66

سلام . 
بله لیست موردنظر رو به تابع فرستادم ، این روش خیلی بهینه تره .
چون خیلی با جزئیات نحوه عملکرد توابع async آشنا نیستم ، موارد نمونه سازی و 


> سرویس دی داس بشه


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

----------


## taghvajou

سلام به همه
در مورد دی داس این مطلب رو بخونین واسه شروع خوبه

اما در مورد تابع و نمونه سازی و عملکرد.
دقت کنین که این تابع نیست که نمونه میسازه. ما اول هر فرم یه نمونه از کلاس سرویسمون میسازیم و این متدها داخل اون اینستنسی که ساختیمه! یه مقدار خوب درسهای شی گرایی رو مرور کنین تو ذهتون...

اگه یادتون باشه ما وقتی یه کلاس میسازیم داخل به جز پراپرتی می تونیم یه سری متدهایی هم برای انجام وظیفه بذاریم که هر وقت یه نمونه از اون کلاس ساخته بشه ، نمونه ساخته شده توانایی انجام اون متد رو هم داره مثلا فرض کنین یه کلاس بیبی داشته باشیم به شکل زیر:
    public class Baby
    {
        public int Age { get; set; }
        public string Name;

        public Baby()
        {

        }

        public void Cry()
        {
            // masalan
            return;
        }
    }

حالا نمونه این کلاس توانمندی متد تعریف شده اش رو داره:
[CODE]            Baby bb = new Baby();
            bb.Cry();
[/CODE
با این تفاصیل می بینیم که سرویس هم یه کلاس مثل همین کلاس بچه ای که نوشتیم که متدها توشند. حالا ما می تونیم تو کلاس بی بی که نوشتیم هم رویداد داشته باشیم که وقتی بچه گریه کرد چه اتفاقی بیفته. میشه از اینترفیس استفاده کرد مثلا. تو سرویس هم همین طوره شما یه تابع رو که فراخوانی میکنین در اتمام فراخوانیش تو شکم کلاس سرویس نوشته شده که بعد از اتمام حالا رویداد اتمامش رو به دست بگیر.
والسلام

----------


## emrooz

با سلام
لطفا بفرمایید در سیلورلایت برای نمایش داده های sql2000  از  طریق دیتا گرید از چه راهی می تونیم استفاده کنیم.با توجه به اینکه در این مورد نمی تونیم کانکشن SQL server ایجاد کنیم،امکان استفاده از linq وجود تداره.من پست های قبلی رو هم دیدم، اما اونجا از دیتاست به عنوان سورس datagrid استفاده نشده و فقط خروجی inyt یا string  از اون گرفته شده. 
با تشکر

----------


## tazaree

از مطللب بسیار مفید شما بینهایت سپاسگذارم.

----------


## mrsalam

از آقای تقوا جو سپاس گذاری می کنم.
همینطور از بچه ها به دلیل پرسیدن از ایشان نیز متشکرم.
متاسفانه به دلیل اینکه آقای تقوا جو از پاسخ دادن به سوالات حقیر امتناع میکنند لذا از بچه ها می خوام که در خصوص کار با دیتابیس از طریق SL بیشتر بپرسند.متشکرم.

----------


## taghvajou

> با سلام
> لطفا بفرمایید در سیلورلایت برای نمایش داده های sql2000  از  طریق دیتا گرید از چه راهی می تونیم استفاده کنیم.با توجه به اینکه در این مورد نمی تونیم کانکشن SQL server ایجاد کنیم،امکان استفاده از linq وجود تداره.من پست های قبلی رو هم دیدم، اما اونجا از دیتاست به عنوان سورس datagrid استفاده نشده و فقط خروجی inyt یا string  از اون گرفته شده. 
> با تشکر


سلام به همه
قضیه خروجی دادن به کنترل عین همونه! فرقش تو نوع خروجی متدی که نوشتینه!
مثلا وقتی متدی که شما تو سرویستون فقط یه رشته یا عدد صحیح برمیگردونه اگه تو مقدار e.result نگاه کنین متوجه میشین که اون هم یه رشته یا عدده!
خوب پس با این حساب کافیه که متدی که تعریف میکنین مقدار بازگشتیش یه لیست باشه مثلا:

        [OperationContract]
        public List<int> GiveList()
        {
            List<int> _result = new List<int>();

            _result.Add(4);
            _result.Add(8);
            _result.Add(10);
            _result.Add(24);

            return _result;
        }



تو سمت سیلور پس مقدار e.result ما هم میشه یه کالکشن که میشه بایند کرد به آیتم سورس دیتا گرید.
کافیه که تو رویداد اتمام تابعتون آیتم سورس رو به خروجی تابع بایند کنین یعنی: 
uxDataGrid.ItemsSource = e.Result;

تصویر کمکی:
Untitled picture.png

----------


## Mehdi Naderi

با سلام خدمت همه  دوستان
من Toolkit رو از لینک زیر دریافت کردم
http://silverlight.codeplex.com/releases/view/43528
اما  حتی بعد از نصب هم هیچ چیز به نوار ابزار Tool   اضافه نمیشه و وقتی سمپل ها رو اجرا میکنم بازم برنامه خطا داره که مربوط به رفرنس های این Toolkit است 
باید عمل اضافه ای غیر از  نصب کردم انجام بدم ؟

----------


## taghvajou

سلام به همه و مهدی عزیز
علی القائده نه صرف نصب کردن تولکیت کافیه! ولی حتما قبلش مطمئن باشین که سیلورلایت تولز نصب بوده باشه!

آیا ورژن سیلورلایت تولز و دولوپر و تولکیت و ویژوال استودیوت باهم همخونی دارند. من یه مورد از دوستان رو دیدم که این مشکل رو داشت!

خطایی که میده رو میشه بگین!

----------


## AftaB66

سلام .
ببخشید که سوالاتم زیاد شده..
با توجه به راهنمایی آقای xlord پست 117 
من تونستم یک یوزرکنترل رو با استفاده از یک کانتینر و یک بردر روی یک یوزر کنترل دیگه نمایش بدم ، و با استفاده از(با توجه به اینکه برای نمایش یوزرکنترل زیرین از SilverlightLoader در صفحه aspx استفاده کردم ) توابع StaticMember و JS Script(که تابع StaticMember رو فراخوانی میکنه)تونستم مقداری رو از یوزرکنترل رویی به زیرین پاس بدم .http://forums.silverlight.net/forums...11/306970.aspx
اما حالا می خوام یوزرکنترل سوم رو روی دوتای قبلی نمایش بدم . با توجه به اینکه برای نمایش یوزرکنترل دوم از SilverLightLoader استفاده نکردم چطور می تونم مقداری رو از یوزرکنترل 3 به 2 انتقال بدم ؟
با استفاده از app = (App)App.Current;
هم خواستم پراپرتی ای رو به یوزرکنترل 2 بفرستم ولی چجوری بسته شدن یوزرکنترل 3 ( که همراه با حذف بردر و کانتینر آن است) رو در یوزرکنترل 2تشخیص بدم که بتونم از این پراپرتی استفاده کنم؟
امیدوارم تونسته باشم منظورم رو بفهمونم!

----------


## emrooz

public List<int> GiveList()
        {
            List<int> _result = new List<int>();

            _result.Add(4);
            _result.Add(8);
            _result.Add(10);
            _result.Add(24);

            return _result;
        }

با سلام وتشکر
مشکل من اینه که دیتا تیبل رو که در واقع لیستی از سطرهاست چطور تعریف کنم؟! به صورت list<list<string>>  هم تعریف کردم اما جواب نداد.لطفا راهنمایی بفرمایید.

----------


## AftaB66

سلام.



> public List<int> GiveList()
> {
> List<int> _result = new List<int>();
> 
> _result.Add(4);
> _result.Add(8);
> _result.Add(10);
> _result.Add(24);
> 
> ...


اگه درست فهمیده باشم..
شما می خواین این لیست رو به دیتاتیبل تبدیل کنین؟
در سیلورلایت دیتاتیبل و هش تیبل (دیگه بقیه اش رو نمی دونم) تعریف شده نیستن . می تونین یک کلاس Custom بسازین و لیست موردنظرتون رو از لیستی که دارید استخراج کنید و داخل لیستی از کلاس Custom بریزین.

----------


## emrooz

سلام 
ببینبد من یک سری اطلاعات رو از sql2000 توی یه دیتا تیبل ریختم و می خوام اون اطلاعات رو توی دیتاگرید نمایش بدم. باید ابتدا اون رو به لیست تبدیل کنم. چطور میشه این تبدیل رو انجام داد.البته اگه راه دیگه ای هم برای این کار هست بفرمایید.!

----------


## exlord

> سلام 
> ببینبد من یک سری اطلاعات رو از sql2000 توی یه دیتا تیبل ریختم و می خوام اون اطلاعات رو توی دیتاگرید نمایش بدم. باید ابتدا اون رو به لیست تبدیل کنم. چطور میشه این تبدیل رو انجام داد.البته اگه راه دیگه ای هم برای این کار هست بفرمایید.!


اول یه کلاس تعریف کن برای نگه داشتن داده هات ...
 public class MyData
    {
        public int number1 { get; set; }
        public string string1 { get; set; }
        public string string2 { get; set; }
        public string string3 { get; set; }
    }

توی وب سرویس بعد از اینکه datatable ساخته شد ....

public List<MyData> GetData()
        {
            List<MyData> data = new List<MyData>();

            DataTable dt = GetDataFromDAtaBAse();

            foreach (DataRow item in dt.Rows)
            {
                data.Add(new MyData() { 
                    number1 = Convert.ToInt32( item["number1Column"]),
                    string1 = item["string1Column"].ToString(),
                    string2 = item["string2Column"].ToString(),
                    string3 = item["string3Column"].ToString()
                });
            }

            return data;
        }

void sc_GetDataCompleted(object sender, ServiceReference1.GetDataCompletedEventArgs e)
        {
            dataGrid1.ItemsSource = e.Result;
        }

----------


## taghvajou

> با سلام وتشکر
> مشکل من اینه که دیتا تیبل رو که در واقع لیستی از سطرهاست چطور تعریف کنم؟! به صورت list<list<string>>  هم تعریف کردم اما جواب نداد.لطفا راهنمایی بفرمایید.


سلام به همه
البته اگه بخواین بدون اینکه کلاس بسازین این کار رو انجام بدین، میتونین  از یکی از توانمندیهای جدید دات نت فریم ورک چهار استفاده کنین به نام  Tuple. یعنی یه لیست از تیوپل ها درست کنین. تیوپل کلاس جدیدیه که میشه  آرایه ای از چند تایپ مختلف رو در خودش جا بده. مثلا  Tuple<string, int>. حالا شما میتونین یه  List از این تیوپل ها رو استفاده کنین

----------


## AftaB66

نمی دونم سوالم رو بد پرسیدم(پست 146)!!!!

----------


## manelian00021

برای ورود به یک یوزر کنترل از یک ی.زر کنترل دیگر در حالتیکه مانند مودالها صفحه زیر تاریک شود .



privatevoid btnNew_Click(object sender, RoutedEventArgs e)[LTR] 

{

///اطلاعات مربوط به باز شدن فرم جدید 

Grid grUsc = newGrid(); 
grUsc.Margin = 
newThickness(10);
grUsc.Width = 1000; 
Border b = newBorder();
b.Name = 

"uscBorder";
b.Background =  
newSolidColorBrush(Colors.Black);
b.Opacity = 0.6;
b.Height = 900;

USCNewCost usc = newUSCNewCost();
grUsc.Children.Add(usc);
LayoutRoot.Children.Add(b);
LayoutRoot.Children.Add(grUsc); 
} 

 


در یوزر کنترل دومتان یک گرید بعد از تعریف یوزر کنترل تعریف کنید مثل زیر 

<Grid x:Name="LayoutRoot" Background="White" Height="455" Width="776" ShowGridLines="False">
منظور از LayoutRoot در بالا همین است

----------


## manelian00021

نوشته شده توسط *emrooz*  با سلام وتشکر
مشکل من اینه که دیتا تیبل رو که در واقع لیستی از سطرهاست چطور تعریف کنم؟! به صورت list<list<string>> هم تعریف کردم اما جواب نداد.لطفا راهنمایی بفرمایید

............
در سیلورلایت دیتاتیبل نداریم برای این کار می توانید از سرویس ها استفاده کنید و با آبجکت ها و سرویس های ساخته شده در پروژه سیلورلایت 
System.Collections.ObjectModel.Collection<SR_BLSto  ck.Stock> lstStock = new System.Collections.ObjectModel.Collection<SR_BLSto  ck.Stock>();

----------


## manelian00021

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

----------


## taghvajou

سلام به همه
در مجموع برای انتقال دیتا از سیلور به ای اس پی دات نت چند تا کار میشه انجام داد. نویگیت کردن به یک یو آر آی، فراخوانی یه هندلر، استفاده از یه وب سرویس، فراخوانی متد با جاوا اسکریپت.
بستگی داره به کاری که میخواین بکنین.

----------


## raaaaaz

با سلام و تشكر به خاطر مطالب مفيدتون
من حدودا يك هفته است كه وارد محيط Silverlight شده ام به همين خاطر مبتدي هستم. 
توي پرو‍ژه احتياج به يك Container دارم كه ساير فرمها، كه هركدام شامل كنترلهاي مخصوص به خودشون (مثل Grid,TextBox,...) هستند، روي آن Load بشن در حقيقت اين Container يك صفحه ثابت است. ولي نميدونم كه ‍اينContainer رو چطوري تعريف كنم و همينجور ادامه كار.................

----------


## taghvajou

سلام به همه
من روی سوال شما خوب متوجه نشدم. شما به راحتی این کار رو با یه گرید میتونین انجام بدین!

----------


## raaaaaz

> سلام به همه
> من روی سوال شما خوب متوجه نشدم. شما به راحتی این کار رو با یه گرید میتونین انجام بدین!


سلام 

ممنون از پاسخ
يعني براي ‍Container ثابت كه براي همه صفحه هامون داريم، يه Usercontrol بگذاريم كه توش فقط يه Grid باشه.؟

----------


## hasanshamim

با سلام خدمت آقای تقواجو
یه مشکل که تو پروژه  سیلور بیزینس دارم اینه که اگه دو تا جدول اگه با هم ارتباط داشته باشند دیگه رکورد اضافه نمی کنه داخل dataform
داخل برنامه اضافه می شه ولی داخل بانک نمی ره....!

----------


## taghvajou

سلام به همه
اینکه میفرمایین ربطی به سیلورنداره ها! کوئری تون رو چک کنین!

----------


## hasanshamim

چون به صورت ویزاردی دیتا فرم رو روی یوزر کنترل انداخته بودم submit براش ننوشته بودم ... درست شد..

----------


## yaserjvani

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

----------


## taghvajou

میشه بگین چه ربطی داشت به سیلورلایت?!
با یه کلاس لینک تو اس کیو ال( LINQ to SQL)

----------


## yaserjvani

من یه کوئری توی دامین سرویس با نوع برگشتی IQueryableنوشتم که حالا می خوام از مقدار بازگشتی اون به عنوان نتیجه جستجو استفاده کنم حالا نمیدونم این IQueryableرو چجوری نمایش بدم
لطفا کمککنید و بگید نوع برگشتی IQueryableچیه و چجوری میشه نشونش داد

----------


## davoodrm666_666

> من یه کوئری توی دامین سرویس با نوع برگشتی IQueryableنوشتم که حالا می خوام از مقدار بازگشتی اون به عنوان نتیجه جستجو استفاده کنم حالا نمیدونم این IQueryableرو چجوری نمایش بدم
> لطفا کمککنید و بگید نوع برگشتی IQueryableچیه و چجوری میشه نشونش داد


IQueryable یک اینترفیس که کوئری قبل از اجرا شدن بر روی دیتابیس از آن ارث می برد و خروجی متد شما هم می تواند IQueryable باشد.

----------


## yaserjvani

درسته ولی این IQueryable رو چجوری می تونم مثلا توی یه تکست باکس بریزم

----------


## davoodrm666_666

> درسته ولی این IQueryable رو چجوری می تونم مثلا توی یه تکست باکس بریزم


http://www.silverlight.net/learn/adv...f-ria-services

----------


## sepid.amin

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

----------


## yaserjvani

مرسی مرسی خیلی خوب بود ولی اگر من بخوام یه رکورد خواص رو از جدول بدست بیارم هنوز کار نمی کنه ببینید فرض کنید که جدولی از یوزر نیم و پسورد ها داریم و قصد داریم اگر کسی یوزر نیو و پسوردش را وارد کرد در جدول بگردد و اگر رکورد مورد نظر بود اجازه ورود بدهد .رکورد را بدست می یارم ولی نمی دونم چجوزی باید مثلا به فیلد پسورد اون دسترسی پیدا کنم 
مرسی.

----------


## yaserjvani

اقا کسی نیست به این سوال ما جواب بده صواب داره

----------


## alichater68

سلام به همه دوستان.
آقا من سیلور لایتو یه یک ماهیه که شروع کردم.
اما از نحوه شروع این تاپیک متعجبم!
یک سوال اساسا اساسی دارم.اونم اینه که چه موقع برای طراحی وبمون از سیلور لایت استفاده می کنیم و چه موقع از asp.net؟
برای مثال من می خام سیستم اتوماسیون اداری طراحی کنم کدوم بهتره؟؟ :متفکر: 
آخه اینطوری که معلومه سیلور لایت برای کار با پایگاه داده خیلی خوش رابط نیست. :گریه: 
من سیستم اتوماسیونو با asp.net نوشتم اما یکی کمکم کنه بگه که میشه همچین پروژه ای رو با سیلور لایت نوشت؟؟؟
ممنون

----------


## d_derakhshani

> سلام به همه دوستان.
> آقا من سیلور لایتو یه یک ماهیه که شروع کردم.
> اما از نحوه شروع این تاپیک متعجبم!
> یک سوال اساسا اساسی دارم.اونم اینه که چه موقع برای طراحی وبمون از سیلور لایت استفاده می کنیم و چه موقع از asp.net؟
> برای مثال من می خام سیستم اتوماسیون اداری طراحی کنم کدوم بهتره؟؟
> آخه اینطوری که معلومه سیلور لایت برای کار با پایگاه داده خیلی خوش رابط نیست.
> من سیستم اتوماسیونو با asp.net نوشتم اما یکی کمکم کنه بگه که میشه همچین پروژه ای رو با سیلور لایت نوشت؟؟؟
> ممنون


 بهتر بود اینو در تاپیک جداگانه مطرح می کردید. اگه همین چند تاپیک اخیر رو بخونید متوجه میشید که مورد کاربرد سیلورلایت چیه. 
در مورد اتوماسیون اداری 100% سیلورلایت گزینه برتره.
در مورد کار با پایگاه داده در سیلورلایت هم باید گفت اگه از Entity Framework و RIA Service استفاده کنید فوق العاده کار ساده و خوش رابط خواهد بود و سیلورلایت در این زمینه هیچ ضعفی نداره.

----------


## zahra_r

سلام به همه
من پروژه ای در مورد سیلور لایت دارم لطفا به من کمک کنید نمی دانم از کجا شروع کنم تا حالا برنامه نویسی تحت وب کار نکردم :متفکر:

----------


## taghvajou

سلام به همه
چه پروژه ای هست خب! بگو تا حدالامکان راهنمایی کنیم.

صادقانه بگم که زیاد هول هم نکن. اگه پروژه فرم اپلیکیشن نوشته باشی کافیه واسه اینکه بتونی با سیلور شروع به کار کنی. زیاد نیاز نیست که تو پروژه تحت وب متبحر باشی.

اول شما معماری کارت رو مشخص کن. کلمه معماری هم خیلی قلمبه است! ساده اش میشه اینکه مشخص کن که میخوای از چه طریقی دیتا تبادل کنی: WCF یا RIA و هر چی

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

دوم اینترفیست رو طراحی کن

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

باور کن به همین راحتی

----------


## taghvajou

صادقانه بگم که زیاد هول هم نکن. اگه پروژه فرم اپلیکیشن نوشته باشی کافیه  واسه اینکه بتونی با سیلور شروع به کار کنی. زیاد نیاز نیست که تو پروژه  تحت وب متبحر باشی.

اول شما معماری کارت رو مشخص کن. کلمه معماری هم خیلی قلمبه است! ساده اش  میشه اینکه مشخص کن که میخوای از چه طریقی دیتا تبادل کنی: WCF یا RIA و هر  چی

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

دوم اینترفیست رو طراحی کن

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

باور کن به همین راحتی

----------


## nooshzad_parto

چرا آموزش سبلورلایت رها شده ؟؟؟؟؟؟؟؟؟؟؟؟؟

----------


## taghvajou

سلام به همه



> چرا آموزش سبلورلایت رها شده ؟؟؟؟؟؟؟؟؟؟؟؟؟


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

----------


## parsdarab

سلام دوستان

من توی پروژه سیلور لایتم به مشکل بر خوردم؟

کدی که نوشتم به صورت زیر است




DomainServiceAccountManager d = new DomainServiceAccountManager();
        //کد خرید در این متغیر ریخته می شود
        int IDMemberToBuy = 0;
        //لیستی از کدهایی افرادی که مصرف کننده بودند
        List<int> LstIDEat;
        //هزینه خرید
        double MoneyBuy = 0;
        //هزینه خرج به ازای هر نفر
        double MoneyEat = 0;
        // ثبت تاریخ خرید
        string tarikh = "";
        private void btnOK_Click(object sender, RoutedEventArgs e)
        {
            Member m=new Member();
            Web.Buy b=new Web.Buy();
            LstIDEat = new List<int>();
            try
            {



            for (int i = 0; i < cnt; i++)
            {
                //دربافت کد شخصی که خربد کرده است
                if (r[i].IsChecked==true)
                {
                    IDMemberToBuy = Convert.ToInt32(r[i].Content);
                }
                //اضافه کردن کد شخصی که در این خرید مصرف کننده بوده است
                if (c[i].IsChecked == true)
                {
                    LstIDEat.Add(Convert.ToInt32(r[i].Content));
                }
            }
            // ثبت تاریخ و هزینه ها
            MoneyBuy = Convert.ToDouble(txtMoney.Text.ToString());
            tarikh = ClnBuy.SelectedPersianDate.ToString();
            MoneyEat = MoneyBuy / LstIDEat.Count;
            //دادن مفدار به فیلد های خرید و درج آن در دیتا بیس
            b.ID_member = IDMemberToBuy;
            b.Money = MoneyBuy;
            b.Tarikh = tarikh;
            b.Hesab = false;

            d.Buys.Add(b);
            //d.SubmitChanges();
            d.SubmitChanges(op => { if (!op.HasError)IDBuy = b.ID; MessageBox.Show(IDBuy.ToString()); }, b);

            //EntityQuery<Web.Buy> q = d.GetBuysFQuery();
            //LoadOperation<Web.Buy> lop = d.Load(q, LoadDataBuy,null);
            
            //DGPerson.ItemsSource = lop.Entities;
            //LayoutRoot.Children.Add(DGPerson);

            //DomainServiceAccountManager[] dd = new DomainServiceAccountManager[LstIDEat.Count];
            DomainServiceAccountManager ddd = new DomainServiceAccountManager();
            //List<Eat> ee = new List<Eat>();
            Eat[] eee = new Eat[LstIDEat.Count];
            
            //MessageBox.Show(e1.Money.ToString());
            for (int i = 0; i < LstIDEat.Count; i++)
            {
                eee[i] = new Eat();
                //dd[i] = new DomainServiceAccountManager();
                eee[i].ID_Member = LstIDEat[i];
                eee[i].ID_Buy = IDBuy;
                eee[i].Money = MoneyEat;
                eee[i].Hesab = false;
                ddd.Eats.Add(eee[i]);
                //dd[i].Eats.Add(eee[i]);
                //dd[i].SubmitChanges();
            }
            ddd.SubmitChanges();

            }
            catch (Exception ee)
            {

                MessageBox.Show(e.ToString());
            }
        }
        




خوب در کد بالا من یه جدول دارم به نام buy که اطلاعات خرید ثبت میشه
بعد از درج خرید شناسه ای(کلیدی) در متغیر IDBuy دخیره می شود

حالا این به عنوان کلید خارجی می خوام در جدول Eat ذخیره کنم
بعد به تعداد چک باکس هایی که تیک خورده می خوام در جدول Eat رکورد ثبت کنم

***********************************************
کد من اینجا مشکل داره که رکورد در جدول buy ثبت میشه و آخرین کلید ثبت شده هم دریافت میکنه اما هیچ اطلاعاتی در جدول eat ثبت نمیشه
و خطای زیرو میده

----------


## parsdarab

سلام 
مشکلم حل شد!!!!!!!!!!!!!!!!!!!!!

----------


## parsdarab

سلام دوستان
من پروژه پایانی که با SilverLight بود تمام شد؟
حالا چندتا سئوال راجع به این تکنولوژی داشتم موقع ارائه واسه استاد توضیح بدم.
اگه کسی در مورد این تکنولوژی مطلب جدیدی داره لینکشو بذاره خواهشا


سوال اول:وقتی که پروژه رو اجرا می کنی و با راست کلیک و انتخاب گزینه install  اونو روی سیستم client نصب می کنیم حالا فرض کنید این پروژه بانک اطلاعاتی داره آیا بانک اطلاعاتی این پروژه بر روی سیستم client نصب می شه یا نه اگر نصب نمیشه چیکار کنم نصب بشه؟

سئوال دوم: فرضا من پروژه رو آپلود کردم و شخصی پروژه من رو روی سیستم خودش نصب کرده آیا با هر عمل درج در بانک اطلاعاتی نیازی هست به اینترنت وصل باشه؟

سئوال سوم: یه سرور خوب که بشه پروژه رو روش آپلود کرد معرفی کنید اگه میشه نحوه آپلود کردنش هم توضیح داده باشه؟

----------


## taghvajou

سلام به همه
با عرض تبریک برای پایان پروژه تون
جواب سوال اول: وقتی برنامه به صورت آوت آو براوزر نصب میشه، اگه تبادل داده با وب سرویس باشه عملا فقط فایل زپ اصلی برنامه است که رو سیستم نصب میشه که دفعات بعدی دیگه دانلود نشه و فقط سند باکس سیلورلایت اون رو اجرا میکنه. لذا تو این حالت هیچ دیتایی رو کلاینت وجود نداره و ذخیره هم نمیشه. مگر اینکه شما تو بخشی از کار ایزولیتد استوریج داشته باشید یا سند ایکس ام الی رو کلاینت ذخیره کنید که تکلیف مشخصه.

جواب سوال دوم: اگه شما برنامه رو روی سرور اینترنتی نصب کنین با آی پی ولید یا دامین باید بار اول بهش وصل شد و بعد رو کلاینت نصب کرد، دفعات بعدی هم برای تبادل داده حتما باید به اون سرور وصل بشه! یا اینکه ممکنه شما برنامه رو روی سرور محلی اینترانتی پابلیش کرده باشین که خب باز هم همون قضیه است.

و جواب سوال سوم: تقریبا هیچ فرقی نمیکنه! کافیه که سروری که شما ازش استفاده میکنی ورژن مورد استفاده شما در دات نت فریم ورک رو داشته باشه و همچنین ورژن موتور پایگاه داده ای که به کار بردین. پس کافیه که نسخه دات نت و پایگاه داده رو چک کنین. برای پابلیش سیلورلایت هیچ چیز دیگه ای نیاز نیست که نصب باشه. و البته یکی سه تا مایم تایپ هم لازمه که رو آی آی اس سرور ست بشه.

----------


## یاسر مددیان

> سلام به همه
> و عرض ارادت و صبح بخیر
> از دوستان تشکر میکنم که صبوری کردند.
> بر حسب وظیفه امروز ساده ترین حالت نمایش لیست اطلاعات در گرید رو تقدیم خواهیم کرد.
> 
> من سعی میکنم به ساده ترین شکل ممکن بنویسم. اگه دوستان احساس میکنم که زیاده دیگه دارم ساده میگم و درازه گویی میشه، بگن تا یه کم جمع و جور تر کد بزنیم.
> 
> با فرض بر اینکه پیش نیازها رعایت شده اند(VS 2010 - SQL 2008 و نکات پست قبل):
> 
> ...


 

حالا اگه بخوایم مقدار بازگشتی رو تو 3 تا textbox نمایش بدیم باید چیکار کنیم؟ بالفرض که مقدار بازگشتی یک رکورد شامل 3 فیلد باشه. اینجا اومدیم مقدار رو به itemsource گرید نسبت دادیم برای نمایش توی چند تا تکست باکس باید چیکار کنیم؟
در کل می خوام وقتی کاربر شماره پرونده رو توی تکست باکس وارد کرد و اینتر کرد این شماره وارد شده در بانک جستجو بشه و در صورت موجود بودن بقیه اطلاعات مربوطه تو همون صفحه توی مثلا 10 تا تکست باکس دیگه نمایش داده بشه.

ممنون میشم آقای تقوی جو و یا بقیه اساتید کمک بفرمایند.

----------


## taghvajou

سلام به همه
اینکه مقدار بازگشتی سه تا فیلد باشه باید یکی از این سه حالت باشه:1- تیوپل 2- ارئی 3- کالکشن
که در هر سه حالت شما باید ساب آیتم یا ایندکس مورد نظر رو وصل کنین به تکست.
اما اگه قراره که این تعداد زیاد بشه از آرایه یا لیست استفاده کنین. بعد بگین هر کدوم از آرایه ها رو در تکست باکس مورد نظرخودتون نشون بدین. 
یعنی مقدار بازگشتی تابع شما باید آرایه یا لیست باشه!

----------


## یاسر مددیان

سپاسگزارم. مشکلم حل شد.

----------


## mmbarBarnamenevis

سلام 
بنده برزنونی هستم 
مدتی است که تاپیگ های شما را مطالعه میکنم. البته بصورت پراکنده.
من در حین پیشروی یگ پروژه به مشکلات فراوانی برخورد میکنم و این باعث میشه که پروژه رو متوقف کنم و روی مشکلم متمرکز بشم. 
این موضوع باعث میشه که به خیلی از سایتهای داخلی و خارجی سر بزنم که آخرشم چیزی جز سردر گمی برام نداره.
بیشتر رو برنامه های تجاری کار میکنم و مشکلات زیادی با wcf ria service دارم و همچنین با شناسایی کاربران.
ببخشید یه درخواست غیر متعارف دیگه هم دارم و اون اینه که اگر ممکنه یه پروژه سبک ولی کامل وبدون باگ رو تو سایت قرار بدین تا بتونیم با مطالعه و یا ویرایش اون ، یه برنامه خوب برای خودمون از آب در بیاریم.
گسترش دادن یه پروژه برام راحت تره تا اینکه ندونم باید از کجا شروع کنم. 
بشدت به کمک نیازدارم، *بشدت!
*ساقول.

----------


## ZahraSarrami

سلام باتشکرازمطالب خوبتون
من دوتا سوال دارم...
من برای پروژه تحصلیم باید یه وب سایت با سیلورلایت درست کنم
الان تقریبا طراحیش تموم شده ولی هرکاری میکنم سایتمscrollنمیخوره
و اینکه مثلا میخوام ازمنوهای اماده یا مثلا امارسایت استفاده کنم ولی کدای همشونhtmlوجاواس چطوری میشه این کدا را تو سیلورلایت استفاده کنم

----------


## taghvajou

سلام
در مورد سوال اول: کجا میخواین اسکرول بذارین؟ بعضی از کنترلها خودشون اسکرول پذیرن و بعضی هاشون رو باید تو کنترل اسکرول ویور بندازین. مثلا اگه صفحه اصلی خود سایت رو میخواین اسکرول بدین، باید گرید روت رو بذارین تو اسکرول ویور.
در مورد سوال دوم: کدهای آمار سایت رو تو صفحه ای اس پی که کنترل سیلورلایت توش هاست شده باید بذارین.

----------


## ZahraSarrami

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

----------


## taghvajou

خدا رو شکر
ضمنا برای تشکر کردن از دکمه زیر پست استفاده کنین.
میشه گفت تقریبا نفهمیدم سوالتون چیه ولی یه پاسخ کلی میگم. اگه کافی نبود شما دقیقتر بپرسین بنده هم دقیقتر عرض میکنم.
دو تا کار میشه کرد برای جابه جا شدن: یکی استفاده از پئیج نویگیشن و دیگری عوض کردن کنترل کانتنت یه پیج.

----------


## ZahraSarrami

من فقط میخوام بین صفحاتم جابه جا بشم :ناراحت: 
یکی به صورت کلی که ازیک صفحه کلا به صفحه دیگه برم
یکی هم به صورتی که میخوام مثلاباکلیک برروی یک لینک یه صفحه دیگه وسط همین صفحه اصلیم که لینک داخلش بود نمایش داده بشه
واینکه با این جابه جا شدن بین صفحات دکمه BackوForwardبروزرم (مثل IE) فعال بشه که بتونم به صفحه قبلی وبعدی که قبلا رفتم برم. :افسرده:

----------


## taghvajou

برای جابه جایی بین صفحات از نویگئت سرویس و دستور نویگیت استفاده کنین و یوآر آی بهش بدین. 
یا نویگیئت فریم. کلا باید فایل زمل مورد نظرتون رو در قالب یه یو آر آی بهش ناوبری کنین.
برای استفاده از دکمه های مرورگر،
نویگئیت سرویس قابلیت استفاده از هیستروی رو داره. فقط تو فایل اپ اصلی برنامه اون رو فعال کنین.

----------


## elielina

سلام
کسی یه کد اسلاید شو برای سیلورلایت نداره؟
ممنون میشم اگه بزارید

----------

