PDA

View Full Version : اضافه کردن ستون "شماره ردیف" به GridView



federrer
پنج شنبه 25 مرداد 1386, 19:20 عصر
سلام:
چطور میشه به Gridview یک ستون به عنوان "شماره ردیف" اضافه کرد بطوریکه از 0 شروع بشه و بطور خودکار به ازای هر رکورد به مقدارش یکی اضافه بشه ؟؟؟

mahsa_k_r
پنج شنبه 25 مرداد 1386, 19:55 عصر
با سلام

کد در محیط وب:
ابتدا یک فیلد ردیف خودت به 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;
}
}

mahdi_farhani
جمعه 26 مرداد 1386, 06:54 صبح
سلام دوست عزیز . روش این دوستمون استفاده کردن من تا حالا استفاده نکردم . یه روش هم به این صورت ولی نمیدونم کدوم بهتره .
در قسمت وب یه ستون از نوع 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)

federrer
جمعه 26 مرداد 1386, 08:33 صبح
mahdei_farhani عزیز . دستت درد نکنه

نتونستم این خط از کد شما رو به C# تبدیل کنم . غلط املایی داره ؟؟

lblTemp = e.Row.FindControl("LblRow")lblTemp.text=e.rowindex

http://www.codechanger.com/

federrer
جمعه 26 مرداد 1386, 18:06 عصر
فکر نکنم مسئله زیاد پیچیده ای باشه !!

متاسفانه کدهایی که دوستان دادن اشکال داره ، انگار.

بقیه مهندسین اگه میتونن کمک کنن ( به زبان C#)

mahdi_farhani
جمعه 26 مرداد 1386, 20:46 عصر
سلام دوست عزیز اینم کد #C


Label lbl;
if (e.Row.RowType == DataControlRowType.DataRow)
{
lbl = (Label)e.Row.FindControl("label1");
lbl.Text = e.Row.RowIndex.ToString();

}

Aferir
شنبه 27 مرداد 1386, 12:35 عصر
کافی کد زیر را در 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>

federrer
شنبه 27 مرداد 1386, 14:33 عصر
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();
}
}

babi_wd
شنبه 27 مرداد 1386, 14:56 عصر
http://dotnetsource.com/fa/forum/default.aspx?g=posts&t=41

federrer
شنبه 27 مرداد 1386, 15:07 عصر
Aferir عزیز ، سلام

کد شما رو وارد کردم. کد گریدویو اینجوری شد :



<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>
این پیغام خطا رو میده و اصلا Debug هم نمیشه !!


The name 'OrderProductGridView' does not exist in the current context

روشی که دوستمون Mahdie_farhani ارائه کردن درست بود

mahdi_farhani
شنبه 27 مرداد 1386, 18:29 عصر
سلام ، روشی که دوستمون ارائه کردن به نظر روشی خوبی است و اون اروری که میده مال اینکه باید نام گرید را به جای Order... بزارری .

Aferir
یک شنبه 28 مرداد 1386, 14:07 عصر
آقای mahdei_farhani کاملا درست می گویند . می بایست به جای 'OrderProductGridView' اسم GridView خودتان را بگذارید. ببخشید که بیشتر توضیح ندادم

scholar
چهارشنبه 16 اردیبهشت 1388, 12:00 عصر
سلام
یه سوال فوری
چه طوری می تونم paging رو تو asp.net با کد نویسی فعال کنم (c#)ممنون می شم کمکم کنید

behiunforgiven
شنبه 30 آبان 1388, 00:11 صبح
کافی کد زیر را در 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>


از این جواب خیلی خوشم اومد

بسیار خوب بود مرسی

als_1360
یک شنبه 10 بهمن 1389, 09:42 صبح
کافیه یه یه ستون به گرید اضافه کنید به شکل زیر آن را پر کنید :

<asp:TemplateField>
<ItemTemplate>
<%# Container.DataItemIndex + 1 %>
</ItemTemplate>
</asp:TemplateField>

(البته تاریخ تاپیک رو دیدم ولی جواد دادن بد نیست حتی به تاپیکهای قدیمی)