ویرایش ، بروز رسانی و حذف در گرید ویو توسط AutoGenerateColumns

سه شنبه 16 تیر 1394

در این مقاله نحوه ویرایش ، بروز رسانی و حذف در گرید ویو توسط AutoGenerateColumns با استفاده از #C و VB.Net ارائه می گردد .

در این مقاله مثالی ارائه می گردد که نحوه انجام ویرایش،بروز رسانی و حذف در ASP.Net توسط AutoGenerateColumns  با استفاده از #C و VB.Net را بطور کامل توضیح داده است .

بانک اطلاعاتی (ِDatabase)

جدولی با نام Customers بصورت زیر ایجاد می کنیم :

اطلاعاتی درون جدول وارد می کنیم :

بخش HTML

بخش HTML زیر شامل یک کنترل GridView توسط مشخصه AutoGenerateColumns که بابر True تنظیم شده است ، می باشد . به منظور ایجاد خودکار دکمه های حذف و ویرایش ، خصوصیات  AutoGenerateEditButton و AutoGenerateDeleteButton با مقدار True تنظیم می شوند .

ستون CustomerId برابر مشخصه DataKeyNames در GridView تنظیم شده است .

GridView با رویداد های OnRowDataBound ، OnRowEditing ، OnRowCancelingEdit، OnRowUpdating و OnRowDeleteting تعیین شده است .

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

فضای نام (namespace)

اکنون باید این فضای نام ها را وارد کنیم .

#C

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

VB.Net

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

پر کردن کنترل GridView با مقدار True مشخصه AutoGenerateColumns

GridView توسط رکوردها از جدول Customers درون رویداد Page Load در صفحه ASP.Net پر می شود.

#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 توسط مقدار True مشخصه AutoGenerateColumns

زمانی که روی دکمه Edit کلیک می کنید ، رویداد OnRowEditing در GridView فراخوانی می شود . EditIndex در GridView با Row Index در GridView Row ویرایش شده است بروز رسانی می گردد.

 

#C

protected void OnRowEditing(object sender, GridViewEditEventArgs e)
{
    GridView1.EditIndex = e.NewEditIndex;
    this.BindGrid();
}

 

VB.Net

Protected Sub OnRowEditing(sender As Object, e As GridViewEditEventArgs)
    GridView1.EditIndex = e.NewEditIndex
    Me.BindGrid()
End Sub

 

Update

زمانی که روی دکمه Update کلیک کنید رویداد OnRowUpdating در GridView فراخوانی می شود .

ستون CustomerId که کلید اصلی است از مشخصه DataKey در GridView گرفته می شود در حالیکه فیلدهای Name و Country از ستون های خاص با مراجعه به Textboxها گرفته می شوند .

#C

 protected void OnRowUpdating(object sender, GridViewUpdateEventArgs e)
{
    GridViewRow row = GridView1.Rows[e.RowIndex];
    int customerId = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Values[0]);
    string name = (row.Cells[2].Controls[0] as TextBox).Text;
    string country = (row.Cells[3].Controls[0] as TextBox).Text;
    string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    using (SqlConnection con = new SqlConnection(constr))
    {
        using (SqlCommand cmd = new SqlCommand("UPDATE Customers SET Name = @Name, Country = @Country WHERE CustomerId = @CustomerId"))
        {
            cmd.Parameters.AddWithValue("@CustomerId", customerId);
            cmd.Parameters.AddWithValue("@Name", name);
            cmd.Parameters.AddWithValue("@Country", country);
            cmd.Connection = con;
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
        }
    }
    GridView1.EditIndex = -1;
    this.BindGrid();

 

VB.Net

Protected Sub OnRowUpdating(sender As Object, e As GridViewUpdateEventArgs)
    Dim row As GridViewRow = GridView1.Rows(e.RowIndex)
    Dim customerId As Integer = Convert.ToInt32(GridView1.DataKeys(e.RowIndex).Values(0))
    Dim name As String = TryCast(row.Cells(2).Controls(0), TextBox).Text
    Dim country As String = TryCast(row.Cells(3).Controls(0), TextBox).Text
    Dim constr As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
    Using con As New SqlConnection(constr)
        Using cmd As New SqlCommand("UPDATE Customers SET Name = @Name, Country = @Country WHERE CustomerId = @CustomerId")
            cmd.Parameters.AddWithValue("@CustomerId", customerId)
            cmd.Parameters.AddWithValue("@Name", name)
            cmd.Parameters.AddWithValue("@Country", country)
            cmd.Connection = con
            con.Open()
            cmd.ExecuteNonQuery()
            con.Close()
        End Using
    End Using
    GridView1.EditIndex = -1
    Me.BindGrid()
End Sub

 

Cancel Edit

زمانیکه روی دکمه Cancel Edit کلیک کنید ، رویداد OnRowCancelingEdit فرا خوانی می شود . در اینجا EditIndex برابر با 1- است و  GridView با اطلاعات پر شده است .

#C

protected void OnRowCancelingEdit(object sender, EventArgs e)
{
    GridView1.EditIndex = -1;
    this.BindGrid();
}

 

VB.Net

Protected Sub OnRowCancelingEdit(sender As Object, e As EventArgs)
    GridView1.EditIndex = -1
    Me.BindGrid()
End Sub

حذف رکودهای GridView

زمانیکه روی دکه Delete کلیک می کنید ، رویداد OnRowDeleting در GridView فرا خوانی می شود .

CustomerId که کلید اصلی است از مشخصه DataKey property گرفته شده است و با استفاده از CustomerId رکورد از جدول حذف خواهد شد.

#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 فراخوانی میشود جاییکه دکمه حذف اولین بار کلیک می شود سپس باید  تایید جاوا اسکریپت به مدیریت رویداد Click در سمت کاربر متصل شویم .

#C


protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow && e.Row.RowIndex != GridView1.EditIndex)
    {
        (e.Row.Cells[0].Controls[2] as LinkButton).Attributes["onclick"] = "return confirm('آیا از حذف این رکورد مطمئن هستید?');";
    }
}

 

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(2), LinkButton).Attributes("onclick") = "return confirm('آیا از حذف این رکورد مطمئن هستید?');"
    End If
End Sub

 

قربانی

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

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

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