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);
RadGridView issue: Can not change the Operator or Value of FilterDescriptor in FilterChanging event handler
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
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:
- Add several rows to a grid where the paging is enabled (make sure that last row has unique values)
- Use the excel like filtering in the first page, notice that the last value is missing.
Workaround:
void radGridView1_FilterPopupInitialized(object sender, FilterPopupInitializedEventArgs e)
{
RadListFilterPopup popup = e.FilterPopup as RadListFilterPopup;
if (popup != null)
{
foreach (GridViewRowInfo row in radGridView1.Rows)
{
var value = row.Cells[e.Column.Name].Value;
if (!(popup.MenuTreeElement.DistinctListValues.Contains(value)))
{
popup.MenuTreeElement.DistinctListValues.Add(value.ToString(), value.ToString()) ;
}
}
}
}
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:
public Form1()
{
InitializeComponent();
List<DiffItem> diffItemsMain = GetSampleDataDiffItems(12500);
radGridView1.DataSource = diffItemsMain;
radGridView1.Relations.AddSelfReference(radGridView1.MasterTemplate, "Index", "ParentIndex");
radGridView1.MasterTemplate.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
}
private List<DiffItem> GetSampleDataDiffItems(int rootInstances)
{
List<DiffItem> diffItems = new List<DiffItem>();
for (int j = 0; j < rootInstances; j++)
{
string[,] sampleData = GetSampleDataArray();
string parentIndex = "";
for (int i = 0; i <= sampleData.GetUpperBound(0); i++)
{
DiffItem diffItem = new DiffItem(Guid.NewGuid().ToString());
diffItem.ObjectStatus = sampleData[i, 0];
diffItem.ObjectType = sampleData[i, 1];
diffItem.ObjectLabel = sampleData[i, 2];
diffItem.ChangeType = sampleData[i, 3];
diffItem.ObjectAccepted = sampleData[i, 4];
diffItem.ParentIndex = parentIndex;
diffItems.Add(diffItem);
parentIndex = diffItem.Index;
}
}
return diffItems;
}
private string[,] GetSampleDataArray()
{
string[,] sampleData = new string[,]
{
{ "New", "Parent", "A572", "Added", "Undecided" },
{ "New", "Child", "CM1", "Added", "Undecided" },
{ "Modified", "GrandChild", "A573", "Modified", "Undecided" },
{ "Modified", "GreatGrandChild", "CM2", "Modified", "Undecided" }
};
return sampleData;
}
public class DiffItem
{
public DiffItem(string index)
{
Index = index;
}
public string ObjectStatus { get; set; }
public string Index { get; set; }
public bool ObjectSelected { get; set; }
public string ObjectType { get; set; }
public string ObjectLabel { get; set; }
public string ChangeType { get; set; }
public string ObjectAccepted { get; set; }
public string ParentIndex { get; set; }
}
Try to edit one random cell. You will notice that after pressing the Enter key to commit the changes, the editor is closed after a few seconds.
Resolution:
The slowdown should be experienced only when editing columns which participate in the self-reference relation.
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:
public Form1()
{
InitializeComponent();
DataTable dt = new DataTable();
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("ParentId", typeof(int));
dt.Columns.Add("IsActive", typeof(bool));
dt.Columns.Add("Title", typeof(string));
for (int i = 1; i < 6; i++)
{
dt.Rows.Add(i, 0, i % 2 == 0, "Title" + i);
}
Random rand = new Random();
int parentIndex = 0;
for (int i = 6; i < 30; i++)
{
parentIndex = rand.Next(1, 6);
dt.Rows.Add(i, parentIndex, i % 2 == 0, "Title" + i);
}
radGridView1.DataSource = dt;
radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill;
radGridView1.Relations.AddSelfReference(radGridView1.MasterTemplate, "Id", "ParentId");
GroupDescriptor descriptor = new GroupDescriptor();
descriptor.GroupNames.Add("Title", System.ComponentModel.ListSortDirection.Ascending);
radGridView1.GroupDescriptors.Add(descriptor);
this.radGridView1.AllowSearchRow = true;
}
To reproduce: Download the attached project and run it. You will see the memory will increase
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;
}
}
}
To reproduce:
Set these properties:
radGridView1.SelectionMode = GridViewSelectionMode.FullRowSelect;
radGridView1.MultiSelect = true;
Select a row, hold Ctrl and click the same cell which is selected, you will see that the SelectionChanging event, along with the SelectionChanged one will not be fired.
Workaround:
Use the PropertyChanging event of the rows:
this.Grid.Rows.ToList().ForEach(x => x.PropertyChanging += x_PropertyChanging);
....
void x_PropertyChanging(object sender, Telerik.WinControls.Interfaces.PropertyChangingEventArgsEx e)
{
if (e.PropertyName == "IsSelected")
{
}
}
This happened multiple times. In the property builder, I tried to delete the column and Visual Studio crashed. I was able to delete other columns fine, but this particular column caused a problem. The only difference that I can see between the other columns and the one that caused the problem was the conditionalformattingobject. Once I deleted this conditionalformattingobject, I was able to delete the column without any problem.
To reproduce: - Type &1 in a grid cell and then press enter to exit edit mode. - Press tab for example to move to the next cell. - Press 1 again you will notice that the digit does not appear in the cell.
To reproduce: use the following code snippet:
public Form1()
{
InitializeComponent();
GridViewComboBoxColumn supplierColumn = new GridViewComboBoxColumn("SupplierID");
supplierColumn.DataSource = this.suppliersBindingSource;
supplierColumn.ValueMember = "SupplierID";
supplierColumn.DisplayMember = "ContactName";
supplierColumn.DropDownStyle = Telerik.WinControls.RadDropDownStyle.DropDown;
this.radGridView1.Columns.Add(supplierColumn);
this.radGridView1.CellEditorInitialized += radGridView1_CellEditorInitialized;
}
private void radGridView1_CellEditorInitialized(object sender, GridViewCellEventArgs e)
{
RadDropDownListEditor editor = e.ActiveEditor as RadDropDownListEditor;
if (editor != null)
{
RadDropDownListEditorElement el = editor.EditorElement as RadDropDownListEditorElement;
el.SelectedIndexChanging -= el_SelectedIndexChanging;
el.SelectedIndexChanging += el_SelectedIndexChanging;
el.SelectedIndexChanged -= el_SelectedIndexChanged;
el.SelectedIndexChanged += el_SelectedIndexChanged;
}
}
private void el_SelectedIndexChanged(object sender, Telerik.WinControls.UI.Data.PositionChangedEventArgs e)
{
Console.WriteLine("Changed");
}
private void el_SelectedIndexChanging(object sender, Telerik.WinControls.UI.Data.PositionChangingCancelEventArgs e)
{
e.Cancel = true;
}
private void Form1_Load(object sender, EventArgs e)
{
this.suppliersTableAdapter.Fill(this.nwindDataSet.Suppliers);
}
When the editor is initialized you will notice that the editor's value can be changed by using the mouse wheel no matter that the SelectedIndexChanging event is cancelled.
To reproduce:
1.Add a RadGridView and add twelve columns at design time.
2.Enable filtering and use the following code:
public Form1()
{
InitializeComponent();
radGridView1.MasterTemplate.MultiSelect = true;
}
private void Form1_Load(object sender, EventArgs e)
{
foreach (var column in radGridView1.Columns)
{
column.Width = 100;
}
}
3.When you run the application, click over the filtering cell for the 3rd column. Type in some text and click the filter button. As a result the horizontal scroll bar is positioned at right most.
Workaround:
radGridView1.MouseDown += radGridView1_MouseDown;
radGridView1.TableElement.HScrollBar.ValueChanged += HScrollBar_ValueChanged;
int scrollBarValue = 0;
bool shouldResetValue = false;
private void radGridView1_MouseDown(object sender, MouseEventArgs e)
{
RadElement clickecElement = this.radGridView1.ElementTree.GetElementAtPoint(e.Location);
GridFilterRowElement filterRowElement = clickecElement.FindAncestor<GridFilterRowElement>();
GridNewRowElement newRowElement = clickecElement.FindAncestor<GridNewRowElement>();
if (clickecElement is GridFilterRowElement || clickecElement is GridNewRowElement ||
filterRowElement != null || newRowElement != null)
{
shouldResetValue = true;
}
else
{
shouldResetValue = false;
}
scrollBarValue = this.radGridView1.TableElement.HScrollBar.Value;
}
private void HScrollBar_ValueChanged(object sender, EventArgs e)
{
if (shouldResetValue)
{
this.radGridView1.TableElement.HScrollBar.Value = scrollBarValue;
}
}