добавить строку просмотра данных с помощью кнопок в представление данных - PullRequest
0 голосов
/ 02 февраля 2019

Я хотел бы создать сетку данных с 4 столбцами.Первый столбец содержит кнопку редактирования для каждой строки.Второй содержит кнопку удаления, а следующие столбцы должны содержать данные объекта для отображения, такие как ID, Имя и т. Д.

Для кнопок, которые я использую DataGridViewButtonColumn, для других я использую DataGridViewColumn,При запуске программы я инициализирую сетку данных один раз после инициализации формы.

При добавлении новой строки я создаю две кнопки и пытаюсь заполнить эти четыре столбца.

Так что это мой код

public partial class FrmMain : Form
{
    public FrmMain()
    {
        InitializeComponent();
        InitializePeopleList();
    }

    private void InitializePeopleList()
    {
        DataGridViewButtonColumn editButtonColumn = new DataGridViewButtonColumn();

        DataGridViewButtonColumn deleteButtonColumn = new DataGridViewButtonColumn();

        DataGridViewColumn idColumn = new DataGridViewColumn();
        idColumn.HeaderText = "ID";

        DataGridViewColumn firstNameColumn = new DataGridViewColumn();
        firstNameColumn.HeaderText = "FirstName";

        dgvPeople.Columns.Add(editButtonColumn);
        dgvPeople.Columns.Add(deleteButtonColumn);
        dgvPeople.Columns.Add(idColumn);
        dgvPeople.Columns.Add(firstNameColumn);
    }

    private void CreatePerson()
    {
        // open a new dialog, create a new Person object and add it to the data list

        AddPersonRow(newPerson); // Update GUI
    }

    private void AddPersonRow(Person newPerson)
    {
        DataGridViewRow personRow = new DataGridViewRow(); // Create a new row

        Button editButton = new Button(); // create a new edit button for the first column
        editButton.Text = "Edit";
        editButton.Click += (object sender, EventArgs e) => UpdatePersonFirstName(newPerson.ID, personRow.Cells[3]);

        Button deleteButton = new Button(); // create a new delete button for the second column
        editButton.Text = "Delete";
        editButton.Click += (object sender, EventArgs e) => RemovePerson(newPerson.ID, personRow);

        personRow.Cells[0].Value = editButton;
        personRow.Cells[1].Value = deleteButton;
        personRow.Cells[2].Value = newPerson.ID; // Display the ID in the third column
        personRow.Cells[3].Value = newPerson.FirstName; // Display the First Name in the fourth column

        dgvPeople.Rows.Add(personRow); // add this row to the datagridview
    }

    private void RemovePerson(Guid personId, DataGridViewRow personRow)
    {
            // Remove the person from the data list

            dgvPeople.Rows.Remove(personRow); // Update GUI
    }

    private void UpdatePersonFirstName(Guid personId, DataGridViewCell firstNameCell)
    {
        // open a new dialog and edit the Person

        // update the person in the data list

        firstNameCell.Value = updatedFirstName;
    }
}

Когда я запускаю программу, код вылетает, когда я пытаюсь добавить нового человека в таблицу данных на AddPersonRow в

personRow.Cells[0].Value

Я получаюArgumentOutOfRangeException потому что personRow.Cells имеет Count из 0.

Как добавить новую строку в представление данных с двумя столбцами кнопок и двумя текстовыми столбцами?

1 Ответ

0 голосов
/ 02 февраля 2019

Инициализация:

var editButtonColumn = new DataGridViewButtonColumn();
editButtonColumn.Text = "Edit";
editButtonColumn.UseColumnTextForButtonValue = true;

var deleteButtonColumn = new DataGridViewButtonColumn();
deleteButtonColumn.Text = "Delete";
deleteButtonColumn.UseColumnTextForButtonValue = true;

var idColumn = new DataGridViewTextBoxColumn();
idColumn.HeaderText = "ID";

var firstNameColumn = new DataGridViewTextBoxColumn();
firstNameColumn.HeaderText = "FirstName";

dgvPeople.Columns.Add(editButtonColumn);
dgvPeople.Columns.Add(deleteButtonColumn);
dgvPeople.Columns.Add(idColumn);
dgvPeople.Columns.Add(firstNameColumn);

dgvPeople.CellContentClick += DgvPeople_CellContentClick;

Нет необходимости создавать кнопки.Они будут созданы автоматически, потому что используется DataGridViewButtonColumn.

private void AddPersonRow(Person newPerson)
{
    var rowIndex = dgvPeople.Rows.Add();
    var row = dgvPeople.Rows[rowIndex];
    row.Cells[2].Value = newPerson.ID;
    row.Cells[3].Value = newPerson.FirstName;
}

Здесь мы реагируем на нажатия кнопок:

private void DgvPeople_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    if (e.RowIndex >= 0) // exclude header
    {
        if (e.ColumnIndex == 0)
        {
            // edit action                    
        }
        else if (e.ColumnIndex == 1)
        {
            // delete action
            //dgvPeople.Rows.RemoveAt(e.RowIndex);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...