真正简单的Datagridview显示行号方法
最近使用VB2005里的Datagridview控件做一个小程序,希望能在表格中显示行号,在网上搜索半天,网友提供的方法主要有两种:1、使用通过textrenderer.drawtext在行的标题位置绘制文本....
(俺是菜鸟,看着这个方法都觉得有点烦,虽然大虾们提供的程序行数并不多,但实现原理还是有点复杂)
2、通过在Datagridview控件的RowsPostpaint事件中增加处理代码,遍历Datagridview的每一行,通过在行的HeaderCell里写入行号实现。
个人觉得上两种方法都有点复杂,方法一没有使用Datagridview本身的功能,方法二经常需要遍历Datagridview的每一行,如果行数太多的话肯定效率不会高。
在上述方法的启示下,我找到了Datagridview的RowStateChanged事件,只需在该事件处理程序中加上一行代码即可为Datagridview显示行号了,代码如下:
e.Row.HeaderCell.Value = (e.Row.Index + 1).ToString
不过我的方法还有个问题,如果插入和删除行号,后续行的行号不会相应变动,于是我通过在Datagridview的RowsAdded和RowsRemoved事件处理程序中加入了如下代码:
Dim longRow As Long
For longRow = e.RowIndex + e.RowCount - 1 To DataGridProjects.Rows.GetLastRow(DataGridViewElementStates.Displayed)
DataGridProjects.Rows(longRow).HeaderCell.Value = (longRow + 1).ToString
Next
请注意,上述代码中仅对已在屏幕显示的行的行号进行了修改,不像前述方法一样需要遍历控件的每一行!
经测试,该方法完美解决了Datagridview的行号显示问题,因本人初学,也可能存在更为简单的解决方法没能通过网络搜到,仅将我的方法贴出来供大家探讨,希望高手多多批评指正! --------------------编程问答--------------------
--------------------编程问答--------------------
<Columns>
<asp:TemplateField ItemStyle-HorizontalAlign="Right">
<ItemTemplate>
<%# Container.DataItemIndex + 1 %>
</ItemTemplate>
</asp:TemplateField>
</Columns>
--------------------编程问答--------------------
<Columns>
<asp:TemplateField ItemStyle-HorizontalAlign="Right">
<ItemTemplate>
<%# Container.DataItemIndex + 1 %>
</ItemTemplate>
</asp:TemplateField>
</Columns>
呵呵,我写的是开发Windows应用程序,不是ASP .NET哦,这个我不懂的!不知道Windows窗体的Datagridview控件有没有更好的显示行号的方法? --------------------编程问答-------------------- private void dataGridView1_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e)
{
e.Row.HeaderCell.Value = e.Row.Index + 1;
}
这样好像还是不会显示行号诶 --------------------编程问答-------------------- 参考如下:
Dim dgv As DataGridView
dgv = TryCast(sender, DataGridView)
Dim rt As New Rectangle(e.RowBounds.Location.X, e.RowBounds.Location.Y, dgv.RowHeadersWidth - 2, e.RowBounds.Height)
TextRenderer.DrawText(e.Graphics, e.RowIndex + 1, dgv.RowHeadersDefaultCellStyle.Font, rt, Color.Black)
dgv = Nothing --------------------编程问答-------------------- woo_rain的方法非常棒 --------------------编程问答-------------------- 方法三:
VB.NET code
Private _num As Integer
Public Sub New()
Me._num = 0
End Sub
Protected Overridable Function BindNum() As Integer
Me._num = (Me._num + 1)
Return _num
End Function
Html code
<asp:TemplateField HeaderText="编号">
<ItemTemplate>
<%# BindNum() %>
</ItemTemplate>
</asp:TemplateField> --------------------编程问答-------------------- 谢谢楼主分享。 --------------------编程问答--------------------
我每行都能显示数据了,但是不是规律的数据行,显示1-9后,就变化了,有时候全部是1,有时候有调整到1-9.。。我用的是SYBASE的数据源。 --------------------编程问答-------------------- 这个问题我也整了好久,还是没法解决,呵呵 --------------------编程问答-------------------- 收藏学习了 --------------------编程问答-------------------- MARK!学习了 --------------------编程问答-------------------- 效果果然不错~~~~感谢LZ分享 --------------------编程问答-------------------- 好方法,值得学习。好的知识能够分享,人品也非常的不错。 --------------------编程问答-------------------- 比较好的做法,谢谢分享!
我通常都是在每行的第一列显示行号...没你这种方法简洁..
--------------------编程问答-------------------- 因为"123"的"23"被遮住了...
补充:.NET技术 , VB.NET