ویرایش و به روز رسانی ستون های گرید ویو در Asp.Net با خاصیت AutoGenerateColumns

در این مقاله قصد داریم ، بیاموزیم که چطور یک ستون خواندنی (ReadOnly) در گرید ویو را ویرایش کنیم

ویرایش و به روز رسانی ستون های گرید ویو در Asp.Net با خاصیت AutoGenerateColumns

حال برای شروع به کار یک بانک اطلاعاتی در SQL Server  به نام AjaxSamples  و یک جدول به نام Customers  ایجاد میکنیم

Create DataBase AjaxSamples
use AjaxSamples

SET ANSI_NULLS ON
GO


SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[Customers](
	[CustomerId] [int] NOT NULL,
	[Name] [varchar](100) NOT NULL,
	[Country] [varchar](50) NOT NULL
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF

GO

به صورت دستی در آن داده ثبت کنید.

حال ویژوال استادیو را باز کرده ویک پروژه از نوع Asp.Net ایجاد کنید .

روی اسم پروژه راست کلیک کرده ودر Add>NewItem<WebFrom  به نام Cs.aspxایجاد کنید

حال از ToolBax یک کنترل گرید به صفحه cs.aspx  بندازید

حال چند خاصیت  از گرید را برابر با true قرار میدهیم

1:خاصیت AutoGenerateColumns=true

2: خاصیت AutoGenerateEditButton=true برا ی ایجاد دکمه ویرایش بر روی گریدیو

و همچنین خاصیت های OnRowEditing, OnRowCancelingEdit و OnRowUpdating events را مشخص میکنیم

<asp:GridView ID="GridView1" runat="server" DataKeyNames="CustomerId" OnRowEditing="OnRowEditing" OnRowCancelingEdit="OnRowCancelingEdit" OnRowUpdating="OnRowUpdating" AutoGenerateEditButton="true">
</asp:GridView>

در این پارت از آموزش برای اتصال به بانک اطلاعاتی از روش Ado.Net استفاده کرده ایم حال در صفحه دستورات و منطق برنامه رفته و فضای نام های زیر را به برنامه خود اضافه کنید

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

حال نوبت به  پر کردن گرید ویو با خاصیت AutoGenerateColumns میرسد

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();
                }
            }
        }
    }
}

همان طور که مشاهده میکنید یک تابع bind ایجاد کرده ایم که برای  انتخاب رکورد از بانک اطلاعاتی  و فراخوانی در تابع load صفحه ، استفاده شده است.

حال اگر از برنامه اجرا بگیرید میتوان داده هایی را که در بانک اطلاعاتی  به صورت دستی ثبت کردید را مشاهده کنید

ویرایش:

وقتی که شما دکمه ویرایش را میزنید رویداد   OnRowEditing بایستی فراخوانی شود در این جا به راحتی از خاصیت EditIndex  خود گرید ویو استفاده میکنیم و ردیف هایی را که میخواهیم ویرایش میکنیم

و سپس برای آن که اطلاعاتی که ویرایش کردیم در گرید همان لحظه به نمایش درآید تابع BindGrid
 فراخوانی میکنیم

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

به روز رسانی :

برای به روز رسانی اطلاعات از رویداد OnRowUpdating  استفاده میکنیم

rotected 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();
}

منصرف:

وقتی از دکمه کنسل استفاده میکنیم رویدادOnRowCancelingEdit  در گرید ویو فعال میشود  که خاصیت EditIndex را برابر با -1 قرار میدهیم

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

 حال از برنامه اجرا بگیرید و داده های خود را ویرایش ، به روز رسانی و.. کنید

فایل های ضمیمه