想做一个和Excel一样的填充颜色功能。
- 在bar上添加ColorPickEdit颜色控件有下拉项,但是默认是点击这个控件任何地方都会设置颜色。只通过下拉按钮,则需要将ShowDropDown设置为Nerver。
- 还需要区分点击的是颜色控件的下拉按钮还是颜色。试了很多方法都不理想。最后自己分析了下,实际上使用最简单的repositoryItemColorPickEdit1.Click事件就可以,通过e参数返回坐标来判断,前(MouseEventArgs)e.X < 30的认为点击了颜色,之后的认为点击了下拉菜单。
- barEditItem是容器,绑定控件的值是回传到EditValue的,因此可以从barEditItem拿值,而不是到绑定的repositoryItem内置控件拿值,repositoryItem只是供调用界面和功能的,返回值保存到了父barEditItem,或其他被绑定的容器。
- 设置gridcontrol颜色用下面的方法:
private void ColorSelectedGridCells(Color color)
{
if (gridView1.SelectedRowsCount > 0)
{
int[] selectedRows = gridView1.GetSelectedRows();
foreach (int rowHandle in selectedRows)
{
foreach (GridColumn column in gridView1.VisibleColumns)
{
if (gridView1.IsCellSelected(rowHandle, column))
{
ApplyColorToCell(rowHandle, column.FieldName, color);
}
}
}
}
else if (gridView1.FocusedRowHandle >= 0 && gridView1.FocusedColumn != null)
{
ApplyColorToCell(gridView1.FocusedRowHandle, gridView1.FocusedColumn.FieldName, color);
}
gridView1.LayoutChanged();
}
private void ApplyColorToCell(int rowHandle, string columnName, Color color)
{
gridView1.RowCellStyle += (s, e) =>
{
if (e.RowHandle == rowHandle && e.Column.FieldName == columnName)
{
e.Appearance.BackColor = color;
e.Appearance.Options.UseBackColor = true;
}
};
}