Сетка данных в Winforms вызывает необработанное исключение при использовании Cntl + C - PullRequest
0 голосов
/ 04 ноября 2019

Я разрабатываю приложение для Windows (winforms) для устройства, работающего на Windows CE (устройство версии 6.0). Он поддерживает только 2.0 рамки. Мне нужно показать данные в «Datagrid» и при выборе строки данные будут сохранены и переданы в сервис.

Все выглядит хорошо, но когда я использовал Cntrl + C в сетке данных, он показал мне следующее необработанное исключение, сказав,

Текущий поток должен быть установлен в однопотоковый режим (STA), прежде чемOLE звонки могут быть сделаны. Убедитесь, что на вашей главной функции помечен атрибут STAThreadAttribute

Я искал в Google и попробовал несколько вещей.

  1. Атрибут STAThread для основного метода, не работал

  2. Использование событий Keypress, Keyup, Keydown не сработало

public void Customgrid(Data dt)
{
    try
    {
        DataGridTableStyle myDataGridTableStyle = new DataGridTableStyle();
        BindingSource myBindingSource = new BindingSource();
        myDataGridTableStyle.MappingName = myBindingSource.GetListName(null);


        DataGridTextBoxColumn colcargo = new DataGridTextBoxColumn();
        colcargo.MappingName = "cargoId";
        colcargo.HeaderText = "Cntr";
        colcargo.Width = 150;

        DataGridTextBoxColumn colyardposition = new DataGridTextBoxColumn();
        colyardposition.MappingName = "stackable";
        colyardposition.HeaderText = "Yardloc";
        colyardposition.Width = 100;



        myDataGridTableStyle.GridColumnStyles.Add(colcargo);
        myDataGridTableStyle.GridColumnStyles.Add(colyardposition);



        this.grid_wq.TableStyles.Clear();
        this.grid_wq.TableStyles.Add(myDataGridTableStyle);

        DataTable dt1 = new DataTable(myBindingSource.GetListName(null));

        dt1.Columns.Add("cargoId");
        dt1.Columns.Add("stackable");

        if (dt.yardWQList != null)
        {
            for (int i = 0; i < dt.yardWQList.Length; i++)
            {
                string yardpos = dt.yardWQList[i].storageName + dt.yardWQList[i].storageBay + dt.yardWQList[i].storageRow + dt.yardWQList[i].storageTier;


                    dt1.Rows.Add(dt.yardWQList[i].cargoId, yardpos);


            }
            yardcount = dt1.Rows.Count;
        }

        if (dt.rakeWQList != null)
        {
            for (int i = 0; i < dt.rakeWQList.Length; i++)
            {


                dt1.Rows.Add(dt.rakeWQList[i].cargoId, "");
                rakecount = dt1.Rows.Count;
            }
        }
        dt1.DefaultView.AllowDelete = false;
        dt1.DefaultView.AllowEdit = false;
        dt1.DefaultView.AllowNew = false;


        this.grid_wq.Font = new Font("Microsoft Sans Serif", 14, FontStyle.Regular);
        subdt = dt1;
        this.grid_wq.DataSource = dt1;
        datacount = yardcount + rakecount;
        subcount = datacount.ToString();
        //tb_count.Text = datacount.ToString();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
}

Может кто-нибудь помочь мне отключить Ctrl + C или получитьтекущее значение ячейки без таких необработанных исключений.

enter image description here

...