我在winforms.net 4應用程序中遇到了一個奇怪的行爲。我有一個帶有兩個tabpages的tabcontrol的表單,用戶選擇tabpage1上的數據並點擊GO按鈕,有一個dataGridView控件綁定到用戶選擇的結果(一個datatable)。在設置datagridview的數據源之後,我在網格的數據源的頂部(0索引)添加一行,然後我在該行上應用一些格式(datagirdview.rows [0])。Datagirdview和tabcontrol問題
我可以看到我的格式應用於調試器中的行,但一旦選項卡選擇代碼運行,我的行格式(isFrozen,BackColor等)就消失了。
當我首先選擇tabpage並綁定網格的數據源和格式設置後,它工作正常。
只有新添加的行丟失格式化,我有一個類似的應用程序,其中我添加了這樣一行,但它工作正常,在當前應用程序中我使用了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);
}
}
我有同樣的問題。在我的應用程序中有五個選項卡。應用程序中的前四個選項卡都包含datagridviews。前三項工作完美無瑕。但是,第四個選項卡中的datagridview存在與上述相同的問題。第一次加載時缺少設置的背景顏色,但在隨後的所有加載中都會顯示格式。打開雙緩衝區沒有幫助。如果我找到解決方案,將在這裏發佈。 –