اضافه کردن ستون ردیف به گریدویو (GridView) در Asp.Net
سه شنبه 18 فروردین 1394در این مقاله میخواهیم یک ستون در ابتدای گرید ویو به عنوان شماره ردیف اضافه کنیم
در این مقاله میخواهیم یک ستون در 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(); } }
- ASP.net
- 5k بازدید
- 3 تشکر