سلام:
چطور میشه به Gridview یک ستون به عنوان "شماره ردیف" اضافه کرد بطوریکه از 0 شروع بشه و بطور خودکار به ازای هر رکورد به مقدارش یکی اضافه بشه ؟؟؟
سلام:
چطور میشه به Gridview یک ستون به عنوان "شماره ردیف" اضافه کرد بطوریکه از 0 شروع بشه و بطور خودکار به ازای هر رکورد به مقدارش یکی اضافه بشه ؟؟؟
با سلام
کد در محیط وب:
ابتدا یک فیلد ردیف خودت به DataGride اضافه کن
<asp:GridView ID="grdDeleteNews" runat="server" AllowPaging="True" AutoGenerateColumns="False"
DataKeyNames="ID" DataSourceID="sqlDeleteNews" BackColor="LightGoldenrodYellow"
BorderColor="Tan" BorderWidth="1px" CellPadding="2" ForeColor="Black" OnRowDataBound="grdDeleteNews_RowDataBound">
<Columns>
<asp:BoundField HeaderText="ردیف">
<HeaderStyle Font-Bold="False" Font-Names="Tahoma" Font-Size="8pt" ForeColor="#330000" />
</asp:BoundField>
</Columns>
<PagerSettings PageButtonCount="5" />
<FooterStyle BackColor="Tan" />
<SelectedRowStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" />
<PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue" HorizontalAlign="Center" />
<HeaderStyle BackColor="Tan" Font-Bold="True" />
<AlternatingRowStyle BackColor="PaleGoldenrod" />
</asp:GridView>
کد در محیط برنامه:
بعد در رویداد RowDataBound این کد رو بنویس
protected void grdDeleteNews_RowDataBound(object sender, GridViewRowEventArgs e)
{
switch (e.Row.RowState)
{
case System.Web.UI.WebControls.DataControlRowState.Norm al:
case System.Web.UI.WebControls.DataControlRowState.Sele cted:
case System.Web.UI.WebControls.DataControlRowState.Alte rnate:
{
System.Data.DataRowView oDataRowView = (System.Data.DataRowView)e.Row.DataItem;
if (oDataRowView != null)
{
if (e.Row.DataItemIndex >= 0)
{
if (e.Row.RowType.ToString() != System.Web.UI.WebControls.ListItemType.Header.ToSt ring() && e.Row.RowType.ToString() != System.Web.UI.WebControls.ListItemType.Footer.ToSt ring())
{
e.Row.Cells[3].Text = System.Convert.ToString(e.Row.DataItemIndex + 1);
e.Row.Cells[3].HorizontalAlign = System.Web.UI.WebControls.HorizontalAlign.Center;
e.Row.Cells[3].VerticalAlign = System.Web.UI.WebControls.VerticalAlign.Middle;
e.Row.Cells[3].Font.Bold = true;
e.Row.Cells[3].Width = System.Web.UI.WebControls.Unit.Pixel(100);
e.Row.Cells[3].ForeColor = System.Drawing.Color.Green;
}
}
آخرین ویرایش به وسیله Behrouz_Rad : پنج شنبه 25 مرداد 1386 در 20:37 عصر
سلام دوست عزیز . روش این دوستمون استفاده کردن من تا حالا استفاده نکردم . یه روش هم به این صورت ولی نمیدونم کدوم بهتره .
در قسمت وب یه ستون از نوع Template بزار و داخل اون یه Label اسمش به فرض می زاریم LblRow
حالا در قسمت RowDataBound و یا RowCrated به این کد رو بنویس
Dim lblTemp As Label
If e.Row.RowType = DataControlRowType.DataRow Then
lblTemp = e.Row.FindControl("LblRow")lblTemp.text=e.rowindex
الان در کد فوق شماره دریف از صفر و در صفحات بعدی نیز هم از صفر شروع میشه ولی اگر خواتسی ادامه پیدا کنه از کد زیر استفاده کن
lblTemp.Text=e.RowIndex * (gridview1.pageindex+1)
mahdei_farhani عزیز . دستت درد نکنه
نتونستم این خط از کد شما رو به C# تبدیل کنم . غلط املایی داره ؟؟
lblTemp = e.Row.FindControl("LblRow")lblTemp.text=e.rowindex
http://www.codechanger.com/
فکر نکنم مسئله زیاد پیچیده ای باشه !!
متاسفانه کدهایی که دوستان دادن اشکال داره ، انگار.
بقیه مهندسین اگه میتونن کمک کنن ( به زبان C#)
سلام دوست عزیز اینم کد #C
Label lbl;
if (e.Row.RowType == DataControlRowType.DataRow)
{
lbl = (Label)e.Row.FindControl("label1");
lbl.Text = e.Row.RowIndex.ToString();
}
کافی کد زیر را در Grid درج کنید
<asp:TemplateField HeaderText="ردیف">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text="<%# (OrderProductGridView.PageIndex * OrderProductGridView.PageSize) + (OrderProductGridView.Rows.Count + 1) %>"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
Mahdie_farhani عزیز .از پیگیری شما ممنونم .
درست شد .
با اجازه از این بحث یه نتیجه گیری داشته باشیم :
همونطور که Mahdie_farhani عزیز قبلا گفتن اول در قسمت وب یه ستون از نوع Template داخل گریدویو اضافه می کنیم بعد داخل داخل ستونی که درست کردیم در قسمت Item Template یه Lable به نام lable1 می گذاریم.
اگه خاصیت Pagesize گریدویو مقدار 10 داشته باشه ، یعنی تو هر صفحه اجازه نمایش 10 رکورد رو بهش بدیم ، کدی که لازمه در رخداد RowDataBound گریدویو بنویسیم اینجوری میشه :
protected void GView_RowDataBound(object sender, GridViewRowEventArgs e)
{
Label lbl;
int a;
if (e.Row.RowType == DataControlRowType.DataRow)
{
lbl = (Label)e.Row.FindControl("label1");
a = e.Row.RowIndex + (GView.PageIndex * 10);
lbl.Text = a.ToString();
}
}
Aferir عزیز ، سلام
کد شما رو وارد کردم. کد گریدویو اینجوری شد :
این پیغام خطا رو میده و اصلا Debug هم نمیشه !!
<asp:GridView ID="GridView1" runat="server" AllowPaging="True">
<Columns>
<asp:BoundField DataField="NAME" HeaderText="نام" SortExpression="NAME" />
<asp:TemplateField HeaderText="ردیف">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text="<%# (OrderProductGridView.PageIndex * OrderProductGridView.PageSize) + (OrderProductGridView.Rows.Count + 1) %>"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
The name 'OrderProductGridView' does not exist in the current context
روشی که دوستمون Mahdie_farhani ارائه کردن درست بود
سلام ، روشی که دوستمون ارائه کردن به نظر روشی خوبی است و اون اروری که میده مال اینکه باید نام گرید را به جای Order... بزارری .
آقای mahdei_farhani کاملا درست می گویند . می بایست به جای 'OrderProductGridView' اسم GridView خودتان را بگذارید. ببخشید که بیشتر توضیح ندادم
سلام
یه سوال فوری
چه طوری می تونم paging رو تو asp.net با کد نویسی فعال کنم (C#)ممنون می شم کمکم کنید
کافیه یه یه ستون به گرید اضافه کنید به شکل زیر آن را پر کنید :
<asp:TemplateField>
<ItemTemplate>
<%# Container.DataItemIndex + 1 %>
</ItemTemplate>
</asp:TemplateField>
(البته تاریخ تاپیک رو دیدم ولی جواد دادن بد نیست حتی به تاپیکهای قدیمی)