gpt4 book ai didi

c# - Datagridview 和选项卡控件问题

转载 作者:行者123 更新时间:2023-11-30 17:52:59 24 4
gpt4 key购买 nike

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

我可以在调试器中看到我的格式应用于该行,但是一旦选项卡选择代码运行,我的行格式(isFrozen、BackColor 等)就消失了。

当我先选择tabpage然后绑定(bind)gird的set datasource和formatting时,它工作正常。

只有新添加的行丢失了格式,我有一个类似的应用程序,我在其中添加了这样的行,但它工作正常,在当前应用程序中我正在使用 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);
}

}

最佳答案

而不是做:

grdDistProcessing.Rows[0].DefaultCellStyle.BackColor = Color.BurlyWood;
grdDistProcessing.Rows[0].DefaultCellStyle.ForeColor = Color.Black;

为 grdDistProcessing 使用 CellFormatting 事件(显示类别),如下所示:

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

}

它也应该渲染得更快。

关于c# - Datagridview 和选项卡控件问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17908630/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com