Winforms DataGridView добавляет две строки вместо одной - PullRequest
2 голосов
/ 05 июля 2019

Когда я добавляю данные в строку в моем DataGridView, я хочу добавить пустую строку. Это происходит, но когда я сосредотачиваюсь на поле в текущей строке и не ввожу никаких данных, значения по умолчанию заполняются для этой строки, а новая строка также заполняется значениями по умолчанию. Затем добавляется еще одна пустая строка, как вы можете видеть из анимированного GIF, который я вставил ниже.

enter image description here

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

Я вставил соответствующий код из класса формы ниже. Я попытался исключить те части класса, которые не имели отношения к вопросу:

public partial class frmCharitableContributions : Form
{
    private readonly string connectionString = ConnectionStringProvider.GetConnectionString();
    private readonly BusinessLayer bl = new BusinessLayer();


    private void FrmCharitableContributions_Load(object sender, EventArgs e)
    {

        PopulateDataGridView();
    }


    private void PopulateDataGridView()
    {
        try
        {
            DataSet dsCharitableContributions = bl.GetCharitableContributions(connectionString);

            CharitableContributionsDataGridView.DataSource = dsCharitableContributions.Tables[0];
        }
        catch (Exception ex)
        {
            MessageBox.Show("Exception Thrown in PopulateDataGridView: " + ex.Message);
        }
    }


    private void CharitableContributionsDataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {
        if (CharitableContributionsDataGridView.CurrentRow != null)
        {
            DataGridViewRow dgvRow = CharitableContributionsDataGridView.CurrentRow;

            bool isValid = ValidateFields(dgvRow);
            if (isValid)
            {
                bl.InsertOrUpdateCharitableContributions(connectionString, dgvRow);
            }
            else
            {
                return;
            }

            BeginInvoke(new MethodInvoker(PopulateDataGridView));
        }
    }

    // This event will fire when a cell recognize editing
    private void CharitableContributionsDataGridView_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
    {
        CharitableContributionsDataGridView.AllowUserToAddRows = false;
    }

    // This event will fire when a cell recognizes the end of editing
    // Allow or deny adding a new row here based on conditions such as required fields being filled in or selected
    private void CharitableContributionsDataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
    {
        int currentRowIndex = e.RowIndex;
        DataGridViewRow dgvRow = CharitableContributionsDataGridView.Rows[currentRowIndex];
        if (dgvRow.Cells["cbxCharitableOrganizationName"].Value.ToString() != "")
        {

            if (CharitableContributionsDataGridView.CurrentRow != null)
            {


                bl.InsertOrUpdateCharitableContributions(connectionString, dgvRow);

                CharitableContributionsDataGridView.AllowUserToAddRows = true;
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...