我有一个带有三个标签的标签控件。每个选项卡都包含一个DataGridView,它显示的格式相同,但来自不同的来源。要求是网格中的每一行都有不同的背景颜色(与选项卡中显示的数据图表相匹配)。
为了避免重复同一个代码块三次,我有一个方法可以将数据加载到网格中,并且还可以根据数据构建图表。它的形式为:
private void loadData(DataGridView theGrid, Chart theChart, int dataSource)
使用以下语句调用此方法:
loadData(onShoreView, onShoreChart, 1);
loadData(offShoreView, offShoreChart, 2);
loadData(globalView, globalChart, 3);
loadData()
然后从数据库中检索相关数据,并使用以下内容构建分配给网格的List:
theGrid.DataSource = dataList;
在网格填充后执行为行着色的方法部分:
//Assign colors to rows - but not the total line
for (int i = 0; i < theGrid.Rows.Count - 1; i++)
{
theGrid.Rows[i].DefaultCellStyle.BackColor = theColors[i];
theGrid.Rows[i].Cells[4].Style.BackColor = Color.White;
}
theColors以前被定义为:
private Color[] theColors= {
Color.SteelBlue,
Color.IndianRed,
Color.LightGreen,
Color.Orange,
Color.PaleTurquoise,
Color.Gold,
Color.RosyBrown,
Color.MediumPurple,
Color.MidnightBlue,
Color.Pink
};
这适用于第一个选项卡 - 网格线具有正确的颜色,并且图表与它们匹配。对于后续选项卡,虽然图表上的颜色是正确的,但网格不受影响 - 行都是相同的默认颜色。
我有双重和三重检查,除了名称之外,第二个和第三个选项卡上的DataGridView对象的所有属性都与第一个选项卡上的DataGridView的属性相同。
任何人都可以提出可能发生的事情,以及如何解决这个问题?
答案 0 :(得分:1)
我建议你处理SelectedIndexChanged
的事件TabControl
,以便致电您的方法&#34; loadData
&#34;只要用户选择了标签,就像您可以安静地认为您的程序不是一种不必要的处理方式,它对性能有益:
private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
var grd = tabControl1.SelectedTab.Controls.Cast<Control>()
.FirstOrDefault(x => x is DataGridView );
var chrt = tabControl1.SelectedTab.Controls.Cast<Control>()
.FirstOrDefault(x => x is Chart);
//tabControl1.SelectedIndex=0 if first tab is selected
//tabControl1.SelectedIndex=1 if second tab is selected
int i = tabControl1.SelectedIndex+1;
loadData((DataGridView)grd, (Chart)chrt, i);
}