ویرایش مقادیر داخل کنترل GridView در Asp.Net

یکشنبه 3 خرداد 1394

دسترسی به اطلاعات داخل بانک اطلاعاتی و ویرایش آنها در زمان اجرا (RunTime) یکی از امکانات نرم افزار است که برنامه نویس باید این امکانات را در اختیار مدیر سایت قرار دهد .

ویرایش مقادیر داخل کنترل GridView در Asp.Net

هنگامی که در کنترل GridView دکمه ویرایش را انتخاب میکنیم , ستون BoundField تبدیل به کنترل TextBox میشود ، که در این صورت کاربر میتواند متن داخل سطر انتخاب شده را تغییر دهد

در ابتدا باید یک پروژه در ویژوال استودیو ایجاد کنیم , سپس برای اتصال کنترل GridView به بانک اطلاعاتی و نمایش تعدادی رکورد می توانیم یک DataTable در خود پروژه ایجاد نماییم , تگ کنترل GridView به صورت زیر میباشد :


<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowEditing="OnRowEditing">
<Columns>
    <asp:BoundField DataField="Name" HeaderText="Name" ItemStyle-Width="150" />
    <asp:BoundField DataField="Country" HeaderText="Country" ItemStyle-Width="150" />
    <asp:TemplateField>
        <ItemTemplate>
            <asp:LinkButton Text="Edit" runat="server" CommandName="Edit" />
        </ItemTemplate>
        <EditItemTemplate>
            <asp:LinkButton Text="Update" runat="server" OnClick="OnUpdate" />
            <asp:LinkButton Text="Cancel" runat="server" OnClick="OnCancel" />
        </EditItemTemplate>
    </asp:TemplateField>
</Columns>
</asp:GridView>

همچنین باید فضای نامهای زیر را به پروژه اضافه نماییم :

#C :


using System.Data;
 

VB.NET  :


Imports System.Data

برای این که کنترل GridView در هنگام اجرای نرم افزار یک سری اطلاعات را به صورت پیش فرض نمایش دهد می توانیم یک DataTable را در قسمت دستورات ایجاد کنیم و GridView را به این DataTable متصل می کنیم .

#C


 protected void Page_Load(object sender, EventArgs e)
    {
        if (!this.IsPostBack)
        {
            DataTable dt = new DataTable();
            dt.Columns.AddRange(new DataColumn[3] { new DataColumn("Id"), new DataColumn("Name"), new DataColumn("Country") });
            dt.Rows.Add(1, " ایمان مدائنی", " ایران");
            dt.Rows.Add(2, "سجاد باقرزاده ", "ایتالیا");
            dt.Rows.Add(3, " مسعود شریفی", "فرانسه");
            dt.Rows.Add(4, " پاکان رحمانی", "روسیه");
            dt.Rows.Add(5, " احسان ", "حسینی");
            ViewState["dt"] = dt;
            this.BindGrid();
        }

VB.Net


 Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
        If Not Me.IsPostBack Then
            Dim dt As New DataTable()
            dt.Columns.AddRange(New DataColumn(2) {New DataColumn("Id"), New DataColumn("Name"), New DataColumn("Country")})
            dt.Rows.Add(1, " ایمان مدائنی", " ایران")
            dt.Rows.Add(2, "سجاد باقرزاده ", "ایتالیا")
            dt.Rows.Add(3, " مسعود شریفی", "فرانسه")
            dt.Rows.Add(4, " پاکان رحمانی", "روسیه")
            dt.Rows.Add(5, " احسان ", "حسینی")
            ViewState("dt") = dt
            Me.BindGrid()
        End If
    End Sub

در ادامه رویداد OnRowEditing را فراخوانی میکنیم , این رویداد هنگامی که فعال میشود که دکمه "ویرایش" کلیک شود .در داخل دستور این رویداد از GridView EditIndex یک EditIndex جدید ایجاد کرده ایم که به GridViewEditEventArgs متصل شده است .

#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


در داخل دستور رویداد  Cancel مقادیر موجود در DataTable داخل ViewState ذخیره میشود ، در داخل دستورات مربوط به ویرایش اطلاعات مربوط به DataTable در داخل ViewState ذخیره میشوند ، سپس از طریق RowIndex مشخص میشود که کدام سطر انتخاب شده است .سپس مقدار مربوط به آن DataTable به کنترل TextBox متصل میشود . در آخر مقدار داخل کنترل TextBox در داخل ViewState ذخیره میشود .

#C :


protected void OnUpdate(object sender, EventArgs e)
{
    GridViewRow row = (sender as LinkButton).NamingContainer as GridViewRow;
    string name = (row.Cells[0].Controls[0] as TextBox).Text;
    string country = (row.Cells[1].Controls[0] as TextBox).Text;
    DataTable dt = ViewState["dt"] as DataTable;
    dt.Rows[row.RowIndex]["Name"] = name;
    dt.Rows[row.RowIndex]["Country"] = country;
    ViewState["dt"] = dt;
    GridView1.EditIndex = -1;
    this.BindGrid();
}
 
protected void OnCancel(object sender, EventArgs e)
{
    GridView1.EditIndex = -1;
    this.BindGrid();
}

VB.Net :


Protected Sub OnUpdate(sender As Object, e As EventArgs)
    Dim row As GridViewRow = TryCast(TryCast(sender, LinkButton).NamingContainer, GridViewRow)
    Dim name As String = TryCast(row.Cells(0).Controls(0), TextBox).Text
    Dim country As String = TryCast(row.Cells(1).Controls(0), TextBox).Text
    Dim dt As DataTable = TryCast(ViewState("dt"), DataTable)
    dt.Rows(row.RowIndex)("Name") = name
    dt.Rows(row.RowIndex)("Country") = country
    ViewState("dt") = dt
    GridView1.EditIndex = -1
    Me.BindGrid()
End Sub
 
Protected Sub OnCancel(sender As Object, e As EventArgs)
    GridView1.EditIndex = -1
    Me.BindGrid()
End Sub

 

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

احسان حسینی

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

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

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