技术交流QQ群【JAVA,C,.NET,BigData,AI】:170933152
项目中有个需求,就是,前两列,需要固定住,但是我们都知道固定列是,作为表的title部分的,也就是不能写入文字的,
但是客户需要,固定列,弄成可以写文字的,并且,写了文字,在进行行选择的时候,这个固定列,还不能变颜色也就是变成行选择的颜色
这个行选择,是设置了个flexgrid的属性,selectMode之类的,设置成row.
如果仅仅通过下面的代码,把那个固定列设置成普通的列,通过修改它的背景色等,可以实现下面的效果,但是行选择的时候,颜色还是
会变成选择色
通过把第二列设置为普通列,然后,赋值颜色:
for (int i = 2; i < FlexGridTest.Rows.Count; i++)
{
FlexGridTest.GetCellRange(i, 1).StyleNew.BackColor
= FlexGridTest.Rows[i].StyleFixedDisplay.BackColor;
FlexGridTest.GetCellRange(i, 1).StyleDisplay.BackColor = C1fShowPlanInfo.Rows[i].StyleFixedDisplay.BackColor;
FlexGridTest.GetCellRange(i, 1).StyleNew.Border.Color
= FlexGridTest.Rows[i].StyleFixedDisplay.Border.Color;
FlexGridTest.GetCellRange(i, 1).StyleDisplay.Border.Color = FlexGridTest.Rows[i].StyleFixedDisplay.Border.Color;
FlexGridTest.GetCellRange(i, 1).StyleNew.ForeColor
= FlexGridTest.Rows[i].StyleFixedDisplay.ForeColor;
FlexGridTest.GetCellRange(i, 1).StyleDisplay.ForeColor = FlexGridTest.Rows[i].StyleFixedDisplay.ForeColor;
FlexGridTest.GetCellRange(i, 1).StyleNew.Font
= C1fShowPlanInfo.Rows[i].StyleFixedDisplay.Font;
FlexGridTest.GetCellRange(i, 1).StyleDisplay.ForeColor = FlexGridTest.Rows[i].StyleFixedDisplay.ForeColor;
}
但是这样的话,会出现上面图中的情况,行选择的时候,那一列显示的颜色不对,
可以通过自定义主题来实现.
具体在这样做:
load事件中加入:
FlexGridTest.Styles.Add("myCustom4");
FlexGridTest.Styles["myCustom4"].BackColor = FlexGridTest.Rows[0].StyleFixedDisplay.BackColor;
FlexGridTest.Styles["myCustom4"].Border.Color = FlexGridTest.Rows[0].StyleFixedDisplay.Border.Color;
FlexGridTest.Styles["myCustom4"].ForeColor = FlexGridTest.Rows[0].StyleFixedDisplay.ForeColor;
FlexGridTest.Styles["myCustom4"].Font = FlexGridTest.Rows[0].StyleFixedDisplay.Font;
FlexGridTest.DrawMode = DrawModeEnum.OwnerDraw;
this.FlexGridTest.OwnerDrawCell += new C1.Win.C1FlexGrid.OwnerDrawCellEventHandler(this.c1FlexGrid1_OwnerDrawCell);
然后在添加一个事件,就可以了:
private void c1FlexGrid1_OwnerDrawCell(object sender, OwnerDrawCellEventArgs e)
{
if (e.Col == 1)
{
e.Style = C1fShowPlanInfo.Styles["myCustom4"];
}
}
这样就可以了,另外可以看到颜色上,入力的时候是红色,这个控制只能在设计器上的flex.styles.focus那改.
C1fShowPlanInfo.Styles.Focus = Color.Pink;