При добавлении новой строки в datagridview форма приложения C# зависает - PullRequest
1 голос
/ 28 мая 2020

У меня есть приложение, которое отправляет новые значения для добавления в datagridview. Но кажется, что через определенное время, когда данные выходят за пределы размера формы, приложение зависает. Я проверил, что даже не могу прокрутить вниз.

Вот функция, которая добавляет строку в datagridview:

 [DllExport("AddToGrid", CallingConvention = CallingConvention.StdCall)]
    public static void AddToGrid(
        [MarshalAs(UnmanagedType.LPWStr)] string formhandle,
        [MarshalAs(UnmanagedType.LPWStr)] string grid_name,
        [MarshalAs(UnmanagedType.R8)] double status,
        [MarshalAs(UnmanagedType.R8)] double no,
        [MarshalAs(UnmanagedType.R8)] double test1,
        [MarshalAs(UnmanagedType.R8)] double percentage,
        [MarshalAs(UnmanagedType.R8)] double marks,
        [MarshalAs(UnmanagedType.R8)] double grade
        )
    {
        try
        {
            DataGridView dataview = null;
            Control control = null;
            GuiController controller = m_controllers[formhandle];
            if(!controller.m_controls.TryGetValue(grid_name, out control))
            {
                SendExceptionEvent(formhandle, new Exception("could not find the grid: "+grid_name));
                return;
            }
            dataview = (DataGridView)control;
            string status_string = "E";
            if (status == 0 || status == 1) status_string = "A";
            if (status > 1 && status<6) status_string = "P";
            if (status == 6) status_string = "V";

            dataview.Rows.Add(status_string, no.ToString(), test1.ToString(), percentage.ToString(), marks.ToString(), grade.ToString());
        }
        catch(Exception e)
        {
            MessageBox.Show("Issues adding value: ", e.ToString());
            SendExceptionEvent(formhandle, new Exception("Issues adding value: "+ e.ToString()));
        }

    }

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

Подскажите, пожалуйста, эффективные методы.

1 Ответ

1 голос
/ 28 мая 2020

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

Попробуйте, я надеюсь, это вам поможет:

[DllExport("AddToGrid", CallingConvention = CallingConvention.StdCall)]
    public static void AddToGrid(
        [MarshalAs(UnmanagedType.LPWStr)] string formhandle,
        [MarshalAs(UnmanagedType.LPWStr)] string grid_name,
        [MarshalAs(UnmanagedType.R8)] double status,
        [MarshalAs(UnmanagedType.R8)] double no,
        [MarshalAs(UnmanagedType.R8)] double test1,
        [MarshalAs(UnmanagedType.R8)] double percentage,
        [MarshalAs(UnmanagedType.R8)] double marks,
        [MarshalAs(UnmanagedType.R8)] double grade
        )
    {
        try
        {
            DataGridView dataview = null;
            Control control = null;
            GuiController controller = m_controllers[formhandle];
            if(!controller.m_controls.TryGetValue(grid_name, out control))
            {
                SendExceptionEvent(formhandle, new Exception("could not find the grid: "+grid_name));
                return;
            }
            dataview = (DataGridView)control;
            string status_string = "E";
            if (status == 0 || status == 1) status_string = "A";
            if (status > 1 && status<6) status_string = "P";
            if (status == 6) status_string = "V";
            control.Invoke((MethodInvoker)delegate
                {
                    dataview.Rows.Add(status_string, no.ToString(), test1.ToString(), percentage.ToString(), marks.ToString(), grade.ToString());
                });
        }
        catch(Exception e)
        {
            MessageBox.Show("Issues adding value: ", e.ToString());
            SendExceptionEvent(formhandle, new Exception("Issues adding value: "+ e.ToString()));
        }

    }

Надеюсь, это вам поможет.

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