当前位置:编程学习 > C#/ASP.NET >>

真正简单的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>
--------------------编程问答--------------------
引用 2 楼 shy198l 的回复:
HTML code

<Columns>
     <asp:TemplateField ItemStyle-HorizontalAlign="Right">
           <ItemTemplate>
                <%# Container.DataItemIndex + 1  %>
           </ItemTemplate>
     </a……


呵呵,我写的是开发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> --------------------编程问答-------------------- 谢谢楼主分享。 --------------------编程问答--------------------
引用楼主 woo_rain 的回复:
最近使用VB2005里的Datagridview控件做一个小程序,希望能在表格中显示行号,在网上搜索半天,网友提供的方法主要有两种:
1、使用通过textrenderer.drawtext在行的标题位置绘制文本....
(俺是菜鸟,看着这个方法都觉得有点烦,虽然大虾们提供的程序行数并不多,但实现原理还是有点复杂)

2、通过在Datagridview控件的RowsPostpaint事件中增……

我每行都能显示数据了,但是不是规律的数据行,显示1-9后,就变化了,有时候全部是1,有时候有调整到1-9.。。我用的是SYBASE的数据源。 --------------------编程问答-------------------- 这个问题我也整了好久,还是没法解决,呵呵 --------------------编程问答-------------------- 收藏学习了 --------------------编程问答-------------------- MARK!学习了 --------------------编程问答-------------------- 效果果然不错~~~~感谢LZ分享 --------------------编程问答-------------------- 好方法,值得学习。好的知识能够分享,人品也非常的不错。 --------------------编程问答-------------------- 比较好的做法,谢谢分享!
我通常都是在每行的第一列显示行号...没你这种方法简洁..
--------------------编程问答-------------------- 因为"123"的"23"被遮住了...
引用 9 楼 han208 的回复:
引用楼主 woo_rain 的回复:
最近使用VB2005里的Datagridview控件做一个小程序,希望能在表格中显示行号,在网上搜索半天,网友提供的方法主要有两种:
1、使用通过textrenderer.drawtext在行的标题位置绘制文本....
(俺是菜鸟,看着这个方法都觉得有点烦,虽然大虾们提供的程序行数并不多,但实现原理还是有点复杂)

2、通过在Datagridvie……
补充:.NET技术 ,  VB.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,