wpf 的C1FlexGrid 如何选中一行 行颜色马上就变
wpf 的C1FlexGrid 如何选中一行 行颜色马上变成红色 选中多行 多行颜色都变成红色(整行整行颜色变化)并且排序 或者filter 时 颜色不会串行求解 非常感谢 回复 1楼q406157290的帖子
谢谢你的反馈。
C1FlexGrd提供了SelectionBackground属性,可以设置选择的背景色。 回复 2楼Alice的帖子
谢谢您的回复
当排序或者Fileter筛选后保证颜色不串
选择多行后排序 发现颜色就会只剩下一行了
Fileter筛选后 会默认选中第一条数据 (该数据是不想给设置上颜色的) 可是筛选后就处于选择状态了 就被设置上颜色了 该问题如何解决呢
还有只设置selectionBackground 改行中除当前选中单元格没有被设置上颜色其它单元格设置上了
请麻烦您再回答下这个问题谢谢非常感谢 回复 3楼q406157290的帖子
你好。
通过你的描述来看,需要颜色的自定义。
你可以查看之前你的提问:http://gcdn.gcpowertools.com.cn/showtopic.aspx?topicid=16526&forumpage=1&typeid=-1&page=1
有相关代码去设置颜色。 回复 4楼Alice的帖子
能不能好好的阅读下问题呢 这两个虽然都是设置颜色 但是不是一个问题 那种的是根据单元格中的值来决定行背景色的 这个问题是是选择的时候就马上变换行背景色 回复 5楼q406157290的帖子
你好。
对于你的需求,需要设置单个单元格的颜色(焦点所在的单元格的颜色),没有接口可以设置,只能通过4楼中链接提示的方法是用CellFactory设置。
CellFactory的使用和参考的示例在4楼链接里,也就是你之前的提问里都有。
代码参考:
Public Class MyCellFactory
Inherits C1.WPF.FlexGrid.CellFactory
Public Overrides Function CreateCellBorder(grid As C1.WPF.FlexGrid.C1FlexGrid, cellType As C1.WPF.FlexGrid.CellType, rng As C1.WPF.FlexGrid.CellRange) As System.Windows.Controls.Border
Dim bdr As Border = MyBase.CreateCellBorder(grid, cellType, rng)
If grid.Selection.Row = rng.Row AndAlso grid.Selection.Column = rng.Column Then
bdr.Background = New SolidColorBrush(Colors.Red)
ElseIf Convert.ToInt32(grid(rng.Row, rng.Column)) = 1 Then
bdr.Background = New SolidColorBrush(Colors.Yellow)
End If
Return bdr
End Function
End Class
FlxGrdEci.CellFactory = New MyCellFactory()
如果我的理解有误,请指出。 回复 6楼Alice的帖子
再描述下我的需求 你好像 还没有真正理解如下图所示
下面是demo 在最后一个Tab里
你实现的两个事件是对“点击列头排序”时选中行的处理,并非是对Filter筛选数据的处理;
参考代码如下:
/// <summary>
/// 点击列头排序前记录选中行
/// </summary>
private void flex_SortingColumn(object sender, CellRangeEventArgs e)
{
seelct.Clear();
foreach (FlexGridModel info in flex.SelectedItems)
{
seelct.Add(info);
}
}
/// <summary>
/// 点击列头排序后手动选中排序前选中行
/// </summary>
private void flex_SortedColumn(object sender, CellRangeEventArgs e)
{
flex.SelectedItems.Clear();
foreach (FlexGridModel f in seelct)
{
flex.SelectedItems.Add(f);
}
e.Cancel = true;
}
/// <summary>
/// 通过Filter筛选数据前记录选中行
/// </summary>
private void Fileter_EditorOpened(object sender, System.EventArgs e)
{
seelct.Clear();
foreach (FlexGridModel info in flexGridViewModel.ItemSource)
{
info.IsSelected = false;
}
foreach (FlexGridModel info in flex.SelectedItems)
{
info.IsSelected = true;
seelct.Add(info);
}
}
/// <summary>
/// 应用Filter筛选数据后手动选中筛选前选中的行
/// </summary>
private void Fileter_FilterApplied(object sender, System.EventArgs e)
{
flex.SelectedItems.Clear();
var bb = flex.Rows.Selected;
foreach (FlexGridModel f in seelct)
{
flex.SelectedItems.Add(f);
}
} 回复 8楼KNight的帖子
跟我现在的做法是一样的但是 总感觉这样麻烦 因为好多事件都需要去控制 可否用CellFactory来控制呢
你现在的这种方法你不用控制SelectionChange事件吗? 回复 9楼q406157290的帖子
不用SelectionChange事件,要这个事件干嘛?