如何为datagridview加上序号

如何为datagridview加上序号,第1张

你可以重写DataGridView的OnRowPostPaint方法或者直接在DataGridView的RowPostPaint事件里写,如下(重写DataGridView的OnRowPostPaint方法)

using System

using System.Text

using System.Windows.Forms

using System.Drawing

namespace Test

{

class DataGridViewEx : DataGridView

{

SolidBrush solidBrush

public DataGridViewEx()

{

solidBrush = new SolidBrush(this.RowHeadersDefaultCellStyle.ForeColor)

}

protected override void OnRowPostPaint(DataGridViewRowPostPaintEventArgs e)

{

e.Graphics.DrawString((e.RowIndex + 1).ToString(), e.InheritedRowStyle.Font, solidBrush, e.RowBounds.Location.X + 15, e.RowBounds.Location.Y + 5)

base.OnRowPostPaint(e)

}

}

}

最简单的方法是在Datagridview的事件RowPostPaint事件下面添加如下代码即可

private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)

{

SolidBrush b = new SolidBrush(this.dataGridView1.RowHeadersDefaultCellStyle.ForeColor)

e.Graphics.DrawString((e.RowIndex + 1).ToString(System.Globalization.CultureInfo.CurrentUICulture), this.dataGridView1.DefaultCellStyle.Font, b, e.RowBounds.Location.X + 20, e.RowBounds.Location.Y + 4)

}

在中多数据绑定的控件很多 论功能来说 应该属DataGrid最为齐全 但它没有提供现成的显示记录序号的功能 不过我们可以通过它所带的一些参数来间接得到序号 下面来看看怎样得到和显示序号值计算方式如下

( )在后台

DataGrid CurrentPageIndex * DataGrid PageSize + e Item ItemIndex +

( )在前台

DataGrid CurrentPageIndex * DataGrid PageSize + Container ItemIndex +

说明

e表示System Web UI WebControls DataGridItemEventArgs参数类的实例

DataGrid 这里表示前台的一个实例

DataGrid CurrentPageIndex 获取或设置当前显示页的索引

DataGrid PageSize 获取或设置要在 DataGrid 控件的单页上显示的项数

下面我使用了 种方法来在前台显示序号 不过都是围绕上面的计算式展开

( )         使用DataGrid的ItemCreated设置值 而前台的单元格可以是绑定列或者模板列(包括空模板)

( )         使用DataGrid的ItemDataBound设置值 而前台的单元格可以是绑定列或者模板列(包括空模板)

( )         在前台直接绑定计算表达式

( )         在后台类中编写方法计算表达式由前台页面类继承调用

备注 在数据库中获取数据时设置额外的序号列这里不做讨论 我认为这是最糟糕的实现方法

下面以获取Northwind数据库的Customers表的数据为列 显示如下

序号

序号

序号

序号

序号

CustomerID

LONEP

MAGAA

MAISD

MEREP

MORGK

NORTS

OCEAN

OLDWO

OTTIK

PARIS

                 

      下面是WebFormPaging aspx文件代码

<%@ Page language= c# Codebehind= WebFormPaging aspx cs AutoEventWireup= false Inherits= AspnetPaging WebForm %>

<!DOCTYPE HTML PUBLIC //W C//DTD HTML Transitional//EN >

<HTML>

<HEAD>

<title>WebForm </title>

<meta content= Microsoft Visual Studio NET name= GENERATOR >

<meta content= C# name= CODE_LANGUAGE >

<meta content= JavaScript name= vs_defaultClientScript >

<meta content= name= vs_targetSchema >

</HEAD>

<body>

<form id= Form method= post runat= server >

<TABLE id= Table cellSpacing= cellPadding= width= align= center border= >

<TR>

<TD><asp:datagrid id= DataGrid runat= server AutoGenerateColumns= False Width= % AllowPaging= True >

<Columns>

<asp:BoundColumn HeaderText= 序号 ></asp:BoundColumn>

<asp:TemplateColumn HeaderText= 序号 ></asp:TemplateColumn>

<asp:TemplateColumn HeaderText= 序号 >

<ItemTemplate>

<asp:Label ID= itemIndex runat= server ></asp:Label>

</ItemTemplate>

</asp:TemplateColumn>

<asp:TemplateColumn HeaderText= 序号 >

<ItemTemplate>

<%# (DataGrid CurrentPageIndex * DataGrid PageSize + Container ItemIndex + ) %>

</ItemTemplate>

</asp:TemplateColumn>

<asp:TemplateColumn HeaderText= 序号 >

<ItemTemplate>

<%# GetRecordIndex( Container ItemIndex ) %>

</ItemTemplate>

