Datagirdview y tabcontrol problem

Estoy experimentando un comportamiento extraño en mi aplicación winforms .net 4. Tengo un formulario con un control de tabulación que tiene dos pestañas, el usuario selecciona los datos en la tabpágina1 y hace clic en el botón IR, hay un control dataGridView que está vinculado a los resultados de la selección del usuario (un datatable). Después de configurar el origen de datos de datagridview, estoy agregando una fila en la parte superior (índice 0) del origen de datos de mi cuadrícula, luego estoy aplicando algún formato en esa fila (datagirdview.rows [0]).

Puedo ver mi formato aplicado a la fila en el depurador, pero tan pronto como se ejecuta el código de selección de pestañas, mi formato de fila (isFrozen, BackColor, etc.) desaparece.

Cuando selecciono la pestaña primero y vinculo el conjunto de datos de gird y el formato después, funciona bien.

solo la fila recién agregada está perdiendo formato, tengo una aplicación similar en la que estoy agregando una fila como esta, pero funciona bien, en la aplicación actual estoy usando un backgroundWorker y ejecutando este código desde RunWorkerCompleted, mientras que en la aplicación anterior no utilizando backGroundWorker.

A continuación se muestra el código

 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;
    }

Aquí está el método 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();
    }

Y aquí está mi trabajo:

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);
        }

    }

Respuestas a la pregunta(1)

Su respuesta a la pregunta