سلام به همه
یه مطلب جالب در مورد همخوانی سیلورلایت با پلتفرمها و مرورگرهای مختلف:
http://www.microsoft.com/getsilverli...l/default.aspx
سلام به همه
یه مطلب جالب در مورد همخوانی سیلورلایت با پلتفرمها و مرورگرهای مختلف:
http://www.microsoft.com/getsilverli...l/default.aspx
سلام به همه
یکی از دوستامون تو اینجا
https://barnamenevis.org/showthread.php?t=231493
پرسیدند که :
طریقه ی ذخیره ی اطلاعات یک TextBox درون پایگاه داده در سیلورلایت را به ساده ترین شکل ممکن به وسیله ی کد نویسی بیان کنید؟
برای جمع و جور بودگی پاسخها من همینجا جوابشون رو می نویسم.
پس Let's Go
برای اینکه دیگه تکراری گویی نکرده باشیم، حتما اول پست های شماره 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:
نیم اسپیس رو به همون روال اضافه کنین. نمونه ای از سرویس کلاینت بسازین.
هندلر اتمام تابع ثبت نام برنامه نویس رو بسازین و داخل حداقل یه پیام بذارین که ثبت شدگی رو بهمون اعلام کنه:
حالا یه تکست باکس بندازین تو صفحه زمل و نام گذاریش کنین (در اینجا: uxProgrammerNameTextBox).
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("ثبت شد.");
}
یه دکمه جدید هم بندازین و نام گذاریش کنین (در اینجا uxInserButton)
(تصویر شماره 3)
دوستان از گذاشتن اسمهای بلند و گویا اصلا ابا نداشته باشین، یه بار یه اسم بلند گذاشتن بهتر از سردرگم شدن تو اسمهای مخففه! نگران تایپ اسمها هم نباشین که خدا برکت بده به اینتلیسنس ویزوال استودیو!
به قول بخش خبری 21 شبکه یک : و در ادامه
رو دکمه دابل کلیک کنین و توش تابع اجرای دستور ثبت نام برنامه نویس رو از داخل نمونه سرویس ساخته شده با پارامتر ورودی متن تکست مورد نظر کنین:
(تصویر شماره 4)
private void uxInsertButton_Click(object sender, RoutedEventArgs e)
{
client.InsertProgrammerNameAsync(uxProgrammerNameT extBox.Text);
}
مصدوم آماده است.
بچه ها! دیدین دیروز برزیـــــــــــل چطور از جام حذف شد!!!
التماس دعا داریم.
آخرین ویرایش به وسیله taghvajou : شنبه 12 تیر 1389 در 11:34 صبح دلیل: عکسهاش یادم رفته بود! D:
سلام به همه مجددا!
تو تاپیک زیر:
https://barnamenevis.org/showthread.php?t=231576
دوست عزیزی (آقا محمد متا) در مورد نحوه نمایش راهنما سوال کرده بودند که بحث به نحوه نمایش عکس و نمایش اچ تی ام ال رسید. ان شاء الله به ترتیب زیر همینجا خدمتتون عرض خواهم کرد.
1- نحوه آپلود عکس
2- نحوه نمایش عکس از پایگاه داده
3- نحوه نمایش اچ تی ام ال
دوست عزیز زودتر شروع کن دیگه همچنان منتظرم
سلام
من از یه سایت خارجی یه چیزایی برای ذخیره ی داده در بانک پیدا کردم ولی خطا میده می دونم توضیح داده شده ولی می خواهم بدونم مشکل کار من کجاست. یه فایل ورد و دوتا عکس ضمیمه کردم.
مصطفی جان!
علی الظاهر، پراکسید تایپ های تعریف شده تو کلاس اینتیتی کارمند، یکییشون سردر هواست! یعنی کامپایلر تو دیکشنری که میخواد به ازای هر نوع، مقدارش رو بخونه، نتونسته تشخیص بده که مثلا به ازای نوع (کلید) نام چه مقداری باید از دیکشنری تعریف شدش، بخونه!
سلام مهندس تقواجو،
شما اگر سطح بیان را به زیر دیپلم کاهش بدید شاید بفهمم چی می گید همه که مثل شما حرفه ای نیستن.البته ببخشیدا!!؟
به ساده ترین زبانی که بلدید بگید چیکار کنم.
با تشکر
سلام دوست عزیز (تقواجو)
بنابه صحبتی که با هم داشتیم راجع به مشکلی که تو ایجاد پروژه ای که آموزش داده بودید و من به مشکل بر خورده بودم این فایل را ضمیمه می کنم در صورت امکان یک نگاهی بهش بندازید ممنون میشم
جهت اطلاع دوستان دیگه هم بگم که من تو پروژه در مرحله Add Service reference با پیغام خطا رو به رو میشم ابتدا تصور کردم شاید مشکل از Connection String است اما بعد از تغییر رشته اتصالی باز هم مشکل پابرجاست اگه از دوستان کسی پروژه ای که جناب تقواجو در مرحله قبل آموزش دادند را مرحله به مرحله جلو رفتند و به مشکل بر نخوردند اینجا اعلام کنند و اساتید 1 نگاهی به مشکل بنده هم بیندازید ممنون میشم.
عکس پیغام خطا هم ضمیمه شد.
سلام به همه
خوب خدمت آقا ایمان عارض که:
همون طور که تو گوگل تاک باهم بحث کردیم و شما متن دیتل این پیام رو واسم دادی، گفتم که مشکل از کانکشن استرینگه!
این کانکشن استرینگ شماست:
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) یه سند ایکس ام ال رفتاری متفاوت داره از یه رشته! و نیز استودیو هم میدونه که یه کانکشن استرینگ رو از تو فایل کانفیگ چطور بکار ببره!
نکته کار این بود.
برای اینکه حرفهامو باور کنی هم، هم سالوشنت رو مجددا برات آپ میکنم و هم تصاویری که بعد از اد کردن سرویس ازش گرفتم. البته بیشتر ادامه ندادم.
ضمنا دوستان نام خانوادگی من تقوی جو نوشته میشه و تقواجو خونده میشه مثل عیسی و موسی!
سلام دوباره بر (تقوی جو) عزیز
دوست عزیز من دوباره کاری که شما گفته بودید رو تست کردم اما به دلیل اینکه من تو sql server ، سروری با نام پیشنودی (به عنوان مثال کانکشن استرینگ خودتون) که SQLEXPRESS// داشته باشه ندارم و نام سرور من فقط OMID-PC خالی است به همین دلیل نیازی به // یا / نیست و همه حالات رو تست کردم اما باز هم نشد!!
لطفا راهنمایی بفرمایید ممنونم
علیک سلام.
اصلا یه کار جدیدتر میکنیم که دیگه به این مشکلات برنخوریم. استفاده از دیتاست!
تو پست بعدی اول این رو میگم بعد میریم سراغ عکس
یاعلی التماس دعا
سلام به همه
بریم سراغ وعده ای که با آقا ایمان داده بودیم.
با رایت کلیک تو پروژه بخش web، و با استفاده از گزنیه AddNewItem از کاتوگوری دیتا یه دونه DataSet به انتخاب و نامگذاری (در اینجا ProgrammerDataSet) وبه پروژه اضافه کنین.
خوب
حالا تو دیتاست رایت کلیک کنین و یه دونه تیبل آداپتور اد کنین.
همین که میخواد اد بشه صفحه اضافه کردن کانکشن استرینگ میاد.
دکمه رشته ارتباطی جدید (NewConnectionString) رو بزنین.
دوباره یه صفحه مودال باز میشه. از کمبوباکس اول نام سرور رو انتخاب کنین. بعد ذیلش نام کاربری و پسورد یوزر دیتابیس رو وارد کنین و دست آخر نام دیتابیسی که به این یوزر مپ شده رو هم انتخاب کنین.
اول دکمه تست رو بزنین تا مطمئن شین (دکمه پایین چپ)
بعد دکمه اوکی رو بزنین. تا صفحه کانشکن جدید بسته بشه
در ادامه به کانکشن استرینگتون اسم بدین (در انیجا ProgrramerConnectionString)
دوباره ادامه
حالا با زدن دکمه ساخت کوئری (Query Buliing) صفحه ساخت کویری باز میشه، تیبل مورد نظر رو اضافه کنین، توش کویری مورد نظر رو بنویسین
نکست کنین
اسم کویری رو بنویسین
و فینیش بزنین.
حالا بیلد کنین.
سلام به همه
ببخشید دیروز عجله ای شد نتونستم عکسهاشو ضمیمه کنم. تصویرها رو به ترتیب نگاه کنین.
بعد از ساخت دیتاست و آداپتور و کوئریهای لازم و بیلد کردن اون، برین تو وب سرویس و یه تابع جدید بنویسن با استفاده از آداپتور و متدهاش، پروژه رو بیلد کنین و ادامه کار رو هم دیگه میدونین (آپدیت کردن وب سرویس تو بخش سیلورلایت و ...)
متد جدیدی که تو وب سرویس نوشتم:
[OperationContract]
public int GetProgrammerCount()
{
int _result = 0;
BarnameNevisDataSetTableAdapters.ProgrammerTableAd apter adapter = new BarnameNevisDataSetTableAdapters.ProgrammerTableAd apter();
_result = (int)adapter.GetProgrammerCount();
return _result;
}
فقط یه نکته اینکه تعداد تصاویری که تو هر پست میشه ضمیمه کرد محدوده! لذا طی چند پست خدمتتون تقدیم میکنم.
ادامه تصاویر
باز هم ادامه تصاویر
و بازهم ادامه تصاویر
دیگه کار از گام به گام داره به نیم گام به نیم گام تبدیل میشه
امیدوارم که دیگه این سری مفید باشه و دوستان بتونن استفاده کنن
سلام دوست عزیز (خانم یا آقای -----|------ )
این توضیح های که دادم در واقع مراحل 4 و 5 و 6 و 7 و 8 از پست شماره 35 بودند که اونجا همه کار ها رو دستی انجام دادیم ولی اینجا با بهره گیری از ای دی او دات نت!
منظورتون رو واضح تر و لطفا همینجا مطرح کنین!
ادامه کار عین بقیه! پست 36 و به بعد!
بابا silverlight ! اول ازتون تشکر می کنم دوم آموزشتون کی شروع میشه؟ سوم اینکه اگه آموزشتون در طی هر چند گام با یک مثال از اون گامها همراه شه عالی میشه
ببخشید! توی ضمیمه ها تون امکان جمه آوری آموزش های تابحال (pdf ای ...) هست؟؟؟
سلام به همه و حسین آقای گل!
خیالت راحت مهندس! نهضت ادامه دارد!
مفصل در خدمت خواهم بود.
سلام به همه
بعد از مدتی که سایت برنامه نویس بالا نمی اومد (صادقانه اینا بهونه بود، سر منم شلوغ بود)، بین آموزشمون فاصله افتاد. حالا امروز میخوایم ادامه بدیم و بریم سراغ وعده قبلی مون یعنی عکس:
اولین مطلب در مورد گذاشتن عکس به صورت استاتیکه:
1- از تول باکس یه کنترل عکس (Image) بندازین تو صفحه زمل و نامگذاری کنین. (در اینجا uxImageBox )
تصویر شماره 1
2- رو بخش سیلورلایت رایت کلیک کنین و یه پوشه درست کنین به نام همون ایمیجز. بعد رو خود پوشه هم رایت کلیک کنین و از گزینه Add>Existing Item استفاده کنین و یه تصویر به پوشه ایمیجز اضافه کنین.
تصویر شماره 2
نکته خواهشا عادت کنین به پوشه بندی و نیم اسپیس سازی و ... که تو پروژه های بزرگ گیج میشه آدم!
3- حالا ایمیج باکس رو انتخاب کنین و از تو پنجره پراپرتیز (جنوب شرقی استودیو معمولا) پراپرتی سورس این قاب رو مقدار دهی کنین به با زدن دکمه براوزش و انتخاب تصویر مورد نظرتون.
تصویر شماره 3
دست آخر هم با تنظیم بقیه پراپرتی ها، حالت بهینه تصویرتون رو بدست بیارین مثلا مثل استرچ کردن.
تو قسمت بعدی گذاشتن تصویر به صورت دینامیک رو تقدیم خواهم کرد.
در این ماه شعبان، دوستان رو از دعای خیر خودتون بی نصیب نذارین.
سلام به همه و با کمی تاخیر نیمه شعبان و سالروز میلاد منجی بشریت رو به همه تبریک میگم
طبق دستور کار قبلی امروز میریم سراغ مقدار دهی تصویر با کد و به صورت دینامیک:
1- تو همون سالوشن قبلی مون، تو صفحه زمل، یه دکمه بندازین و نامگذاری کنین (در اینجا Set Image). قصد داریم به دنبال کلیک شدن این دکمه، یه عکس موجود در ریسورس در مقدار سورس ایمیج باکس (به پست قبلی توجه کنین) ست بشه.
تصویر شماره (1)
2- اونت کلیک این دکمه رو بسازین: دو روش وجود داره:
یک: دابل کلیک کنین روش: این روش برای همه جا کار راه انداز نیست.
دو: تو تگ اصلی کنترل اونت مورد نظرتون رو بنویسین و یه نیو کنین مانند تصویر شماره (2) - این روش برای همه کنترلها به کارمیاد.
نکته: تو مقداردهی از طریق کد، شما نمی تونین پث (Path) عکس رو از ریسورس مستقیم بذارین تو مقدار پراپرتی سورس عکس، بلکه باید اول یه نمونه از کلاس بیت مپ (BitMap) از نیم اسپیس (System.Windows.Media.Imaging) بسازین و پث رو در قالب یه یو آر آی (URI) به خوردش بدین و دست آخر مقدار پراپرتی سورس عکس رو با این بیت مپ پر کنین.
این که چرا تو مقدار دهی کردن در صفحه زمل (XAML) این ادا و اصول رو در نمیاریم اینه که خود ویژوال استودیو زحمت این کارها رو میکشه!
3- خوب تو اونت اجرای دکمه، کد زیر را بنویسین با توجه به توضیحات بالا البته:
البته یه کمک دیگه اینکه برای رفتن به اونت مورد نظر، رو اونت مورد نظرتون تو صفحه زمل رایت کلیک کنین و نویگیت (Navigate) کنین به رویداد مورد نظرتون - تصویر شماره (3)
تصویر شماره (4)
uxImageBox.Source = new BitmapImage( new Uri("/BarnameNevis;component/Images/Avator.jpg", UriKind.Relative));
البته گاهی مرض مجمل نویسی بنده عود میکنه، ولی برای دوستانی که یه مقدار تازه کارند، توضیح هم عرض خواهم کرد.
4- خوب دیگه هیچی! نکته فقط همونی بود که گفتم! برنامه رو اجرا کنین! مصدوم آماده است. F5 عنایت فرمایین.
تو پست ها بعدی نحوه آپلود کردن و ذخیره عکس تو پایگاه داده رو خدمتتون عرض خواهم کرد.
برای سلامتی و تعجیل در ظهور آقا و مولامون، یه صلوات از ته دل بفرستین.
التماس دعا
آخرین ویرایش به وسیله taghvajou : شنبه 09 مرداد 1389 در 21:17 عصر
یادم رفت بگم:
این مفصلا همون کد بخش 3 پست بالا بود. در واقع اول یه نمونه یو آر آی ساختم با آدرس پث تصویر.
Uri _uri = new Uri("/BarnameNevis;component/Images/Avator.jpg");
BitmapImage _image = new BitmapImage(_uri);
uxImageBox.Source = _image;
بعد یه نمونه بیت مپ ساختم (از اور رید دوم کلاس بیت مپ استفاده کنین از تون یو آر آی میخواد.)
دست آخر هم مقدار دهی سورس ایمیج باکس با مقدار ایمیج ساخته شده!
آخرین ویرایش به وسیله taghvajou : شنبه 09 مرداد 1389 در 21:22 عصر
سلام به همه
خریدنی نیست! پیدا کردنیه!
تو پراپرتی باکس! این ویژگی تمام آبجکت هاست. پنجره پراپرتیز رو هم تو جنوب شرقی ویژوال استودیو (به صورت پیش فرض) می تونین پیدا کنین.
تو عکس ضمیمه هم بهش اشاره شد.
سلام
دست شما درد نکنه
با تشکر
سلام .
می شه لطفا بگین که خود فولدر باید آپ بشه یا محتواش ؟
من تو لوکال با اس کیو ال راحت ارتباط بر قرار می کنم ولی موقعی که آپ میکنم error میده و فقط صفحه اول سایت بالا میاد
سلام به همه و شبتون بخیر
میلاد خانم معصومه رو هم بهتون تبریک میگم و اونهایی که دستشون به ضریح میرسه رو هم التماس دعا داریم!
اول یه خسته نباشید به خودم بگم که بالاخره از طوفان ثبت نام ورودی های جدید دانشگاه خلاصی پیدا کردم.
دوم هم یه عذرخواهی از بابت تمامی دوستانی که به این تاپیک سر میزند تا تو بحث شرکت کنند.
و اما پاسخ این دوستمون:
برای اینکه اشکال کار کامل قابل درک بشه باید یه چند تا نکته عرض کنم.
تو سیلورلایت اگه دقت کرده باشین ما یه وظیفه جابه جایی دیتا و داده رو به یه سرویس واگذار میکنیم. یه سرویس از نوع دبیلیو سی اف (wcf) که ارتباط با سیلورلایت در اون فعال شده است یعنی (silverlight-enalbled) که تو تمپلیتهای نیو آیتم وجود تو کاتوگوری وب هست.
و از توابعی که تو این سرویس نوشته شده استفاده میکنیم.
پس با این تفاصل باید دقت کنیم که صرف آپلود کردن اون سه تا پوشه و چند تا فایل کانفیگ کافی نخواهد بود البته برای دریافت دیتا
(این البته را واسه حالتی میگم که از سیلورلایت به عنوان یه بنر مدیا یه چیزی از همون فلشهایی که بالای سایت ها میذارن و یا یه پلیری که فایل مدیاشو رو از یه پوشه تو هاست میخونه، استفاده شده باشه خوب بالتبع دیگه نیازی به سرویس نخواهد بود)
سلام به همه
شبتون بخیر، به پاسخ بالا مناسب دیدم که این توضیح ریز رو هم اضافه کنم.
اگه دقت کرده باشین بعد از اینکه ما به پروژه ی وب سالوشن مون یه وب سرویس اضافه کردیم، میام تو پروژه سیلور سالوشنمون رفرنس وب سرویس رو اضافه میکنیم. (به یاد بیارین پست شماره 36 رو)
به دنبال این اضافه کردن یه فایل کلاینت کانفیگ به پروژه سیلور اضافه میشه:
تصویر شماره 1
فایل رو باز کنین. تو تگ کلاینتش آدرس یوآر الی که این وب سرویس از اون به پروژه اضافه شده دیده میشه که در اینجا طبیعتا لوکال هاست و پورتش خواهد بود:
تصویر شماره 2
حتما اگه سایت سیلورلایتی نوشتین که از وب سرویس توش استفاده کردین، قبل از آپلود این فایل رو باز کنین و آدرس سایت خودتون رو به جای لوکال هاست وپورت بنویسین!
تصویر شماره 3
با سلام و خدا قوب به آقای تقوی جو
بحث واقعا خوبی را شروع کردید
من مدتی بود که میخواستم silverlight را شروع کنم و حالا این تاپیک واقعا من را کمک میکنه
بیصبرانه منتظر ادامه آموزش هستم
سلام به همه
عرض ادب واحترام به همه دوستان و خواهر بزرگوارمون سرکار خانم دشتی
مطلب امروز ادامه مقوله عکس و این بار آپلود اون به پایگاه داده است.
مطالبی که ذیلا خدمتتون عرض میکنم برای جلوگیری از تکرار، در راستا و مرتبط با پست قبلی آپلود عکس (شماره 64) تقدیم میشه.
خوب ما دکمه براوز و دریافت تصویر رو تهیه کردیم و حالا میخوایم که اون رو وارد دیتابیس کنیم.
قبلا توضیح مطلب درباره نحوه نگهداری تصویر نکاتی رو عرض کنم:
محل نگهداری تصویر: یکی تو دیتابیس، یکی تو یه پوشه تو سرور و یکی هم تو سایت های آپلود عکس. برای نگهداری عکس تو دیتابیس، عکس رو بعد از آماده سازی به آرایه ای از بایت تبدیل میکنیم و اون بایت هارو تو دیتابیس ذخیره میکنیم، تو روش دوم عکس رو کپی میکنیم تو یه پوشه خاص و نام و مسیرش رو تو پایگاه داده ذخیره میکنیم، روش سوم یو آر ال عکس رو ذخیره میکنیم.
نکته های بعدی در مورد نوع تصاویر مد نظر و اندازه اونهاست که برای جلوگیری از اینکه پست مون فقط به توضیح و لالایی سپری نشه ادامه نکات رو تو پست های بعدی میگم و حالا بریم سراغ کد:
هدف پیاده سازی روش اول:
برای آپلود کردن ما مثل ای اس پی دات نت کنترل آپلود نداریم و باید خودمون بسازیم:
1- یه کنترل بردر (Border) بندازین تو فرم و یه کنترل ایمیج (Image) هم تو شکمش و بعد نامگذاری کنینش. (در اینجا uxUserImageBox) تصویر شماره 1
2- یه دکمه بندازین کنارش و نامگذاریش کنین (uxUploadImageButton) و بعد براش اونت (Event) کلیک بسازین. (ساخت اونت : بند دوم پست 64)
3- تو شکم اونت کلیک دکمه، باید از کلاس Open File Dialog یه نمونه بسازیم و با استفاده از اون عکس مورد نظر رو دریافت کنیم:
برای جلوگیری از انتخاب چند تا تصویر، ویژگی مالتی سلکت رو کور کنین و اگه خواستین فرمت عکس هایی که میشه گرفت رو هم فیلتر. با استفاده از شرط if مقدار بازگشتی متد شودیالوگ رو کنترل کنین که حتما چیزی انتخاب شده باشه (کست ضمنی به بول فراموش نشه)
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.");
}
تو کلاس 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- تابعی برای تبدیل استریم به تصویر
این جا هم نیم اسپیس (using System.Drawing;)
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;
}
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 : دوشنبه 03 آبان 1389 در 02:24 صبح
سلام به همه
امروز میخوام واکشی یه لیست اطلاعات از دیتابیس و نمایش اون رو تو دیتا گرید خدمت دوستان تقدیم کنیم. دوست خوبمون آقا معین تو این تاپیک پرسیده بودند.
برای آموزش، مطلب رو به دو بخش تقسیم میکنم: سرور ساید و کلاینت ساید.
پیش نیازهای لازم:
یه دیتابیس با حداقل یه جدول شامل چند تا فیلد
و اینکه پست های شماره 31 الی40 و 54 الی 59 رو خونده باشین تا نیاز نباشه که من در مورد ساختن سالوشن، دیتاست، سرویس، اونت و بقیه خورده کاری ها خیلی ریز بشم.
ممنون. تا شما یه پست های بالا رو مرور کنین من هم عکسهای آموزش رو تهیه میکنم.
سلام آقای تقوی جو
ما منتظریم همچنان
سلام به همه
و عرض ارادت و صبح بخیر
از دوستان تشکر میکنم که صبوری کردند.
بر حسب وظیفه امروز ساده ترین حالت نمایش لیست اطلاعات در گرید رو تقدیم خواهیم کرد.
من سعی میکنم به ساده ترین شکل ممکن بنویسم. اگه دوستان احساس میکنم که زیاده دیگه دارم ساده میگم و درازه گویی میشه، بگن تا یه کم جمع و جور تر کد بزنیم.
با فرض بر اینکه پیش نیازها رعایت شده اند(VS 2010 - SQL 2008 و نکات پست قبل):
میخواهیم لیست برنامه نویس هایی رو که دیتا بیس داریم رو نمایش بدیم.
در کل:
اول کلاسهای لازم رو میسازیم، بعد تابع لازم رو، بعد سرویس رو آپدیت میکنیم، بعد متد داخل سرویس رو فراخوانی میکنیم و دست آخر خروجی متد رو به گرید بایند میکنیم
اما گام به گام:
1- تو بخش وب پروژه مون یه کلاس اد کنین (RightClick->Add->Class) و نامگذاری کنین (Entities.cs). تصویر شماره 1
2- کلاس برنامه نویس رو با ویژگیهاش بسازین.
public class Programmer3- برین تو وب سرویس(BarnamenevisService.svc)، اون بالا، نیم اسپیس لازم برای تهیه یه لیست از کلاس برنامه نویس که نوشتیم (using System.Collections.Generic;) رو اضافه کنین.
{
/// <summary>
/// Properties - ویژگیها
/// </summary>
public int ProgrammerID;
public string FirstName;
public string LastName;
/// <summary>
/// Constructor - سازنده
/// </summary>
public Programmer()
{
}
}
4- یه متد بنویسین برای دریافت تمام برنامه نویسهای موجود تو پایگاه داده ( بدون ورودی و با خروجی لیستوار از کلاس برنامه نویس):
5- بخش وب رو بیلد کنین
[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;
}
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 لطفا
آخرین ویرایش به وسیله taghvajou : دوشنبه 10 آبان 1389 در 14:09 عصر دلیل: عکس هاش یادم رفته بود.
[
public class Programmer
{
/// <summary>
/// Properties - ویژگیها
/// </summary>
public int ProgrammerID;
public string FirstName;
public string LastName;
/// <summary>
/// Constructor - سازنده
/// </summary>
public Programmer()
{
}
}
ممنون از کد بالا
حالا چه طوری با dataset میتونیم گریدمون رو پر کنیم؟
سلام مجدد به همه
معین جان، متوجه نمیشم که چی میخواین؟ اصلا دیتاست رو میخواین چی کار؟
شما یه نکته رو توجه نمیکنین که لایه داده ها (Data Layer) ما سمت سرور ه نه سمت کلاینت! پس دیتاست که می فرمایین رو نمیشه کلاینت ساید به کار برد.
تو اون تابع که تو سرویس نوشتیم در واقع ما دیتاست رو تبدیل کردیم به یه لیست از شی مورد نظر، بعد با استفاده از سرویس بسته شامل اون لیست رو میفرستیم به سمت کلاینت.
یعنی در واقع ما دیتاست رو به گرید متصل نمیکنیم بلکه نتیجه اجرای متد موجود تو سرویس (یعنی e.Result) که میشه یه نوع لیستی (به نام آبزروال کالکشن که نوعی لیسته ولی با لیست تفاوت داره) رو به عنوان منبع مورد نظر به خورد گرید میدیم (بند 10 پست قبلی).
امیدوارم که مفهوم اینکه یه بار یه نمونه از سرویس درست میکنیم، بعد اول به صورت آسینک (()AsynC#####.######) متد موجود توش رو فراخوانی میکنیم و بعد تو اونت پایان یافتنش (compeleted#####.######) کار مورد نظرمون رو انجام میدیم رو دقت کرده باشین!
اگر هر قسمتش کافی نبود، می تونم مجددا خدمتتون دوستان توضیح کاملتر بدم.
همه تونو دوست داریم .
التماس دعا
با سلام
خوب اینجوری که برای داده های زیاد سرعت میاد پایین.
سلام به همه
از یه نگاه حرفتون درسته! یعنی یه لیست با وب سرویس رو از دیتابیس لود کنیم و نمایش بدیم، بسته به حجم دیتامون در مقایسه با لود همون مقدار با استفاده از مثلا ای اس پی دات نت و دیتاست، در حد چند میلی ثانیه کندتر میشه ولی در مجموع کل اپلیکیشن باید نگاه کنیم.
ببینین اگه بخواین یه برنامه خیلی خوشدست تحت وب داشته باشیم باید کلی جاوا اسکریپت و اینجور چیزا به کار ببریم که در مجموع هر بار باید کلی لود بشه (حتی اگه از ای جکس استفاده کنیم) ولی تو اینجا یه بار برنامه لود میشه بعد نصبش میکنی (اشاره به ویژگی OOB سیلورلایت) و من بعد فقط یه ارتباط داده ای نیازه! من یه برنامه رو با هر دوتاشون نوشتم!
در مجموع نگران حجم دیتا و سرعت نباش! تقریبا این مورد آزارت نخواهد داد یا حداقل بهتره بگم بیشتر از حالات دیگه و تکنولوژیهای دیگه آزار نخواهد داد!
دست آخر یه برداشت دیگه ای هم از سوال میشه کرد و اون اینه که اشکال به روش کار تبادل اطلاعات با استفاده از سرویس و ساخت کلاس و عدم امکان مستقیم از دیتاست وارد کنین. باید عرض کنم که روش دیگه برای تبادل اطلاعات بین سرور و کلاینت وجود نداره. چون مثلا تو ای اس پی دات نت، وقتی ریکوئست میرسه به آی آی اس، یه نمونه از هندلر کلاس مربوطه اش ساخته میشه و جزئیات صفحه به انضمام پاسخ درخواست فرستاده شده به مرورگر کلاینت برگردونده میشه و اونجا هم نمایش داده میشه! اینجا دیگه درخواست به اون معنا نیست و عملا باید خود دیتا تبادل بشه و تو کنترل نشون داده بشه!