</asp:TemplateColumn>

<asp:BoundColumn DataField= CustomerID HeaderText= CustomerID ></asp:BoundColumn>

</Columns>

<PagerStyle Mode= NumericPages ></PagerStyle>

</asp:datagrid></TD>

</TR>

<TR>

<TD></TD>

</TR>

<TR>

<TD></TD>

</TR>

</TABLE>

</form>

</body>

</HTML>

后台WebFormPaging aspx cs代码如下

using System

using System Collections

using System ComponentModel

using System Data

using System Drawing

using System Web

using System Web SessionState

using System Web UI

using System Web UI WebControls

using System Web UI HtmlControls

namespace AspnetPaging

{

public class WebForm : System Web UI Page

{

private int recordCount =

protected System Web UI WebControls DataGrid DataGrid

private void Page_Load(object sender System EventArgs e)

{

if(!Page IsPostBack)

{

DataGridDataBind()

}

}

//绑定数据

private void DataGridDataBind()

{

DataSet ds = DataAccess GetCustomersData()

this DataGrid DataSource = ds

this DataGrid DataBind()

}

#region Web 窗体设计器生成的代码

override protected void OnInit(EventArgs e)

{

InitializeComponent()

base OnInit(e)

}

/// <summary>

/// 设计器支持所需的方法 不要使用代码编辑器修改

/// 此方法的内容

/// </summary>

private void InitializeComponent()

{

this DataGrid ItemCreated += new System Web UI WebControls DataGridItemEventHandler(this DataGrid _ItemCreated)

this DataGrid PageIndexChanged += new System Web UI WebControls DataGridPageChangedEventHandler(this DataGrid _PageIndexChanged)

this DataGrid ItemDataBound += new System Web UI WebControls DataGridItemEventHandler(this DataGrid _ItemDataBound)

this Load += new System EventHandler(this Page_Load)

}

#endregion

//翻页

private void DataGrid _PageIndexChanged(object source System Web UI WebControls DataGridPageChangedEventArgs e)

{

DataGrid CurrentPageIndex = e NewPageIndex

DataGridDataBind()

}

//获取当前项

protected int GetRecordIndex(int itemIndex)

{

return (DataGrid CurrentPageIndex * DataGrid PageSize + itemIndex + )

}

private void DataGrid _ItemCreated(object sender System Web UI WebControls DataGridItemEventArgs e)

{

DataGrid dg = (DataGrid)sender

if(e Item ItemType == ListItemType Item || e Item ItemType == ListItemType AlternatingItem)

{

e Item Cells[ ] Text = (dg CurrentPageIndex * dg PageSize + e Item ItemIndex + ) ToString()

e Item Cells[ ] Text = (dg CurrentPageIndex * dg PageSize + e Item ItemIndex + ) ToString()

}

}

private void DataGrid _ItemDataBound(object sender System Web UI WebControls DataGridItemEventArgs e)

{

DataGrid dg = (DataGrid)sender

if(e Item ItemType == ListItemType Item || e Item ItemType == ListItemType AlternatingItem)

{

((Label)e Item FindControl( itemIndex )) Text = (dg CurrentPageIndex * dg PageSize + e Item ItemIndex + ) ToString()

}

}

}

数据层代码如下

using System

using System Data

using System Data SqlClient

using System Configuration

namespace AspnetPaging

{

public class DataAccess

{

private static string connString = ConfigurationSettings AppSettings[ ConnString ]

private DataAccess()

{

}

public static DataSet GetCustomersData()

{

SqlConnection conn = new SqlConnection(connString)

SqlCommand m = new SqlCommand( GetCustomers conn)

m CommandType = CommandType StoredProcedure

SqlDataAdapter dataAdapter = new SqlDataAdapter(m)

DataSet ds = new DataSet()

dataAdapter Fill(ds)

return ds

}

}

}

lishixinzhi/Article/program/net/201311/12926

System.Data.DataTable table = new DataTable()

System.Data.DataColumn column = new DataColumn()

column.ColumnName = "序号"

column.AutoIncrement = true

column.AutoIncrementSeed = 1

column.AutoIncrementStep = 1

table.Columns.Add(column)

table.Merge(ds.Tables[0])

datagridview1.DataSource = table

datagridview1.Columns["序号"].DisplayIndex = 0//调整列顺序

复制过来的,希望对你有帮助,c# 支持 隐式的转换,你也可以用Convert 来转换类型

你也可以使用:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)

{if (e.Row.RowIndex >= 0)

{

e.Row.Cells[0].Text = Convert.ToString(e.Row.DataItemIndex + 1)

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11391496.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-15
下一篇2023-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存