Workaround: before printing set the AutoSizeRows = false, then you can set it again to true
private void radButton1_Click(object sender, EventArgs e)
{
if (!this.radGridView1.Columns["ImageColumn"].IsVisible)
{
int height = this.radGridView1.TableElement.ViewTemplate.Rows[0].Height;
this.radGridView1.AutoSizeRows = false;
this.radGridView1.TableElement.RowHeight = height;
}
this.radGridView1.PrintPreview();
this.radGridView1.AutoSizeRows = true;
}
To reproduce:
private void RadForm1_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add("col1", typeof(bool));
dt.Columns.Add("col2", typeof(bool));
dt.Rows.Add(0, 1);
dt.Rows.Add(0, 1);
dt.Rows.Add(0, 1);
RadGridView1.DataSource = dt;
((Telerik.WinControls.UI.GridViewCheckBoxColumn)RadGridView1.Columns(0)).EnableHeaderCheckBox = true;
((Telerik.WinControls.UI.GridViewCheckBoxColumn)RadGridView1.Columns(1)).EnableHeaderCheckBox = true;
RadGridView1.HeaderCellToggleStateChanged += radGridView1_HeaderCellToggleStateChanged;
}
- Start the application and click in the second row in the first column.
Workaraound:
public class MyGridCheckBoxHeaderCellElement : GridCheckBoxHeaderCellElement
{
public MyGridCheckBoxHeaderCellElement(GridViewDataColumn col, GridRowElement row)
: base(col, row)
{ }
protected override void SetCheckBoxState(ToggleState state)
{
if (this.ColumnInfo.Name != this.GridViewElement.CurrentCell.ColumnInfo.Name)
{
return;
}
base.SetCheckBoxState(state);
}
}
Workaround: use a GridPrintStyle and define a HierarchyIndent = 0
private void PrintGrid()
{
GridPrintStyle style = new GridPrintStyle();
style.HierarchyIndent = 0;
this.radGridView1.PrintStyle = style;
this.radGridView1.PrintPreview();
}
To reproduce:
public Form1()
{
InitializeComponent();
ColumnGroupsViewDefinition columnGroupsView;
columnGroupsView = new ColumnGroupsViewDefinition();
columnGroupsView.ColumnGroups.Add(new GridViewColumnGroup());
columnGroupsView.ColumnGroups.Add(new GridViewColumnGroup());
columnGroupsView.ColumnGroups.Add(new GridViewColumnGroup());
columnGroupsView.ColumnGroups.Add(new GridViewColumnGroup());
columnGroupsView.ColumnGroups[0].ShowHeader = false;
columnGroupsView.ColumnGroups[0].Rows.Add(new GridViewColumnGroupRow());
columnGroupsView.ColumnGroups[0].Rows[0].ColumnNames.Add("colPINNED_LEFT");
columnGroupsView.ColumnGroups[1].Rows.Add(new GridViewColumnGroupRow());
columnGroupsView.ColumnGroups[1].Rows[0].ColumnNames.Add("colDATE");
columnGroupsView.ColumnGroups[2].Rows.Add(new GridViewColumnGroupRow());
columnGroupsView.ColumnGroups[2].Rows.Add(new GridViewColumnGroupRow());
columnGroupsView.ColumnGroups[2].Rows[0].ColumnNames.Add("colTITLE");
columnGroupsView.ColumnGroups[2].Rows[1].ColumnNames.Add("colTEXT");
columnGroupsView.ColumnGroups[3].Rows.Add(new GridViewColumnGroupRow());
columnGroupsView.ColumnGroups[3].Rows[0].ColumnNames.Add("colPINNED_RIGHT");
this.radGridView1.ViewDefinition = columnGroupsView;
this.radGridView1.Columns["colDATE"].Width = 110;
this.radGridView1.Columns["colTITLE"].Width = this.radGridView1.Width - 181;
this.radGridView1.TableElement.ViewElement.RowLayout.InvalidateRenderColumns();
columnGroupsView.ColumnGroups[0].PinPosition = PinnedColumnPosition.Left;
columnGroupsView.ColumnGroups[3].PinPosition = PinnedColumnPosition.Right;
}
Workaround: do not set the ShowHeader property to false. Use the ViewCellFormatting event to hide to necessary cell borders to simulate cells merging.
To reproduce:
ColumnGroupsViewDefinition columnGroupsView;
columnGroupsView = new ColumnGroupsViewDefinition();
columnGroupsView.ColumnGroups.Add(new GridViewColumnGroup());
columnGroupsView.ColumnGroups.Add(new GridViewColumnGroup());
columnGroupsView.ColumnGroups.Add(new GridViewColumnGroup());
columnGroupsView.ColumnGroups.Add(new GridViewColumnGroup());
columnGroupsView.ColumnGroups[0].Rows.Add(new GridViewColumnGroupRow());
columnGroupsView.ColumnGroups[0].Rows[0].ColumnNames.Add("colPINNED_LEFT");
columnGroupsView.ColumnGroups[1].Rows.Add(new GridViewColumnGroupRow());
columnGroupsView.ColumnGroups[1].Rows[0].ColumnNames.Add("colDATE");
columnGroupsView.ColumnGroups[2].Rows.Add(new GridViewColumnGroupRow());
columnGroupsView.ColumnGroups[2].Rows.Add(new GridViewColumnGroupRow());
columnGroupsView.ColumnGroups[2].Rows[0].ColumnNames.Add("colTITLE");
columnGroupsView.ColumnGroups[2].Rows[1].ColumnNames.Add("colTEXT");
columnGroupsView.ColumnGroups[3].Rows.Add(new GridViewColumnGroupRow());
columnGroupsView.ColumnGroups[3].Rows[0].ColumnNames.Add("colPINNED_RIGHT");
this.radGridView1.ViewDefinition = columnGroupsView;
this.radGridView1.Columns["colDATE"].Width = 110;
this.radGridView1.Columns["colTITLE"].Width = this.radGridView1.Width - 181;
this.radGridView1.TableElement.ViewElement.RowLayout.InvalidateRenderColumns();
columnGroupsView.ColumnGroups[0].PinPosition = PinnedColumnPosition.Left;
columnGroupsView.ColumnGroups[3].PinPosition = PinnedColumnPosition.Right;
To reproduce:
- Set the column like this:
GridViewMaskBoxColumn col = new GridViewMaskBoxColumn();
col.Mask = "&&&&&&&&&&";
col.MaskType = MaskType.Standard;
col.FieldName = "Name";
col.TextMaskFormat = MaskFormat.IncludeLiterals;
- Type two words and press enter.
Workaround:
public class MyRadMaskedEditBoxEditor : RadMaskedEditBoxEditor
{
public override object Value
{
get
{
if (this.MaskTextBox.Mask == "my mask")
{
return this.MaskTextBox.Value;
}
return base.Value;
}
set
{
base.Value = value;
}
}
}
Workaround:
Subscribe to CellFormatting event:
void radGridView1_CellFormatting(object sender, CellFormattingEventArgs e)
{
if (e.CellElement is GridCheckBoxCellElement)
{
e.CellElement.ToolTipText = "ErrorMessage for CheckBoxColumn";
e.CellElement.Children[0].ToolTipText = "ErrorMessage for CheckBoxColumn";
e.CellElement.Children[0].Children[0].ToolTipText = "ErrorMessage for CheckBoxColumn";
}
}
To reproduce: - Add grid with several columns and set their AllowResize property to false. - Set the FitWidthMode to FitPageWidth. - Print the grid and you will notice that some of the columns are cut off. Workaround: - Set the AllowResize property to true before printing.
To reproduce: use the following code snippet and follow the steps in the attached gif file.
private void Form1_Load(object sender, EventArgs e)
{
this.order_DetailsTableAdapter.Fill(this.nwindDataSet.Order_Details);
this.ordersTableAdapter.Fill(this.nwindDataSet.Orders);
radGridView1.AutoGenerateHierarchy = true;
radGridView1.DataSource = this.nwindDataSet;
radGridView1.DataMember = "Orders";
radGridView1.MasterTemplate.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
radGridView1.MasterTemplate.Templates.First().AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
radGridView1.EnablePaging = true;
radGridView1.MasterTemplate.Templates.First().EnableFiltering = true;
FilterDescriptor fd = new FilterDescriptor();
fd.PropertyName = "UnitPrice";
fd.Operator = FilterOperator.IsGreaterThan;
fd.Value = 40;
radGridView1.MasterTemplate.Templates.First().FilterDescriptors.Add(fd);
radGridView1.MouseDown += radGridView1_MouseDown;
}
private void radGridView1_MouseDown(object sender, MouseEventArgs e)
{
GridDetailViewCellElement detailCell = radGridView1.ElementTree.GetElementAtPoint(e.Location) as GridDetailViewCellElement;
if (detailCell != null)
{
radGridView1.MasterTemplate.Templates.First().FilterDescriptors.Clear();
}
}
Workaround:
private void radGridView1_MouseDown(object sender, MouseEventArgs e)
{
GridDetailViewCellElement detailCell = radGridView1.ElementTree.GetElementAtPoint(e.Location) as GridDetailViewCellElement;
if (detailCell != null)
{
radGridView1.MasterTemplate.Templates.First().FilterDescriptors.Clear();
GridViewHierarchyRowInfo hierarchyRow = (GridViewHierarchyRowInfo)((GridViewDetailsRowInfo)detailCell.RowInfo).Owner;
hierarchyRow.IsExpanded = ! hierarchyRow.IsExpanded;
hierarchyRow.IsExpanded = ! hierarchyRow.IsExpanded;
hierarchyRow.ChildRows.Last().EnsureVisible();
}
}
To reproduce: - Add grid to a blank form. - Add summary rows and group descriptors. - Add rows upon a button click. - You will notice that not all rows are visible. Workaround: radGridView1.TableElement.Update(GridUINotifyAction.RowHeightChanged, null); radGridView1.TableElement.VScrollBar.Value = radGridView1.TableElement.VScrollBar.Maximum - radGridView1.TableElement.VScrollBar.LargeChange;
How to reproduce:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.radGridView1.DataSource = this.GetData();
this.radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill
}
private DataTable GetData()
{
DataTable dt = new DataTable();
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Age", typeof(int));
dt.Columns.Add("Date", typeof(DateTime));
dt.Columns.Add("Bool", typeof(bool));
for (int i = 0; i < 100; i++)
{
dt.Rows.Add(i, "Name " + i, i + 10, DateTime.Now.AddMinutes(i), i % 2 == 0 ? true : false);
}
return dt;
}
private void radButton1_Click(object sender, EventArgs e)
{
this.radGridView1.Columns[1].Expression = "Id * Age";
}
private void radButton2_Click(object sender, EventArgs e)
{
string s = "default.xml";
SaveFileDialog dialog = new SaveFileDialog();
dialog.Filter = "xml files (*.xml)|*.xml|All files (*.*)|*.*";
dialog.Title = "Select a xml file";
if (dialog.ShowDialog() == DialogResult.OK)
{
s = dialog.FileName;
}
this.radGridView1.SaveLayout(s);
}
private void radButton3_Click(object sender, EventArgs e)
{
string s = "default.xml";
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "xml files (*.xml)|*.xml|All files (*.*)|*.*";
dialog.Title = "Select a xml file";
if (dialog.ShowDialog() == DialogResult.OK)
{
s = dialog.FileName;
}
this.radGridView1.LoadLayout(s);
}
}
Workaround: iterate the columns prior to loading the layout and remove the expressions
private void radButton3_Click(object sender, EventArgs e)
{
foreach (GridViewDataColumn col in this.radGridView1.Columns)
{
col.Expression = "";
}
string s = "default.xml";
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "xml files (*.xml)|*.xml|All files (*.*)|*.*";
dialog.Title = "Select a xml file";
if (dialog.ShowDialog() == DialogResult.OK)
{
s = dialog.FileName;
}
this.radGridView1.LoadLayout(s);
}
To reproduce: 1. Drag and drop RadGridView 2. Open Property Builder 3. Add a column and select it 4. Open Settings tab and you will see that there are two ampersand symbols 5. Add template or select Master Template and you will see that there are two ampersand symbols
To reproduce:
- Set the grid properties as follows:
radGridView1.MasterTemplate.AllowAddNewRow = false;
radGridView1.MasterTemplate.AllowDeleteRow = false;
radGridView1.MasterTemplate.AllowDragToGroup = false;
radGridView1.MasterTemplate.AllowEditRow = false;
radGridView1.MasterTemplate.EnableFiltering = true;
radGridView1.MasterTemplate.EnableGrouping = false;
radGridView1.MasterTemplate.MultiSelect = true;
- Start the application and drag the filter button without releasing the mouse button.
Workaround:
class MyGridFilterRowBehavior : GridFilterRowBehavior
{
protected override bool ProcessMouseSelection(Point mousePosition, GridCellElement currentCell)
{
if (currentCell is GridFilterCellElement)
{
return false;
}
return base.ProcessMouseSelection(mousePosition, currentCell);
}
}
BaseGridBehavior gridBehavior = radGridView1.GridBehavior as BaseGridBehavior;
gridBehavior.UnregisterBehavior(typeof(GridViewFilteringRowInfo));
gridBehavior.RegisterBehavior(typeof(GridViewFilteringRowInfo), new MyGridFilterRowBehavior());
To reproduce:
- Add some columns to a grid.
- Then add a column like this:
private void button2_Click(object sender, System.EventArgs e)
{
radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill;
Telerik.WinControls.UI.GridViewDataColumn gridViewColumn2 = new Telerik.WinControls.UI.GridViewCheckBoxColumn();
gridViewColumn2.MinWidth = gridViewColumn2.MaxWidth = 22;
gridViewColumn2.Width = 100;
radGridView1.MasterTemplate.Columns.Add(gridViewColumn2);
gridViewColumn2.MinWidth = 0;
gridViewColumn2.MaxWidth = 0;
}
Please note that if you add two columns with the above code, you will be able to resize the first one, but the cursor position is in wrong position.
Workaround:
- Set the MaxWidth before adding the column to the grid.
Please refer to the attached gif file.
Workaround:
this.radGridView1.GridBehavior = new CustomBaseGridBehavior();
public class CustomBaseGridBehavior : BaseGridBehavior
{
public override bool OnMouseMove(MouseEventArgs e)
{
GroupPanelSizeGripElement grip = this.GridViewElement.ElementTree.GetElementAtPoint(e.Location) as GroupPanelSizeGripElement;
if (grip != null)
{
this.GridViewElement.ElementTree.Control.Cursor = Cursors.SizeNS;
return true;
}
return base.OnMouseMove(e);
}
}
To reproduce: - Use RadDock with MDI mode. - Add a form that contains a grid. - Set the theme to Aqua. Workaround: grid.GridViewElement.ForeColor = Color.Black;
To reproduce:
this.radGridView1.MultiSelect = true;
Please refer to the attached gif file illustrating better the behavior.
1. Select a row and filter the grid in a way to keep the selected row visible.
2. The first row in the ChildRows collection is selected.
3. Clear the filter. The selection is stored and only one row is selected.
4. Repeat the above steps, but perform such filtering that hides the selected cell. When you clear the filter, two rows are selected instead of one.
Workaround:
private void radGridView1_FilterChanged(object sender, Telerik.WinControls.UI.GridViewCollectionChangedEventArgs e)
{
this.radGridView1.ClearSelection();
if (this.radGridView1.CurrentCell!=null)
{
this.radGridView1.CurrentCell.IsSelected = true;
this.radGridView1.CurrentRow.IsSelected = true;
this.radGridView1.GridNavigator.Select(this.radGridView1.CurrentRow, this.radGridView1.CurrentColumn);
}
}
To reproduce: use the following code snippet and perform the steps illustrated on the attached gif file:
http://www.telerik.com/help/winforms/gridview-filtering-excel-like-filtering.html
public Form1()
{
InitializeComponent();
DataTable dt = new DataTable();
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("Date", typeof(DateTime));
dt.Columns.Add("Name", typeof(string));
DateTime date;
for (int i = 0; i < 5; i++)
{
date = DateTime.Today.AddDays(i);
dt.Rows.Add(i,date, "Item." + i );
date = date.AddHours(2);
dt.Rows.Add(i,date ,"Item." + i + ".2" );
date = date.AddMonths(i);
dt.Rows.Add(i,date, "Item." + i + ".2");
}
this.radGridView1.DataSource = dt;
this.radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill;
this.radGridView1.EnableFiltering = true;
this.radGridView1.ShowHeaderCellButtons = true;
((GridViewDateTimeColumn)this.radGridView1.Columns[1]).FilteringMode = GridViewTimeFilteringMode.Date;
this.radGridView1.FilterPopupRequired += radGridView1_FilterPopupRequired;
}
private void radGridView1_FilterPopupRequired(object sender, FilterPopupRequiredEventArgs e)
{
if (e.Column.Name == "Date")
{
e.FilterPopup = new RadListFilterPopup(e.Column, true);
}
}
Workaround:
RadListFilterPopup popup;
private void radGridView1_FilterPopupRequired(object sender, FilterPopupRequiredEventArgs e)
{
if (e.Column.Name == "Date")
{
if (popup == null)
{
popup = new RadListFilterPopup(e.Column, true);
}
e.FilterPopup = popup;
}
}
To reproduce: - Set the cell's BackColor in an entire column. - Set the cell's Forecolor in another column. - Change the grid size to the columns are hidden and then shown again. Workaround: Change similar properties for all the cells where the Style property is used or use CellFormatting.
To reproduce:
- Enter a value in the search row (make sure you will have several results)
- Enter a letter in the filtering row. The filetring row will lose the focus.
Workaround:
public class MyGridViewSearchRowInfo : GridViewSearchRowInfo
{
public MyGridViewSearchRowInfo(GridViewInfo viewInfo) : base(viewInfo)
{
}
public override void SelectNextSearchResult()
{
GridViewSystemRowInfo systemRow = this.ViewTemplate.MasterTemplate.CurrentRow as GridViewSystemRowInfo;
if (systemRow != null && this.ViewTemplate.MasterTemplate.Owner.EditorManager.IsInEditMode)
{
return;
}
base.SelectNextSearchResult();
}
}
//change the default row like this
void radGridView1_CreateRowInfo(object sender, GridViewCreateRowInfoEventArgs e)
{
if (e.RowInfo is GridViewSearchRowInfo)
{
e.RowInfo = new MyGridViewSearchRowInfo(e.ViewInfo);
}
}