Datagirdview i tabcontrol problem
Doświadczam dziwnego zachowania w mojej aplikacji WinForm .net 4. Mam formularz z tabcontrol mający dwa tabpages, użytkownik wybiera dane na tabpage1 i klika przycisk GO, istnieje formant dataGridView, który jest powiązany z wynikami wyboru użytkownika (datatable). Po ustawieniu źródła danych datagridview dodaję wiersz na górze (indeks 0) źródła danych mojej siatki, a następnie stosuję formatowanie w tym wierszu (datagirdview.rows [0]).
Widzę moje formatowanie zastosowane do wiersza w debuggerze, ale jak tylko kod wyboru karty zostanie uruchomiony, moje formatowanie wierszy (isFrozen, BackColor itp.) Zniknęło.
Kiedy wybieram najpierw tabpage i wiążę ustawione źródło danych gird i formatowanie później, działa dobrze.
tylko nowo dodany wiersz traci formatowanie, mam podobną aplikację, w której dodaję taki wiersz, ale działa poprawnie, w bieżącej aplikacji używam backgroundWorker i uruchamiam ten kod z RunWorkerCompleted, podczas gdy w poprzedniej aplikacji jestem nie używa backGroundWorker.
Poniżej znajduje się kod
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;
}
Oto metoda 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();
}
a oto moja praca:
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);
}
}