Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Datagirdview和tabcontrol问题_C#_Winforms_.net 4.0_Datagridview - Fatal编程技术网

C# Datagirdview和tabcontrol问题

C# Datagirdview和tabcontrol问题,c#,winforms,.net-4.0,datagridview,C#,Winforms,.net 4.0,Datagridview,我在winforms.net 4应用程序中遇到一个奇怪的行为。我有一个表单,其中一个tabcontrol有两个tabpages,用户在tabpage1上选择数据并单击GO按钮,还有一个dataGridView控件,它绑定到用户选择的结果(datatable)。设置datagridview的数据源后,我在网格数据源的顶部(0索引)添加一行,然后在该行上应用一些格式(datagirdview.rows[0]) 我可以在调试器中看到应用于该行的格式,但一旦选项卡选择代码运行,我的行格式(IsFroze

我在winforms.net 4应用程序中遇到一个奇怪的行为。我有一个表单,其中一个tabcontrol有两个tabpages,用户在tabpage1上选择数据并单击GO按钮,还有一个dataGridView控件,它绑定到用户选择的结果(datatable)。设置datagridview的数据源后,我在网格数据源的顶部(0索引)添加一行,然后在该行上应用一些格式(datagirdview.rows[0])

我可以在调试器中看到应用于该行的格式,但一旦选项卡选择代码运行,我的行格式(IsFrozed、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();
    }
这是我的嫁妆:

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

    }
而不是做:

grdDistProcessing.Rows[0].DefaultCellStyle.BackColor = Color.BurlyWood;
grdDistProcessing.Rows[0].DefaultCellStyle.ForeColor = Color.Black;
使用CellFormatting事件(显示类别)进行grdDistProcessing,如下所示:

private void grdDistProcessing_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
   e.CellStyle.BackColor = Color.BurlyWood;
   e.CellStyle.ForeColor = Color.Black;

}

它也应该渲染得更快。

我也有同样的问题。在我的应用程序中,我有五个选项卡。应用程序中前四个选项卡中的每一个都包含DataGridView。前三项工作完美无瑕。但是,第四个选项卡中的datagridview存在与上述相同的问题。第一次加载时,它缺少已设置的背景色,但在所有后续加载中,都会显示格式。启用双缓冲区没有任何帮助。如果我找到解决方案,我会在这里发布。已经两年了,我换了公司,但那个应用程序还在生产:)我必须先选择tab,因为当时我没有找到任何解决方案。