حذف Delete السجلات في ADO.NET in ASP.NET Core Application
-
بنتعلم في هذا الدرس كيف بنعمل عمليات الحذف في سجلات قواعد البيانات باستخدام ADO.NET في تطبيق ASP.NET Core. حان الوقت الآن لتعلم ميزة حذف البيانات.
لذا انتقل إلى AllStudent View وقم بإضافة عمود جديد كما في الكود التالي:
@model List<StudentsModel>
<link href="~/lib/bootstrap/dist/css/bootstrap.css.map" rel="stylesheet" />
<table class="table table-bordered table-sm table-striped">
<thead>
<tr>
<th scope="col">Student No</th>
<th scope="col">FullName</th>
<th scope="col">Birthday</th>
<th scope="col">Address</th>
<th scope="col">UserName</th>
<th scope="col">Email</th>
<th scope="col">Mobile</th>
<th scope="col">CreatedDate</th>
<th scope="col">Update</th>
<th scope="col">Del</th>
</tr>
</thead>
<tbody>
@foreach (var student in Model)
{
<tr>
<td>
@student.StudentNo
</td>
<td>
@student.FullName
</td>
<td>
@Convert.ToDateTime(@student.Birthday).ToString("dd/MM/yyyy")
</td>
<td>
@student.Address
</td>
<td>
@student.UserName
</td>
<td>
@student.Email
</td>
<td>
@student.Mobile
</td>
<td>
@*@Convert.ToDateTime(@student.CreatedDate).ToString("dd/MM/yyyy")*@
@string.Format("{0:dd MMMM yyyy}", @student.CreatedDate)
</td>
<td>
<form asp-action="Delete" method="post" asp-route-id="@student.StudentID">
<button>Delete</button>
</form>
</td>
<td><a asp-action="Update" asp-route-id="@student.StudentID" class="btn btn-success small">Update</a></td>
</tr>
}
</tbody>
</table>
@{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); }
طيب نفهم شو عملنا
لاحظ ان أضفنا th element داخل العنصر head باسم Delete،
الكود الذي يعمل على ذلك:
<th scope="col">Del</th>
ثم اضفنا td element يحتوي على action للحذف
الكود الذي يعمل على ذلك:
<td>
<form asp-action="Delete" method="post" asp-route-id="@student.StudentID">
<button>Delete</button>
</form>
</td>
ثم اضفنا action attribute داخل form element باسم Delete باستخدام الكود
asp-action="Delete".
إن asp-action هو Tag Helper للمزيد حول هذا الموضع يمكن الانتقال الى الرابط
25 Tag Helpers Introduction to Tag Helpers in ASP.NET Core
قمنا أيضا باستخدام الكود
asp-route-id="@student.StudentID"
والهدف ارسال قيمة StudnetID ك parameter إلى form’s action لذلك عند النقر فوق الزر Delete ، يعمل form على استدعاء طريقة Delete action ويستقبل قيمة StudentID الذي تم النقر عليه.
انتقل الان الى StudentsController لإضافة action باسم Delete حيث تستقبل Parameter باسم id يحتوي على رقم الطالب للسجل الذي تم النقر عليه. (بسبب asp-route-id="@student.StudentID" المعين في form tag).
تمام باقي اضافة الكود التالي الخاص ب Delete Action
[HttpPost]
public IActionResult Delete(int id)
{
string connectionString = Configuration["ConnectionStrings:DefaultConnection"];
using (SqlConnection connection = new SqlConnection(connectionString))
{
string sql = $"Delete From Students Where Id=@@#{id}@@#";
using (SqlCommand command = new SqlCommand(sql, connection))
{
connection.Open();
command.ExecuteNonQuery();
connection.Close();
}
}
return RedirectToAction("AllStudent");
}
نفهم الكود وشو عملنا
تم انشاء Query لغاية حذف السجل برقم ال Id الذي تم ارساله.
الكود الذي يعمي على ذلك:
string sql = $"Delete From Students Where Id=@@#{id}@@#";
قمنا بتنفيذ هذه query باستخدام الأسلوب ExecuteNonQuery ، حيث بعد تنفيذ الحذف يتم إعادة التوجيه إلى action المسمى AllStudent بهدف عرض جميع بيانات الطلاب من قاعدة البيانات.
وكود عرض بيانات الطلاب تعلمنا كيف نطبقو سابقا
ملاحظة:
في المشاريع الحقيقية الافضل ما نحذف بهذه الطريقة، وذلك لحفظ جميع العميلات لغاية التوثيق مستقبلا والرجوع الى البيانات في حال كان الحذف عن طريق الخطأ او بسبب ثاني. ولتجنب الحذف يتم إضافة حقل في الجدول باسم Status مثلا ينغير قيمتو بين True او False بحيث اذا كانت true فهذا يعني ان هذا السجل active واذا كانت false فهذا يعني ان هذا السجل not Active ، وفي هذه الحالة يجب تعديل ال Query التي تقرا البيانات لعرضها بإضافة شرط اليها للتحقق من قيمة Status بحيث يجب ان تكون True .
يجب اظهار رسالة تأكيد للمستخدم لتأكيد الحذف (سنتعلم كيفية عرض Popup Window لاحقا)
تجريب التطبيق
قم بتشغيل التطبيق ثم تأكد من ان الكود السابق يعمل بشكل صحيح. وراسلنا اذا عند ملاحظات او استفسارات
قم بتشغيل التطبيق ثم تأكد من ان الكود السابق يعمل بشكل صحيح.
اترك تعليقك