Grant Mc Ответов: 0

Перетащите и падение для привязки данных практическое руководство


Добрый день,

У меня есть небольшая программа, содержащая DataGridView, на которую я хотел бы перетащить PDF-файлы.

У меня программа работает нормально за одним исключением

Если текущая строка является последней строкой, в которую вы вводите новые данные, то я получаю ошибку

Ошибка: операция недопустима из-за текущего состояния объекта.

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

public partial class MainForm : Form
{
    BindingList<PDFFile> PDFList = new BindingList<PDFFile>();
    public MainForm()
    {
        InitializeComponent();
        dgv.DataSource = PDFList;
    }

    void DgvDragDrop(object sender, DragEventArgs e)
    {
        PDFFile pdfFile;
        if (dgv.CurrentRow.IsNewRow)
            MessageBox.Show("Error will occur");
        string[] files = (string[]) e.Data.GetData(DataFormats.FileDrop);
        foreach (string file in files)
        {
            try
            {
                pdfFile = new PDFFile();
                pdfFile.Path = file;

                PDFList.Add(pdfFile);
            }
            catch (Exception error)
            {
                MessageBox.Show("Error: " + error.Message);
            }
        }
    }

    void DgvDragEnter(object sender, DragEventArgs e)
    {
        if (e.Data.GetDataPresent(DataFormats.FileDrop))
            e.Effect = DragDropEffects.Copy;
    }
}

public class PDFFile
{
    public string Path {get; set;}
}


Что я уже пробовал:

Я могу остановить это, развязав привязку перед добавлением в PDFList, а затем снова связав ее после завершения. Но это ужасный способ сделать это.

Я тоже пробовал

if (dgv.CurrentRow.IsNewRow || dgv.IsCurrentRowDirty)
    dgv.EndEdit(); 

Я уверен, что есть простое решение для этого, но я ничего не могу найти на форумах

Любая помощь будет очень признательна.

0 Ответов