اضافه کردن ستون ردیف به گریدویو (GridView) در Asp.Net

سه شنبه 18 فروردین 1394

در این مقاله میخواهیم یک ستون در ابتدای گرید ویو به عنوان شماره ردیف اضافه کنیم

اضافه کردن ستون ردیف به گریدویو (GridView) در Asp.Net

 در این مقاله میخواهیم یک ستون  در  Asp.Net در ابتدای گرید ویو به عنوان شماره ردیف اضافه کنیم شماره ردیف به دو روش به صورت خودکار میتوان ایجاد کرد:

1-استفاده از DataItemIndex

2- استفاده از رویداد RowDataBound

در این ابتدا یک جدول به نام Customers  در پایگاه داده خود به شکل زیر  بسازید :

سپس مقداری اطلاعات درون آن درج میکنیم :

روش اول:

استفاده از خصوصیت DataItemIndex  :

ابتدا یک پروژه جدید از نوع وب فرم بسازید و از پنجره Solution Explorer  یک صفحه جدید به پروژه خود اضافه کنید سپس از جعبه ابزار یک کنترل گرید ویو به صفحه اضافه کنید که ستون اول شامل یک کنترل label می باشد که خصوصیت text آن به خصوصیت  Container.DataItemIndex متصل می شود لازم به ذکر می باشد که خصوصیت  DataItemIndex از شماره صفر شروع می شود و برای شروع سطر ها از شماره یک باید یک عدد به آن اضافه کنیم:

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
        <Columns>
            <asp:TemplateField HeaderText="ردیف" ItemStyle-Width="100">
                <ItemTemplate>
                    <asp:Label ID="lblRowNumber" Text='<%# Container.DataItemIndex + 1 %>' runat="server" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="Name" HeaderText="نام" ItemStyle-Width="150" />
            <asp:BoundField DataField="Country" HeaderText="کشور" ItemStyle-Width="150" />
        </Columns>
    </asp:GridView>

برای این مثال باید از فضای نام های زیر استفاده کنیم:


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

سپس در رویداد Page_Load صفحه یک تابع به نام BindGrid فراخوانی میکنیم:

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

روش دوم  :

استفاده از رویداد RowDataBound :

    <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="false" OnRowDataBound="OnRowDataBound">
        <Columns>
            <asp:TemplateField HeaderText="ردیف" ItemStyle-Width="100">
                <ItemTemplate>
                    <asp:Label ID="lblRowNumber" runat="server" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="Name" HeaderText="نام" ItemStyle-Width="150" />
            <asp:BoundField DataField="Country" HeaderText="کشور" ItemStyle-Width="150" />
        </Columns>
    </asp:GridView>

سپس در صفحه CS.aspx.cs  صفحه کد زیر را بنویسید :


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 Name, Country FROM Customers"))
        {
            using (SqlDataAdapter sda = new SqlDataAdapter())
            {
                cmd.Connection = con;
                sda.SelectCommand = cmd;
                using (DataTable dt = new DataTable())
                {
                    sda.Fill(dt);
                    GridView2.DataSource = dt;
                    GridView2.DataBind();
                }
            }
        }
    }
}

حال باید کد رویداد OnRowDataBound را بنویسیم:


protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        (e.Row.FindControl("lblRowNumber") as Label).Text = (e.Row.RowIndex + 1).ToString();
    }
}

 

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

برنامه نویسان

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

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

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