Я хотел бы создать сетку данных с 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.
Как добавить новую строку в представление данных с двумя столбцами кнопок и двумя текстовыми столбцами?