نمایش نتایج 1 تا 1 از 1

نام تاپیک: حذف ردیف در یک DataGrid با استفاده از یک تک دکمه

  1. #1
    کاربر دائمی آواتار piroozman
    تاریخ عضویت
    مهر 1386
    محل زندگی
    تهران
    سن
    48
    پست
    217

    حذف ردیف در یک DataGrid با استفاده از یک تک دکمه

    با سلام خدمت کلیه عزیزان و علاقه مندان به برنامه نویسی با Silverlight آن هم با استفاده از الگوی MVVM.
    اگر این مقاله را دارید می خونید و تازه می خواهید با این الگو آشنا شوید به امضاهای بنده ذیل این مقاله مراجعه کنید. در ضمن سورس این مثال رو در پایین همین صفحه قرار داده ام. به یاد داشته باشید این سورس وقتی کار می کند که شما دیتابیس مربوطه را که طی آموزش های قبلی ارائه شده در محل امضاء بنده ارائه شده است ساخته و رکوردهای لازم را در آن ایجاد کرده باشید.
    خدمت سروران عزیزم عرض کنم که روش ذکر شده روشی ساده برای حذف رکورد از دیتاگرید و بالتبع آن از دیتابیس می باشد. روش دیگری وجود دارد که شما می توانید برای هر ردیف در دیتاگرید یک کلید Dlelete پیش بینی کنید که کمی پیچیده تر بوده و به نظر بنده زیاد جالب نیست. با این وجود اگر علاقه ای به این روش دارید می توانید روش ساخت آنرا در اینجا مطالعه کنید. نکته دیگر این که این آموزش در ادامه آموزش نحوه استفاده از کنترل Silverlight DataGrid در الگوی MVVM است. پس لطفا پیش از آموزش و اجرای این مقاله به مقاله اشاره شده مراجعه کنید. به بریم سراغ آموزش:

    براي حذف يک رکورد از جدول RIAComment ابتدا کد زير را به Web Service موجود در پروژه RIADataGrid.Web افزوده و آنرا Build کنيد:
           #region DeleteRIACommetn
    [WebMethod]
    public RIAComment DeleteRIAComment(int RIACommentID)
    {
    RIATasksDBDataContext DB = new RIATasksDBDataContext();
    var result = (from RIAComments in DB.RIAComments
    where RIAComments.CommentID == RIACommentID
    select RIAComments).FirstOrDefault();
    DB.RIAComments.DeleteOnSubmit(result);
    DB.SubmitChanges();
    return result;
    }
    #endregion

    سپس بر روي Service Reference wsRIARIAComments موجود در پروژه RIADataGrid کليک راست کرده و گزينه Update Service Reference کليک کنيد.
    حال به کلاس موجود در پوشه Model تحت عنوان RIACommentsModel.cs مراجعه کرده و کدهاي زير را به آن اضافه کنيد:
    #region DeleteRIAComment
    public static void DeleteRIAComment(int RIACommentID,
    EventHandler<DeleteRIACommentCompletedEventArgs> eh)
    {
    WebServiceSoapClient WS = new WebServiceSoapClient();
    WS.Endpoint.Address = new EndpointAddress(GetBaseAddress());
    WS.DeleteRIACommentCompleted += eh;
    WS.DeleteRIACommentAsync(RIACommentID);
    }
    #endregion

    جهت ساخت يک ICommand ساده که عمليات delete را اجرا مي کند Command زير را به کلاس MainPageModel.cs واقع در پوشه ViewModel اضافه کنيد.
            #region DeleteCommand
    public ICommand DeleteCommand { get; set; }
    public void Delete(object param)
    {
    // Clear the Comment
    DeleteRIAComment((param as RIAComment).CommentID);
    }
    private bool CanDelete(object param)
    {
    return ((param as RIAComment) != null);
    }
    #endregion

    جهت ساخت Command فوق کد زير را به سازنده MainPageModel.cs اضافه کنيد:
           DeleteCommand = new DelegateCommand(Delete, CanDelete);

    ICommand فوق متد زير را براي اجراي واقعي عمليات Delete فراخواني مي کند و موجب پاک شدن ايتم حذف شده از Collection ي مي شود که DataGrid به آن مقيد شده است (اين چيزي است که موجب حذف رديف در DataGrid مي شود).
            #region DeleteRIAComment
    private void DeleteRIAComment(int CommentID)
    {
    // Call the Model to UpdateRIAComment the RIAComment
    RIACommentsModel.DeleteRIAComment(CommentID, (Sender, EventArgs) =>
    {
    if (EventArgs.Error == null)
    {
    // Find the comment
    var CommentInCollection =
    (from comment in colRIAComments
    where comment.CommentID == EventArgs.Result.CommentID
    select comment).FirstOrDefault();
    if (CommentInCollection != null)
    {
    // Remove it
    colRIAComments.Remove(CommentInCollection);
    }
    // Show any errors
    Errors = EventArgs.Result.Errors;
    // Set the visibility of the Message ListBox
    MessageVisibility = (Errors.Count > 0) ?
    Visibility.Visible : Visibility.Collapsed;
    }
    });
    }
    #endregion

    ساخت View
    روي MainPage.xaml کليک راست کرده و گزينه Open Expression Blend . . . را انتخاب کنيد:

    يک دکه به پايين صفحه اضافه کنيد.

    در قسمت Preperty دکمه، روي Advanced options در قسمت Command کليک کنيد.

    گزينه Data Binding . . . را انتخاب کنيد.

    در بخش Data Context گزينه DeleteCommand را انتخاب و OK کنيد.

    مجدداً در خواص مربوط به دکمه افزوده شده، روي Advanced options مربوط به command Parameter کليک کنيد.

    گزينه Data Binding . . . را انتخاب کنيد.

    در قسمت Element Property گزينه dataGrid را انتخاب کرده و در قاب سمت راست گزينه SelectedItem و نهايتاً روي OK کليک کنيد.
    اجراي پروژه

    وقتي پروژه Build شده و اجرا شد، توجه کنيد که دکمه مربوط به Delete غير فعال است چون هيچ رديفي از ديتاگريد انتخاب نشده است. اين اتفاق به اين دليل است که متد CanDelete موجود در View Model وقتي که رديفي انتخاب نشده باشد و هيچ پارامتري به متد پاس نشده باشد، مقدار False برمي گرداند

    اگر روي رديفي کليک کنيد، دکمه مربوطه فعال شده و جهت حذف رکورد مي توانيد روي آن کليک کنيد.
    مي توانيد کدهاي برنامه را از لينک زير دانلود کنيد:
    http://silverlight.adefwebserver.com...leteButton.zip
    آخرین ویرایش به وسیله piroozman : دوشنبه 01 اردیبهشت 1393 در 10:14 صبح

تاپیک های مشابه

  1. ارسال n ردیف رکورد به جدول با استفاده از متد ExecuteNoneQuery
    نوشته شده توسط Ehsan Rafsanjani در بخش ASP.NET Web Forms
    پاسخ: 11
    آخرین پست: جمعه 26 خرداد 1385, 18:05 عصر
  2. Bind کردن DataGrid با استفاده از فیلتر
    نوشته شده توسط یاسر بیرقی در بخش VB.NET
    پاسخ: 1
    آخرین پست: شنبه 30 مهر 1384, 13:49 عصر
  3. حذف یک سطر از datagrid
    نوشته شده توسط smhjm در بخش C#‎‎
    پاسخ: 4
    آخرین پست: سه شنبه 06 اردیبهشت 1384, 14:46 عصر
  4. حذف پیامهای خطا در datagrid
    نوشته شده توسط bbehnam در بخش VB.NET
    پاسخ: 6
    آخرین پست: یک شنبه 05 مهر 1383, 02:43 صبح
  5. حذف ردیف آخر از datagrid
    نوشته شده توسط mohsen99 در بخش C#‎‎
    پاسخ: 1
    آخرین پست: دوشنبه 26 مرداد 1383, 17:19 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •