To reproduce:
- Enable the search row in the grid.
- Enter some text in the search text box in order to mark some rows.
- Refresh the master template.
- Notice that the text is cleared, but the formatting remains.
Workaround, use the following custom cell:
class MyGridSearchCellElement : GridSearchCellElement
{
public MyGridSearchCellElement(GridViewColumn column, GridRowElement row)
:base (column, row)
{
}
bool performSearch = true;
protected override void SyncLabelText()
{
//base.SyncLabelText();
GridViewSearchRowInfo searchRow = this.RowInfo as GridViewSearchRowInfo;
if (searchRow == null)
{
return;
}
performSearch = false;
string searchCriteria = typeof(GridViewSearchRowInfo).GetField("searchCriteria", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(searchRow).ToString();
if (string.IsNullOrEmpty(searchCriteria))
{
this.SearchTextBox.Text = String.Empty;
this.SearchTextBox.SearchInfoLabel.Text = String.Empty;
}
else
{
this.SearchTextBox.Text = searchCriteria;
this.SearchTextBox.SearchInfoLabel.Text = string.Format("{0} {1} {2}", searchRow.CurrentResultIndex + 1, Telerik.WinControls.UI.Localization.RadGridLocalizationProvider.CurrentProvider.GetLocalizedString(Telerik.WinControls.UI.Localization.RadGridStringId.SearchRowResultsOfLabel), searchRow.CurrentSearchResultsCount);
}
performSearch = true;
}
protected override void Search()
{
if (!performSearch)
{
return;
}
base.Search();
}
}
To put it in action, use the CreateCell event of RadGridView:
void radGridView1_CreateCell(object sender, GridViewCreateCellEventArgs e)
{
if (e.CellType == typeof( GridSearchCellElement))
{
e.CellElement = new MyGridSearchCellElement(e.Column, e.Row);
}
}
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();
}
}
Workaround:
private void radGridView1_CellEditorInitialized(object sender, Telerik.WinControls.UI.GridViewCellEventArgs e)
{
GridBrowseEditor browseEditor = e.ActiveEditor as GridBrowseEditor;
if (browseEditor!=null)
{
browseEditor.EditorElement.MinSize = new Size(0,18);
GridBrowseEditorElement el = browseEditor.EditorElement as GridBrowseEditorElement;
el.TextBoxItem.TextBoxControl.MinimumSize = new Size(0, 13);
}
}
To reproduce use the following snippets in the CellFormatting event of the exporter: ThemableColor red = new ThemableColor(System.Windows.Media.Colors.Red); CellBorders redBorders = new CellBorders(new CellBorder(CellBorderStyle.Medium, red)); e.CellStyleInfo.Borders = redBorders; or ThemableColor red = new ThemableColor(System.Windows.Media.Colors.Red); CellBorders fourBorders = new CellBorders(); fourBorders.Top = new CellBorder(CellBorderStyle.Thin, red); fourBorders.Bottom = new CellBorder(CellBorderStyle.Thin, red); fourBorders.Right = new CellBorder(CellBorderStyle.Thin, red); fourBorders.Left = new CellBorder(CellBorderStyle.Thin, red); e.CellStyleInfo.Borders = fourBorders;
To reproduce:
Download the attached project, run it and try to filter the bottom grid. You will see the exception
Workaround:
Use the following custom RadGridView:
public class MyGrid : RadGridView
{
protected override RadGridViewElement CreateGridViewElement()
{
return new MyGridElement();
}
}
public class MyGridElement : RadGridViewElement
{
protected override MasterGridViewTemplate CreateTemplate()
{
return new MyMasterTemplate();
}
protected override Type ThemeEffectiveType
{
get
{
return typeof(RadGridViewElement);
}
}
}
public class MyMasterTemplate : MasterGridViewTemplate
{
private MyEventDispatcher dispatcher = new MyEventDispatcher();
public override EventDispatcher EventDispatcher
{
get
{
return this.dispatcher;
}
}
}
public class MyEventDispatcher : EventDispatcher
{
public override void RaiseEvent<T>(object eventKey, object sender, T args)
{
GridViewCellEventArgs cellArgs = args as GridViewCellEventArgs;
if (cellArgs != null && cellArgs.Column == null && cellArgs.Row == null)
{
typeof(GridViewCellEventArgsBase)
.GetField("column", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic)
.SetValue(cellArgs, new GridViewTextBoxColumn());
typeof(GridViewCellEventArgsBase)
.GetField("row", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic)
.SetValue(cellArgs, new GridViewDataRowInfo(null));
}
base.RaiseEvent<T>(eventKey, sender, args);
}
}
Workaround:
RadDragDropService dragDropService;
int scrollValue = 0;
public Form1()
{
InitializeComponent();
dragDropService = this.leftGrid.GridViewElement.GetService<RadDragDropService>();
dragDropService.Started += dragDropService_Started;
leftGrid.TableElement.VScrollBar.ValueChanged += VScrollBar_ValueChanged;
}
private void dragDropService_Started(object sender, EventArgs e)
{
scrollValue = this.leftGrid.TableElement.VScrollBar.Value;
}
private void VScrollBar_ValueChanged(object sender, EventArgs e)
{
if (dragDropService != null && dragDropService.State == RadServiceState.Working)
{
this.leftGrid.TableElement.VScrollBar.Value = scrollValue;
}
}
Resolution:
Added AllowAutoScrollColumnsWhileDragging and AllowAutoScrollRowsWhileDragging properties of RadGridViewDragDropService:
RadGridViewDragDropService svc = this.GridViewElement.GetService<RadGridViewDragDropService>();
svc.AllowAutoScrollColumnsWhileDragging = false;
svc.AllowAutoScrollRowsWhileDragging = false;
svc.Start(row);
To reproduce:
Populate a RadGridView with the following data:
DataTable vMain = new DataTable("Details");
vMain.Columns.Add("OutServiceDateGuid", typeof(Guid));
vMain.Columns.Add("預估金額", typeof(string));
vMain.Columns.Add("織造", typeof(bool));
vMain.Columns.Add("狀態", typeof(string));
vMain.Columns.Add("委託廠商", typeof(string));
vMain.Columns.Add("工服單", typeof(string));
vMain.Columns.Add("申請日", typeof(DateTime));
for (int i = 0; i < 40; i++)
{
vMain.Rows.Add("50ED1E91-868C-42AC-9CA9-00A56F78C3" + i.ToString("0#") ,i.ToString(), true,"", "中心", "103LMH4"+i.ToString(), "2014-10-24 13:04:16.367");
}
radGridView1.DataSource = vMain;
radGridView1.Columns["OutServiceDateGuid"].IsVisible = false;
radGridView1.Columns["申請日"].FormatString = "{0:yyyy/MM/dd}";
radGridView1.Columns["預估金額"].FormatString = "{0:C}";
radGridView1.Columns["狀態"].MaxWidth = 70;
// this.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
//this.radGridView1.BestFitColumns(BestFitColumnMode.AllCells);
// this.radGridView1.MasterTemplate.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
DataTable vWoven = new DataTable("vWoven");
vWoven.Columns.Add("OutServiceDateGuid", typeof(Guid));
vWoven.Columns.Add("NameOrColor", typeof(string));
vWoven.Columns.Add("Qty", typeof(string));
vWoven.Columns.Add("QtyUnitName", typeof(string));
vWoven.Columns.Add("Weight", typeof(string));
vWoven.Columns.Add("SumPrice", typeof(string));
for (int i = 0; i < 40; i++)
{
vWoven.Rows.Add("50ED1E91-868C-42AC-9CA9-00A56F78C3" + (i + 1).ToString("0#"), " vWoven中心" + i.ToString(), i, i, i);
}
GridViewTemplate template1 = new GridViewTemplate();
template1.Caption = "織造";
template1.DataSource = vWoven;
template1.Columns["OutServiceDateGuid"].IsVisible = false;
template1.Columns["NameOrColor"].HeaderText = "成品名與規格";
template1.Columns["Qty"].HeaderText = "數量";
template1.Columns["QtyUnitName"].HeaderText = "單位";
template1.Columns["Weight"].HeaderText = "重量";
template1.Columns["SumPrice"].HeaderText = "金額";
//template1.BestFitColumns(BestFitColumnMode.AllCells);
template1.AllowRowResize = false;
template1.ShowColumnHeaders = true;
template1.ShowRowHeaderColumn = true;
template1.AllowAddNewRow = false;
template1.AllowDeleteRow = false;
template1.AllowDragToGroup = false;
this.radGridView1.Templates.Add(template1);
GridViewRelation relation1 = new GridViewRelation(this.radGridView1.MasterTemplate);
relation1.ChildTemplate = template1;
relation1.ParentColumnNames.Add("OutServiceDateGuid");
relation1.ChildColumnNames.Add("OutServiceDateGuid");
this.radGridView1.Relations.Add(relation1);
DataTable vDye = new DataTable("vDye");
vDye.Columns.Add("OutServiceDateGuid", typeof(Guid));
vDye.Columns.Add("NameOrColor", typeof(string));
vDye.Columns.Add("ColorNo", typeof(string));
vDye.Columns.Add("Qty", typeof(string));
vDye.Columns.Add("QtyUnitName", typeof(string));
vDye.Columns.Add("Weight", typeof(string));
vDye.Columns.Add("SumPrice", typeof(string));
for (int i = 0; i < 20; i++)
{
vDye.Rows.Add("50ED1E91-868C-42AC-9CA9-00A56F78C3" + (i + 1).ToString("0#"), " vDye中心" + i.ToString(),"", i, i, i);
}
GridViewTemplate template2 = new GridViewTemplate();
template2.Caption = "染整";
template2.DataSource = vDye;
template2.Columns["OutServiceDateGuid"].IsVisible = false;
template2.Columns["NameOrColor"].HeaderText = "顏色";
template2.Columns["ColorNo"].HeaderText = "色號";
template2.Columns["Qty"].HeaderText = "數量";
template2.Columns["QtyUnitName"].HeaderText = "單位";
template2.Columns["Weight"].HeaderText = "重量";
template2.Columns["SumPrice"].HeaderText = "金額";
//template2.BestFitColumns(BestFitColumnMode.AllCells);
template2.AllowAddNewRow = false;
template2.AllowRowResize = false;
template2.ShowColumnHeaders = true;
template2.ShowRowHeaderColumn = true;
template2.AllowDeleteRow = false;
template2.AllowDragToGroup = false;
this.radGridView1.Templates.Add(template2);
GridViewRelation relation2 = new GridViewRelation(this.radGridView1.MasterTemplate);
relation2.ChildTemplate = template2;
relation2.ParentColumnNames.Add("OutServiceDateGuid");
relation2.ChildColumnNames.Add("OutServiceDateGuid");
this.radGridView1.Relations.Add(relation2);
DataTable vAppoint = new DataTable("vAppoint");
vAppoint.Columns.Add("OutServiceDateGuid", typeof(Guid));
vAppoint.Columns.Add("NameOrColor", typeof(string));
vAppoint.Columns.Add("Qty", typeof(string));
vAppoint.Columns.Add("QtyUnitName", typeof(string));
vAppoint.Columns.Add("Weight", typeof(string));
vAppoint.Columns.Add("SumPrice", typeof(string));
for (int i = 0; i < 20; i++)
{
vAppoint.Rows.Add("50ED1E91-868C-42AC-9CA9-00A56F78C3" + (i + 2).ToString("0#"), "vAppoint中心" + i.ToString(), i, i, i);
}
GridViewTemplate template3 = new GridViewTemplate();
template3.Caption = "委外";
template3.DataSource = vAppoint;
template3.Columns["OutServiceDateGuid"].IsVisible = false;
template3.Columns["NameOrColor"].HeaderText = "委外內容";
template3.Columns["SumPrice"].HeaderText = "金額";
//template3.BestFitColumns(BestFitColumnMode.AllCells);
template3.AllowAddNewRow = false;
template3.AllowRowResize = false;
template3.ShowColumnHeaders = true;
template3.ShowRowHeaderColumn = true;
template3.AllowDeleteRow = false;
template3.AllowDragToGroup = false;
this.radGridView1.Templates.Add(template3);
GridViewRelation relation3 = new GridViewRelation(this.radGridView1.MasterTemplate);
relation3.ChildTemplate = template3;
relation3.ParentColumnNames.Add("OutServiceDateGuid");
relation3.ChildColumnNames.Add("OutServiceDateGuid");
this.radGridView1.Relations.Add(relation3);
DataTable vMembrane = new DataTable("vMembrane");
vMembrane.Columns.Add("OutServiceDateGuid", typeof(Guid));
vMembrane.Columns.Add("NameOrColor", typeof(string));
vMembrane.Columns.Add("Qty", typeof(string));
vMembrane.Columns.Add("QtyUnitName", typeof(string));
vMembrane.Columns.Add("Weight", typeof(string));
vMembrane.Columns.Add("SumPrice", typeof(string));
//for (int i = 0; i < 40; i++)
//{
// vMembrane.Rows.Add("50ED1E91-868C-42AC-9CA9-00A56F78C3" + (i + 3).ToString("0#"), "vMembrane中心" + i.ToString(), i, i, i);
//}
GridViewTemplate template4 = new GridViewTemplate();
template4.Caption = "膜";
template4.DataSource = vMembrane;
template4.Columns["OutServiceDateGuid"].IsVisible = false;
template4.Columns["NameOrColor"].HeaderText = "成品規格";
template4.Columns["Qty"].HeaderText = "數量";
template4.Columns["QtyUnitName"].HeaderText = "單位";
template4.Columns["SumPrice"].HeaderText = "金額";
//template4.BestFitColumns(BestFitColumnMode.AllCells);
template4.AllowAddNewRow = false;
template4.AllowRowResize = false;
template4.ShowColumnHeaders = true;
template4.ShowRowHeaderColumn = true;
template4.AllowDeleteRow = false;
template4.AllowDragToGroup = false;
this.radGridView1.Templates.Add(template4);
GridViewRelation relation4 = new GridViewRelation(this.radGridView1.MasterTemplate);
relation4.ChildTemplate = template4;
relation4.ParentColumnNames.Add("OutServiceDateGuid");
relation4.ChildColumnNames.Add("OutServiceDateGuid");
this.radGridView1.Relations.Add(relation4);
DataTable vCheck = new DataTable("vCheck");
vCheck.Columns.Add("OutServiceDateGuid", typeof(Guid));
vCheck.Columns.Add("NameOrColor", typeof(string));
vCheck.Columns.Add("Qty", typeof(string));
vCheck.Columns.Add("QtyUnitName", typeof(string));
vCheck.Columns.Add("Weight", typeof(string));
vCheck.Columns.Add("SumPrice", typeof(string));
vCheck.Columns.Add("CheckItem", typeof(string));
//for (int i = 0; i <10; i++)
//{
// vCheck.Rows.Add("50ED1E91-868C-42AC-9CA9-00A56F78C3" + (i + 4).ToString("0#"), "中心" + i.ToString(), i, i, i);
//}
GridViewTemplate template5 = new GridViewTemplate();
template5.Caption = "檢測";
template5.DataSource = vCheck;
template5.Columns["OutServiceDateGuid"].IsVisible = false;
template5.Columns["NameOrColor"].HeaderText = "樣品名稱與規格";
template5.Columns["CheckItem"].HeaderText = "檢驗項目";
template5.Columns["CheckItem"].WrapText = true;
template5.Columns["Qty"].HeaderText = "數量";
template5.Columns["QtyUnitName"].HeaderText = "單位";
template5.Columns["SumPrice"].HeaderText = "金額";
//template5.BestFitColumns(BestFitColumnMode.AllCells);
template5.AllowAddNewRow = false;
template5.AllowRowResize = false;
template5.ShowColumnHeaders = true;
template5.ShowRowHeaderColumn = true;
template5.AllowDeleteRow = false;
template5.AllowDragToGroup = false;
this.radGridView1.Templates.Add(template5);
GridViewRelation relation5 = new GridViewRelation(this.radGridView1.MasterTemplate);
relation5.ChildTemplate = template5;
relation5.ParentColumnNames.Add("OutServiceDateGuid");
relation5.ChildColumnNames.Add("OutServiceDateGuid");
this.radGridView1.Relations.Add(relation5);
Open the application and scroll the grid a bit, you will see that any newly layouted cell will be on the most left corner.
Workaround:
Use the following code after populating the grid with data:
this.radGridView1.Columns[3].Width += 5;
this.radGridView1.Columns[3].Width -= 5;
To reproduce: use the following code snippet:
DataTable dt = new DataTable();
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Duration", typeof(TimeSpan));
for (int i = 0; i < 20; i++)
{
dt.Rows.Add(i, "Item" + i, TimeSpan.FromMinutes(i * 10));
}
this.radGridView1.DataSource = dt;
this.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
this.radGridView1.EnableFiltering = true;
this.radGridView1.ShowHeaderCellButtons = true;
Try to filter via the Excel-Like filtering functionality.
Workaround: use dt.Columns.Add("Duration", typeof(string)); instead of dt.Columns.Add("Duration", typeof(TimeSpan));
To reproduce:
Download the attached project and expand the first row. Collapse it and expand the second row. You will see that both rows will be expanded.
Workaround:
void radGridView1_ChildViewExpanding(object sender, ChildViewExpandingEventArgs e)
{
Point p = this.radGridView1.PointToClient(MousePosition);
RadElement el = this.radGridView1.ElementTree.GetElementAtPoint(p);
if (el != null)
{
GridRowElement rowElement = el.FindAncestor<GridRowElement>();
if (rowElement != null && e.ParentRow.Index != rowElement.RowInfo.Index && !e.IsExpanded)
{
e.Cancel = true;
}
}
}
Note: InvalidCastException in case of converting Char to Boolean.
To reproduce: use the following code snippet:
public Form1()
{
InitializeComponent();
DataTable dt = new DataTable();
dt.Columns.Add("Id", typeof(string));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Active", typeof(string));
dt.Rows.Add("1", "Item1", "Y");
dt.Rows.Add("2", "Item2", "N");
this.radGridView1.DataSource = dt;
this.radGridView1.Columns.RemoveAt(2);
GridViewCheckBoxColumn checkBoxColumn = new GridViewCheckBoxColumn();
checkBoxColumn.FieldName = "Active";
checkBoxColumn.DataTypeConverter = new ToggleStateConverter();
radGridView1.MasterTemplate.Columns.Add(checkBoxColumn);
radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
radGridView1.EnableFiltering = true;
}
public class ToggleStateConverter : TypeConverter
{
public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
{
return destinationType == typeof(ToggleState);
}
public override object ConvertTo(ITypeDescriptorContext context,
CultureInfo culture, object value, Type destinationType)
{
string charValue = value + "";
switch (charValue)
{
case "Y":
return ToggleState.On;
case "N":
return ToggleState.Off;
case "M":
return ToggleState.Indeterminate;
}
return base.ConvertTo(context, culture, value, destinationType);
}
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
{
return sourceType == typeof(ToggleState);
}
public override object ConvertFrom(ITypeDescriptorContext context,
CultureInfo culture, object value)
{
ToggleState state = (ToggleState)value;
switch (state)
{
case ToggleState.On:
return "Y";
case ToggleState.Off:
return "N";
case ToggleState.Indeterminate:
return "M";
}
return base.ConvertFrom(context, culture, value);
}
}
Try to filter by "Name" column. As a result FormatException occurs because of inability to convert "Y"/"N" to Boolean although a custom TypeConverter is implemented to handle it.
When current cell is checked (CheckBoxColumn) and the user scrolls one time with the mouse wheel there is a blank space below the grid.
To reproduce: Download the attached project and run it. You will see the memory will increase
It is related to GridViewCalculatorColumn, GridViewBrowseColumn. Workaround: use a custom row behavior and override the ProcessAlphaNumericKey method to initialize the editor with the respective value. http://www.telerik.com/help/winforms/gridview-rows-row-behaviors.html
To reproduce:
public Form1()
{
InitializeComponent();
BindingSource bs1 = new BindingSource();
BindingSource bs2 = new BindingSource();
DataTable dt1 = new DataTable();
dt1.Columns.Add("MortgageId", typeof(string));
dt1.Columns.Add("MortgageNo", typeof(string));
for (int i = 0; i < 50; i++)
{
dt1.Rows.Add(i, Guid.NewGuid().ToString().Substring(0, 5));
}
bs1.DataSource = dt1;
DataTable dt2 = new DataTable();
dt2.Columns.Add("PaymentCode", typeof(string));
dt2.Columns.Add("Description", typeof(string));
for (int i = 0; i < 50; i++)
{
dt2.Rows.Add(Guid.NewGuid().ToString().Substring(0, 5), Guid.NewGuid().ToString().Substring(0, 5));
}
bs2.DataSource = dt2;
GridViewMultiComboBoxColumn col1 = new GridViewMultiComboBoxColumn("MortgageId");
col1.DataSource = bs1;
col1.FieldName = "MortgageId";
col1.DisplayMember = "MortgageId";
col1.ValueMember = "MortgageId";
col1.Width = 70;
this.radGridView1.Columns.Add(col1);
col1 = new GridViewMultiComboBoxColumn("PaymentCode");
col1.DataSource = bs2;
col1.DisplayMember = "PaymentCode";
col1.ValueMember = "PaymentCode";
col1.FieldName = "PaymentCode";
col1.Width = 70;
this.radGridView1.Columns.Add(col1);
this.radGridView1.CellEditorInitialized += radGridView1_CellEditorInitialized;
}
private void radGridView1_CellEditorInitialized(object sender, Telerik.WinControls.UI.GridViewCellEventArgs e)
{
if (e.Column.Name == "MortgageId")
{
RadMultiColumnComboBoxElement editor = e.ActiveEditor as RadMultiColumnComboBoxElement;
if (editor != null)
{
editor.EditorControl.FilterDescriptors.Clear();
editor.EditorControl.Columns.Clear();
editor.EditorControl.MasterTemplate.AutoGenerateColumns = false;
editor.EditorControl.Columns.Add(new GridViewTextBoxColumn("MortgageId"));
editor.EditorControl.Columns.Add(new GridViewTextBoxColumn("MortgageNo"));
editor.DropDownWidth = 200;
}
return;
}
if (e.Column.Name == "PaymentCode")
{
RadMultiColumnComboBoxElement editor = e.ActiveEditor as RadMultiColumnComboBoxElement;
if (editor != null)
{
editor.EditorControl.FilterDescriptors.Clear();
editor.EditorControl.Columns.Clear();
editor.EditorControl.MasterTemplate.AutoGenerateColumns = false;
editor.EditorControl.Columns.Add(new GridViewTextBoxColumn("PaymentCode"));
editor.EditorControl.Columns.Add(new GridViewTextBoxColumn("Description"));
editor.DropDownWidth = 200;
}
return;
}
}
Workaround: do not set the RadMultiColumnComboBoxElement.EditorControl.MasterTemplate.AutoGenerateColumns property to false in the CellEditorInitialized event .
To reproduce:
- Bind the grid to a self reference data, it should contain nullable bool value as well.
- Add checkbox column:
GridViewCheckBoxColumn chkBoxColumn = new GridViewCheckBoxColumn();
chkBoxColumn.EnableHeaderCheckBox = true;
chkBoxColumn.ThreeState = true;
chkBoxColumn.EditMode = EditMode.OnValueChange;
- Start and uncheck and check one of the cells (in a data row)
Workaround:
public class MyGridCheckBoxHeaderCellElement : GridCheckBoxHeaderCellElement
{
public MyGridCheckBoxHeaderCellElement(GridViewColumn column, GridRowElement row) : base(column,row)
{
}
protected override bool SetCheckBoxState()
{
bool hasNullValue = false;
foreach (GridViewRowInfo row in this.ViewInfo.Rows)
{
object cellValue = row.Cells[this.ColumnIndex].Value;
if (cellValue == null)
{
hasNullValue = true;
}
}
if (!hasNullValue)
{
return base.SetCheckBoxState();
}
SetCheckBoxState(ToggleState.Indeterminate);
return false;
}
}
Synchronization between the filter descriptors collection and the excel like filtering.
Currently if a user hits the decimal separator key the grid opens a cell for edit and selects its content. If the user does not notice this he may enter 1 instead of 0.1
To reproduce: - Add GridViewCheckBoxColumn and set the EnableHeaderCheckBox property to true. - Mark all check boxes and change the data source of the grid (use one where not all values are set to true). Workaround: Add new column when the data source is changed.
Workaround:
RadImageShape hint;
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
InitializeComponent();
hint = radGridView1.TableElement.RowDragHint;
new Windows7Theme();
radGridView1.ThemeName = "Windows7";
radGridView1.TableElement.RowDragHint = hint;
}
To reproduce:
- Bind the grid to a data source and set its RightToLeftProperty to true.
Note: use Visual Studio 2008 under Windows XP with .NET 2.0
Workaround:
Private Sub RadGridView1_ViewCellFormatting(ByVal sender As System.Object, ByVal e As Telerik.WinControls.UI.CellFormattingEventArgs)
If RadGridView1.RightToLeft = Windows.Forms.RightToLeft.Yes Then
e.CellElement.TextAlignment = ContentAlignment.MiddleLeft
End If
End Sub