строка не добавляется в datagridview автоматически - PullRequest
0 голосов
/ 17 сентября 2011

В моем обзоре данных AllowUserToAddRow = true; Когда я начинаю редактировать ячейку, в конце автоматически добавляется новая пустая строка, и это абсолютно нормально. Но если я попытаюсь заполнить всю строку программно (например, если вы щелкнете по кнопке, которая открывает дочернюю форму, дочерняя форма при закрытии отправляет данные в родительскую форму, которая содержит представление данных и там вы привязываете все данные к строке представления данных) в в этом случае новая пустая строка не добавляется автоматически. Если я начну редактировать данные ячейки, это приведет к появлению нужной пустой строки. В чем может быть проблема?

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

Редактировать: Пример кода прилагается

//Uses Linq-to-Entities
            IQueryable<Product> productQuery = from prod in sampleTaskContext.Product
                                               where prod.ProductId == enteredProdId
                                               select prod;

            List<Product> foundProd = productQuery.ToList();
            if (foundProd.Count <= 0)
            {
                ProductsForm prodForm = new ProductsForm();
                prodForm.ShowInTaskbar = false;
                if (prodForm.ShowDialog() == DialogResult.OK)
                {
                    Product returnedProd = prodForm.fnFormatProductDataForOrder();                    
                    foundProd.Add(returnedProd);
                }
            }

            if (foundProd.Count > 0)
            {                
                int selectedRowIndex = this.dgvOrderEntryDetails.SelectedCells[0].RowIndex;
                dgvOrderEntryDetails.Rows[selectedRowIndex].Cells["colProdId"].Value = foundProd[0].ProductId;
                dgvOrderEntryDetails.Rows[selectedRowIndex].Cells["colDesc"].Value = foundProd[0].ItemDescription.ToString();
                dgvOrderEntryDetails.Rows[selectedRowIndex].Cells["colQty"].Value = 1;
                dgvOrderEntryDetails.Rows[selectedRowIndex].Cells["colListPrice"].Value = foundProd[0].SalesPrice;
                dgvOrderEntryDetails.Rows[selectedRowIndex].Cells["colDisc"].Value = 0;
                dgvOrderEntryDetails.Rows[selectedRowIndex].Cells["colPrice"].Value = foundProd[0].SalesPrice;
                dgvOrderEntryDetails.Rows[selectedRowIndex].Cells["colTotal"].Value = foundProd[0].SalesPrice;                

}

Edit: enter image description here

Ответы [ 3 ]

1 голос
/ 20 сентября 2011

Добавление следующего фрагмента кода решило мою проблему.

protected override void OnCellBeginEdit(DataGridViewCellCancelEventArgs e)
        {
            base.OnCellBeginEdit(e);
            if (e.RowIndex == this.NewRowIndex)
            {
                if (this[e.ColumnIndex, e.RowIndex].Value == null)
                    return;
                string value = this[e.ColumnIndex, e.RowIndex].Value.ToString();
                SendKeys.Send("{BackSpace}");
                SendKeys.Send(value);                
            }
        } 
0 голосов
/ 25 мая 2012
if (dgorderdtl.CurrentRow.Index + 1 == dgorderdtl.Rows.Count)
{
    this.dgorderdtl.CurrentRow.Cells[dgorderdtl.CurrentCell.ColumnIndex - 1].Value = oBrowseLookUp.SelectedIDVal;
    this.dgorderdtl.CurrentRow.Cells[dgorderdtl.CurrentCell.ColumnIndex].Value = oBrowseLookUp.SelectedDescVal;
    dgorderdtl.Rows.Add();
    dgorderdtl_CellValueChanged(null, null);
    this.dgorderdtl.RefreshEdit();
}
0 голосов
/ 17 сентября 2011

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

Попытка вместо этого установить foundProdкак источник данных вашего DataGridView (и создание его списка уровня класса), а затем добавление в него новых значений.

Что-то вроде:

public partial class Form1 : Form
{
    private List<Product> foundProd_;

    public Form1()
    {
        InitializeComponent();

        foundProd_ = new BindingList<FoundProd>();

        dataGridView1.DataSource = foundProd;
    }

    // This method is where you update the datasource from the linq query
    private void SomeMethod()
    {
        IQueryable<Product> productQuery = from prod in sampleTaskContext.Product
                                               where prod.ProductId == enteredProdId
                                               select prod;

        List<Product> foundProd = productQuery.ToList();

        if (foundProd.Count <= 0)
        {
            ProductsForm prodForm = new ProductsForm();
            prodForm.ShowInTaskbar = false;
            if (prodForm.ShowDialog() == DialogResult.OK)
            {
                Product returnedProd = prodForm.fnFormatProductDataForOrder();                    
                foundProd_.Add(returnedProd);
            }

        }
    }
}

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

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