Datagirdview- und Tabcontrol-Problem

In meiner winforms .net 4-Anwendung tritt ein seltsames Verhalten auf. Ich habe ein Formular mit einem Registersteuerelement mit zwei Registerkarten, der Benutzer wählt Daten auf der Registerkarte 1 aus und klickt auf die Schaltfläche GO. Es gibt ein dataGridView-Steuerelement, das an die Ergebnisse der Benutzerauswahl gebunden ist (eine Datentabelle). Nachdem ich die Datenquelle von datagridview festgelegt habe, füge ich eine Zeile oben (Index 0) der Datenquelle meines Rasters hinzu und wende dann eine Formatierung für diese Zeile an (datagirdview.rows [0]).

Ich kann sehen, dass meine Formatierung auf die Zeile im Debugger angewendet wurde, aber sobald der Tab-Auswahlcode ausgeführt wird, ist meine Zeilenformatierung (isFrozen, BackColor usw.) weg.

Wenn ich zuerst die Registerkarte auswähle und danach die Datenquelle von gird binde und formatiere, funktioniert es einwandfrei.

Nur neu hinzugefügte Zeile verliert die Formatierung. Ich habe eine ähnliche Anwendung, in der ich eine Zeile wie diese hinzufüge, aber sie funktioniert einwandfrei. In der aktuellen Anwendung verwende ich einen backgroundWorker und führe diesen Code von RunWorkerCompleted aus, während ich es in der vorherigen Anwendung bin nicht mit backGroundWorker.

Unten ist der Code

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

Hier ist die AddTotalsRowInEnd-Methode:

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

und hier ist meine 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);
        }

    }

Antworten auf die Frage(1)

Ihre Antwort auf die Frage