Генерация номеров строк автоматически в заголовке dataGridView - PullRequest
2 голосов
/ 08 июля 2011

Я новичок в использовании языка программирования 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 ]

9 голосов
/ 08 июля 2011

Для отображения текста в заголовке строки вы можете использовать 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 голос
/ 25 октября 2013

Я подумал, что это очень простое решение для 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
1 голос
/ 19 июня 2013

Я использую ViewState, чтобы сделать это следующим образом:

  1. Добавить столбец шаблона для счетчика строк
  2. Привязать его содержимое к свойству, например SeqNo
  3. Создайте свойство SeqNo в своем коде, возвращая текущее количество строк (попробуйте следующий код)
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>
...