Ограничить количество строк, которые могут быть введены в сетку данных на основе свойства DGV - PullRequest
1 голос
/ 25 февраля 2010

У меня есть пользовательский интерфейс, который использует datagridviews / bindingsource / datatables типизированного набора данных для ввода данных. Сам набор данных сериализуется в varbinary (max) в SQL. (т. е. нет адаптера таблицы, схема бэкэнда)

Я хотел бы ограничить количество строк, которые пользователь может ввести в некоторые сетки (данные используются для заполнения форм PDF, и я не хочу, чтобы они вводили больше строк, чем могут вместить формы.)

Я переклассифицировал представление данных, добавил свойство rowlimit и попытался манипулировать свойством AllUsertoAddRows

Imports System.Windows.Forms

Public Class dgv
Inherits System.Windows.Forms.DataGridView

Private _Rowlimit As Int32
Public Property Rowlimit() As Int32
    Get
        Return _Rowlimit
    End Get
    Set(ByVal value As Int32)
        _Rowlimit = value
    End Set
End Property
Private Sub dgv_RowLeave(ByVal sender As Object, ByVal e As _
    System.Windows.Forms.DataGridViewCellEventArgs) Handles Me.RowLeave

    If Me.Rowlimit > 0 And Me.RowCount > Me.Rowlimit Then

        MessageBox.Show("Maximun records (" & Me.Rowlimit & ") reached.")

        Me.AllowUserToAddRows = False

    Else
        Me.AllowUserToAddRows = True
    End If

End Sub

Private Sub dgvContainer_RowsRemoved(ByVal sender As Object, ByVal e As _
    System.Windows.Forms.DataGridViewRowsRemovedEventArgs) Handles Me.RowsRemoved

    If Me.Rowlimit = 0 Or Me.RowCount < Me.Rowlimit Then

        Me.AllowUserToAddRows = True

    End If

End Sub

End Class

Поведение, которое я вижу, состоит в том, что окно сообщения появляется после выхода из строки max, даже когда пользователь пытается покинуть сетку. Я могу потерять окно сообщения и работать с уведомлением другим способом, но я подумал, что кто-то другой, возможно, придумал что-то более сложное для обработки, просто вызвав попытку добавить много записей для перехода из сетки к следующему элементу управления пользовательского интерфейса.

Буду признателен за любые другие предложения относительно более элегантного подхода к этому.

1012 * ТИА *

Ответы [ 2 ]

0 голосов
/ 06 мая 2016

int MaxRowCount = 3;

    private void dgUser_UserAddedRow(object sender, DataGridViewRowEventArgs e)
    {
        if (dataGridView1.Rows.Count > MaxRowCount)
        {
            dataGridView1.AllowUserToAddRows = false;
        }
        else
        {
            dataGridView1.AllowUserToAddRows = true;
        }
    }
0 голосов
/ 25 февраля 2010

Как насчет проверки количества строк в обработчике событий RowsAdded?

Другой вариант - добавить максимальное количество строк, допустимое в DGV при запуске, запретить добавление пользователя и проверкучтобы узнать, была ли введена информация или нет, когда вы будете готовы зафиксировать ввод.

...