Datagirdview и tabcontrol проблема

Я испытываю странное поведение в моем приложении winforms .net 4. У меня есть форма с tabcontrol, имеющая две вкладки, пользователь выбирает данные на tabpage1 и нажимает кнопку GO, есть элемент управления dataGridView, который привязан к результатам выбора пользователя (дата данных). После того, как я установил источник данных для datagridview, я добавляю строку вверху (индекс 0) моей сетки 's источник данных, тогда я применяю некоторое форматирование для этой строки (datagirdview.rows [0]).

Я вижу, что мое форматирование применяется к строке в отладчике, но как только запускается код выбора вкладки, мое форматирование строки (isFrozen, BackColor и т. Д.) Исчезает.

Когда я сначала выбираю закладку и связываю заданный источник данных gird и форматирую потом, все работает нормально.

только недавно добавленная строка теряет форматирование, у меня есть подобное приложение, в котором я добавляю строку, подобную этой, но она работает нормально, в текущем приложении я использую backgroundWorker и запускаю этот код из RunWorkerCompleted, тогда как в предыдущем приложении я не используя backGroundWorker.

Ниже приведен код

 void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        if (!e.Cancelled && e.Error == null)
        {
            if (((DataTable)e.Result).Rows.Count > 0)
            {

                //tabControl1.SelectTab(tabPage2); if I call from here then row formatting retains
                grdDistProcessing.DataSource = ((DataTable)e.Result);
                formatGrid();
                loadStoresGrid();
                AddTotalsRowInEnd();
                SetTotalsOfTotalRow();
                tabControl1.SelectTab(tabPage2);
            }
        }

        this.tsStatus.Text = string.Empty;
    }

Вот метод AddTotalsRowInEnd:

 private void AddTotalsRowInEnd()
    {
        Font f = new System.Drawing.Font("Arial", 8, FontStyle.Bold);
        DataRow dr = ((DataTable)grdDistProcessing.DataSource).NewRow();
        dr.ItemArray = ((DataTable)grdDistProcessing.DataSource).Rows[0].ItemArray;
        dr["Itemlookupcode"] = "Grand Totals";
        dr["Size"] = "";
        dr["COLORS"] = "";
        dr["DESCRIPTIONS"] = "";

        ((DataTable)grdDistProcessing.DataSource).Rows.InsertAt(dr, 0);
        grdDistProcessing.Rows[0].Frozen = true;
        grdDistProcessing.Rows[0].DefaultCellStyle.BackColor = Color.BurlyWood;
        grdDistProcessing.Rows[0].DefaultCellStyle.ForeColor = Color.Black;
        grdDistProcessing.Rows[0].DefaultCellStyle.Font = f;
        grdDistProcessing.Rows[0].ReadOnly = true;
        grdDistProcessing.Refresh();
    }

и вот мой DoWork:

void bw_DoWork(object sender, DoWorkEventArgs e)
    {
        try
        {
            BackgroundWorker bWorkder = sender as BackgroundWorker;
            DistVariablesTransfer dtr = e.Argument as DistVariablesTransfer;
            bWorkder.ReportProgress(10);
            cProcess pro = new cProcess();
            e.Result = pro.loadDistribution(dtr.pWarehouseID, dtr.pStores, dtr.pStyle, dtr.pColor, dtr.pSize, dtr.pDateFrom, dtr.pDateTo, dtr.pIncOrdQtyForSrc, dtr.PCheckDestinationTranferOut);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

    }

Ответы на вопрос(1)

Ваш ответ на вопрос