حذف GridView با نمایش پیغام تایید در ASP.Net

چهارشنبه 27 خرداد 1394

در این مقاله یک مثال در مورد حذف داده توسط GridView در ASP.Net آموزش خواهم داد که قبل از حذف آن توسط متد confrim یک پیغام تایید دریافت می کند، این متد جاوا اسکریپ می باشد که برای نمایش دریافت تایید از کاربر می باشد گرافیک این پیغام‌ها هم وابسته به مرورگر هستند و قابل تغییر نیستند . متن عنوان و دکمه‌ها هم با توجه به زبان سیستم عامل تعیین می‌شوند و قابل تغییر توسط برنامه نویس نیستند.

حذف GridView با نمایش پیغام تایید در ASP.Net

در این مقاله استفاده از خاصیت AutoGenerateDeleteButton در GridView وخاصیت AutoGenerateColumns را توسط#C و VB.Net برابر true قرار میدهدو همچنین وقتی که خاصیتAutoGenerateDeleteButton را true قرار میدهیم با نمایش پیغام تایید جاوااسکریپ ، رکورد در GridView حذف می شود.

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

اطلاعات را در جدول وارد کنید به عنوان مثال جدول زیر را مشاهد نمایید :

در صفحه HTML شامل یک کنترل GridView با خصوصیت AutoGenerateColumns برابر true قرار میدهیم و به صورت اتوماتیک دکمه(button) حذف ایجاد میکند که خصوصیت AutoGenerateDeleteButton را با مقدار true تنظیم میکند.خصوصیت DataKeyNames در GridView را  CustomerId قرار میدهیم.

GridView  با رویدادهای OnRowDataBound و OnRowDeleteting مشخص شده است.

<asp:GridView ID="GridView1" runat="server" DataKeyNames="CustomerId" OnRowDataBound="OnRowDataBound" OnRowDeleting="OnRowDeleting" EmptyDataText="No records has been added." AutoGenerateDeleteButton="true">
</asp:GridView>

فضاهای نام زیر را در #C و VB.Net وارد کنید.

کد #C

using System.Data;
using System.Data.SqlClient;
using System.Configuration;

کد VB.Net

Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration

GridView مجموعه ای است که در رویداد Page Load از رکوردهای جدول Customers استفاده می کند.

 
کد#C
protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        this.BindGrid();
    }
}
 
private void BindGrid()
{
    string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    using (SqlConnection con = new SqlConnection(constr))
    {
        using (SqlCommand cmd = new SqlCommand("SELECT CustomerId, Name, Country FROM Customers"))
        {
            using (SqlDataAdapter sda = new SqlDataAdapter())
            {
                cmd.Connection = con;
                sda.SelectCommand = cmd;
                using (DataTable dt = new DataTable())
                {
                    sda.Fill(dt);
                    GridView1.DataSource = dt;
                    GridView1.DataBind();
                }
            }
        }
    }
}

کد VB.Net

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    If Not Me.IsPostBack Then
        Me.BindGrid()
    End If
End Sub
 
Private Sub BindGrid()
    Dim constr As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
    Using con As New SqlConnection(constr)
        Using cmd As New SqlCommand("SELECT CustomerId, Name, Country FROM Customers")
            Using sda As New SqlDataAdapter()
                cmd.Connection = con
                sda.SelectCommand = cmd
                Using dt As New DataTable()
                    sda.Fill(dt)
                    GridView1.DataSource = dt
                    GridView1.DataBind()
                End Using
            End Using
        End Using
    End Using
End Sub

حذف رکوردهای GridView

وقتی که بر روی دکمه Delete (حذف)کلیک میکنیم رویداد OnRowDeleting فراخوانی می شود. Customerld یک کلید اصلی است که از خصوصیت DataKey گرفته میشود و با استفاده از Customerld رکورد از جدول بانک اطلاعاتی حذف میشود.

کد #C

protected void OnRowDeleting(object sender, GridViewDeleteEventArgs e)
{
    int customerId = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Values[0]);
    string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    using (SqlConnection con = new SqlConnection(constr))
    {
        using (SqlCommand cmd = new SqlCommand("DELETE FROM Customers WHERE CustomerId = @CustomerId"))
        {
            cmd.Parameters.AddWithValue("@CustomerId", customerId);
            cmd.Connection = con;
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
        }
    }
    this.BindGrid();
}

 

کد VB.Net :

Protected Sub OnRowDeleting(sender As Object, e As GridViewDeleteEventArgs)
    Dim customerId As Integer = Convert.ToInt32(GridView1.DataKeys(e.RowIndex).Values(0))
    Dim constr As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
    Using con As New SqlConnection(constr)
        Using cmd As New SqlCommand("DELETE FROM Customers WHERE CustomerId = @CustomerId")
            cmd.Parameters.AddWithValue("@CustomerId", customerId)
            cmd.Connection = con
            con.Open()
            cmd.ExecuteNonQuery()
            con.Close()
        End Using
    End Using
    Me.BindGrid()
End Sub

برای تعیین دکمه حذف برای اولین بار از رویداد OnRowDataBound استفاده می کنیم که از جاوا اسکریپ Confirm برای زمانی که کاربر می خواهد رویداد کلیک را انجام دهد ، استفاده می کنیم.

کد #C

protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow && e.Row.RowIndex != GridView1.EditIndex)
    {
        (e.Row.Cells[0].Controls[0] as LinkButton).Attributes["onclick"] = "return confirm('Do you want to delete this row?');";
    }
}

 کد VB.Net

Protected Sub OnRowDataBound(sender As Object, e As GridViewRowEventArgs)
    If e.Row.RowType = DataControlRowType.DataRow AndAlso e.Row.RowIndex <> GridView1.EditIndex Then
        TryCast(e.Row.Cells(0).Controls(0), LinkButton).Attributes("onclick") = "return confirm('Do you want to delete this row?');"
    End If
End Sub

نمایش پیغام تایید بعد از کلیک کردن دکمه حذف :

نرگس محمدی

نویسنده 36 مقاله در برنامه نویسان

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

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