在dataGridView的标题中自动生成行号

时间:2011-07-08 08:26:43

标签: c# visual-studio-2010 datagridview

我是使用C#/ .NET编程语言的新手,我创建了一个DataGridView来添加,编辑和删除记录。

我正在使用Visual Studio 2010进行编码。我已为行号放入一个未绑定的列,并使用此方法显示自动生成的行号。

private void dataGridView1_DefaultValuesNeeded(object sender, DataGridViewRowEventArgs e)
        {
            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                row.Cells["rownumber"].Value = row.Index + 1;                
            }
            e.Row.Cells["min_bracket"].Value = 0;
            e.Row.Cells["max_bracket"].Value = 0;
            e.Row.Cells["tax_percent"].Value = 0;
            e.Row.Cells["add_amount"].Value = 0;
        }

这在将值插入数据网格时有效,但在检索值时不会在rownumber列中显示任何数字。

如何在标题中创建自动生成的数字,而不必像插入行和检索记录那样创建一个未绑定的列?

3 个答案:

答案 0 :(得分:9)

要在行标题中显示文字,您可以使用Row.HeaderCell.Value,如下所示:

void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    DataGridView gridView = sender as DataGridView;
    if (null != gridView)
    {
        foreach (DataGridViewRow r in gridView.Rows)
        {
            gridView.Rows[r.Index].HeaderCell.Value = (r.Index + 1).ToString();
        }
    }
}

这仅显示用户开始输入时新行的行号。不确定是否有一种简单的方法可以始终在新行上显示行号。

答案 1 :(得分:1)

我使用ViewState执行此操作,如下所示:

  1. 为行计数添加模板列
  2. 将其内容绑定到SeqNo
  3. 等属性
  4. 在代码隐藏中创建属性SeqNo,返回当前行数(尝试以下代码)
  5. int _seq = 0;
    
    public int SeqNo {
      get {
        if (ViewState["seq"] == null) {
            ViewState["seq"] = 1;
        } else {
            ViewState["seq"] = int.Parse(ViewState["seq"].ToString()) + 1; 
        }
        _seq = int.Parse(ViewState["seq"].ToString());
        return _seq;
      }
    } 
    

    对于aspx方面,将模板Column添加到您感兴趣的GridView中,如下所示

                     <asp:TemplateField HeaderText="" >
                        <ItemTemplate>
                            <%=SeqNo%>
                        </ItemTemplate>
                    </asp:TemplateField>
    

答案 2 :(得分:1)

我认为这是Windows Forms的一个非常简单的解决方案。您可以根据需要自定义绘图。

创建以下类:

Public Class DataGridViewNumberedRow
    Inherits DataGridViewRow

    Protected Overrides Sub PaintHeader(graphics As System.Drawing.Graphics, clipBounds As System.Drawing.Rectangle, rowBounds As System.Drawing.Rectangle, rowIndex As Integer, rowState As System.Windows.Forms.DataGridViewElementStates, isFirstDisplayedRow As Boolean, isLastVisibleRow As Boolean, paintParts As System.Windows.Forms.DataGridViewPaintParts)
        MyBase.PaintHeader(graphics, clipBounds, rowBounds, rowIndex, rowState, isFirstDisplayedRow, isLastVisibleRow, paintParts)

        graphics.DrawString(rowIndex + 1, SystemFonts.MenuFont, Brushes.Black, rowBounds)
    End Sub
End Class

然后,为您的数据网格视图设置默认行模板,如下所示:

DataGridView1.RowTemplate = New DataGridViewNumberedRow