پست‌ها

نمایش پست‌ها از اکتبر, ۲۰۱۱

Drag و Drop کردن در الگوی MVVM

برای اضافه کردن یه قابلیت جدید به برنامه ي OPMLtools نیاز به Drag&Drop داشتم. برای انجام Drag&Drop تو حالت عادی تقریبا کار سختی نداریم ولی وقتی Drag&Drop رو تو MVVM بخوایم کار سخت میشه و… بعد جستجو به فریمورک متن باز GongSolutions رسیدم که کار Drag&Drop رو تو MVVM خیلی ساده میکنه. برای دانلود dll مربوطه میتونید از این روش کمک بگیرید یا از اینجا دانلود کنید. و اما نحوه استفاده همونطور که تو کد XAML بالا میبیند نحوه اضافه کردن قابلیت Drag&Drop خیلی سادس ویژگی های IsDragSource و IsDropTarget همونطور که از اسمشون پیداس مشخص میکنن که آیا کنترل مورد نظر میتونه مبدا و مقصد یک عمل Drag&Drop باشه. قسمت مهم این کد مقید کردن هندلر رخداد Drop به ViewModel ما به کمک ویژگی DropHandler هست. و اما تو ViewModel بازم کار برای ما راحت شده فقط کافیه اینترفیس IDropTarget رو پیاده سازی کنیم که شامل 2 متد DragOver و Drop میشه. public void DragOver(DropInfo dropInfo) { if (dropInfo.Data is OpmlModel && dropInfo.TargetItem is OpmlModel...

دي كامپايل كردن اسمبلي هاي CLR

هنگام Deploy كردن پروژه SQL CLR در SQL Server اسمبلي مربوطه در VIEW ي sys.assembly_files ذخيره ميشه. SELECT * FROM sys.assembly_files بصورت پيش فرض براي كمك در ديباگ كردن گزينه Deploy Code فعاله و سورس كد شما هم تو ديتابيس ذخيره ميشه.خوب براي ديدن سورس اسمبلي مورد نظر كافيه اونو Cast كنيم به VARCHAR(max) و تمام. SELECT CAST(content AS VARCHAR(max)) FROM sys.assembly_files ولي اگه گزينه Deploy Code رو غير فعال كنيم فقط Dll مربوطه تو ديتابيس ذخيره ميشه و … براي اين مورد كافيه ما Dll رو داشته باشيم و با .NET Reflector به سروس برسيم. و اما نكته اينه كه چجوري به Dll برسيم بعد سرچ به اين كد رسيدم (CLR Procedure) كه مياد Dll ذخيره شده تو ديتابيس رو داخل ديسك ذخيره ميكنه. using System; using System.IO; using System.Data; using System.Data.SqlClient; using System.Data.SqlTypes; using Microsoft.SqlServer.Server; using System.Security.Permissions; namespace ExtractSqlAssembly { [PermissionSet(SecurityAction.Demand, Unrestricted = true,...

برطرف كردن مشكل افزونه Regionerate در Visual Studio

بعد از نصب كردن آخرين نسخه افزونه Regionerate هنگام اجراكردن Visual Studio پيغام اروري با محتواي زير صادر ميشد. A problem occured while trying to initialize menus. System.ArgumentException: A Command with that name already exists. at EnvDTE80.Commands2.AddNamedCommand2(AddIn AddInInstance, String name, String ButtonText, String Tooltip, Boolean MSOButton, Object Bitmap, Object[]& ContextUIGUIDs, Int32 vsCommandStatusValue, Int32 CommandStyleFlags, vsCommandControlType ControlType) at Rauchy.Regionerate.Presentation.Addins.VisualStudio2005.Connect. OnConnection(Object application, ext_ConnectMode connectMode, Object addInInst, Array& custom) You may have to restart Regionerate. براي رفع اين مشكل اين فايل رو (Regionerate.Presentation.Addins.VisualStudio2005.dll) در مسير زير كپي (Replace) كنيد. C:\Program Files\Regionerate در ويندوز هاي 64 بيتي آدرس زير C:\Program Files (x86)\Regionerate با توجه به سورس باز بودن اين افزونه با يك تغ...

چندين نكته هنگام استفاده از تابع AVG در SQL SERVER

هنگام استفاده از تابع تجميعي AVG ممكنه با ارور زير مواجه بشيد Arithmetic overflow error converting expression to data type int. اين مشكل معمولا در مواقعي كه تعداد ركورد ها زياد باشن پيش مياد. تابع AVG برا اساس نوع ستوني كه روش داره كار ميكنه خروجي رو تعيين ميكنه.براي مثال اگه ستون شما INT باشه خروجي هم INT ميشه و مثل COUNT_BIG نيست كه خروجيش از نوع  BIGINT باشه.حال اگه مقدار خروجي بشتر از مقدار INT باشه ارور بالا صادر ميشه. براي رفع ميايم ورودي رو به BIGINT تبديل ميكنيم و تمام. AVG(cast(innerResult.DiffTime AS BIGINT)) AS [avgTime] مورد بعدي اينه كه تابع AVG از مقادير NULL چشم پوشي ميكنه فقط ممكنه با مشكل خروجي NULL مواجه بشيد توجه كنيد تابع AVG ميتونه مقدار NULL برگردونه بجاي صفر(البته منطقي هم هست). براي رفع مشكلاتي از اين دست در LINQ خوندن + و + پيشنهاد ميشه. و اما در SQL ميشه از روش زير استفاده كرد SELECT ISNULL(AVG(3+3+3+NULL),0)

برنامه ي OPMLtools

تصویر
پیشتر در رابطه با پاک کردن فید های تکراری مطلبی رو نوشته بودم تا اینکه چند وقت پیش این سوال رو تو سایت داناترین دیدم فرض کنید من چندتا bundle رو مشترک میشم که بعضی از فیدهاش رو قبلا مشترک بودم. حالا برای حل مشکل اشتراک های تکراری از یک فید چه راه حلی وجود داره؟ فرض کنید تعداد فیدها خیلی زیاده و امکان بررسی و حذف بصورت دستی وجود نداره. آیا افزوننه ای برای این کار وجود نداره؟ برای حل این مشکل برنامه ی کوچیکی رو تهیه کردم که با گرفتن فایل OPML فید های تکراری رو پاک میکنه و فایل یک دست شده رو براتون ایجاد میکنه. یکی از ویژگی های این برنامه اینه که ساختار فایل اصلی رو حذف نمیکنه یعنی اگه شما چندین سطح تودرتو داشته باشید این ساختار رو تو فایل خروجی حفظ میکنه(این قسمتش وقتمو زیاد گرفت) برای نوشتن این برنامه از نرم افزار سورس باز جناب نصیری خیلی ایده گرفتم از این فرصت استفاده میکنم و از ایشون تشکر میکنم. پيشنياز استفاده از اين برنامه ، نصب دات نت فريم ورك 4 است. http://opmltools.codeplex.com/