We use cookies to give you the best experience on our website. If you continue to browse, then you agree to our privacy policy and cookie policy. Image for the cookie policy date

DoubleEdit


I am try to set a cell to be a double edit box showing only 2 decimal places, but when i begin to edit i would like the end user to enter more than 2 decimal places. Trying to change the cell back to a TextBox seem to cause a crash. Is there a way to achieve this behavior with the DoubleEdit?

//causes crash expecting DoubleEdit
void Model_QueryCellInfo(object sender, GridQueryCellInfoEventArgs e)
{
if (e.Cell == CurrentCell.CellRowColumnIndex)
{
Model[e.Cell.RowIndex, e.Cell.ColumnIndex].CellType = "TextBox";
}
else
{
Model[e.Cell.RowIndex, e.Cell.ColumnIndex].CellType = "DoubleEdit";
Model[e.Cell.RowIndex, e.Cell.ColumnIndex].NumberFormat = new NumberFormatInfo { NumberGroupSeparator = ",", NumberDecimalSeparator = ".", NumberDecimalDigits = 2 };
}
e.Style.CellValue = _dataSource[e.Cell.RowIndex, e.Cell.ColumnIndex];
}


//remains a DoubleEdit
void Model_QueryCellInfo(object sender, GridQueryCellInfoEventArgs e)
{
if (e.Cell == CurrentCell.CellRowColumnIndex && CurrentCell.IsInBeginEdit)
{
Model[e.Cell.RowIndex, e.Cell.ColumnIndex].CellType = "TextBox";
}
else
{
Model[e.Cell.RowIndex, e.Cell.ColumnIndex].CellType = "DoubleEdit";
Model[e.Cell.RowIndex, e.Cell.ColumnIndex].NumberFormat = new NumberFormatInfo { NumberGroupSeparator = ",", NumberDecimalSeparator = ".", NumberDecimalDigits = 2 };
}
e.Style.CellValue = _dataSource[e.Cell.RowIndex, e.Cell.ColumnIndex];
}

5 Replies

MS Mohamed Suhaib Fahad A. Syncfusion Team June 9, 2009 09:45 AM UTC

Hi Andrew,

The DoubleEdit works with the NumberFormat that you set, so if your NumberFormat says it has "3" decimal digits, you simply set the NumberFormat.NumberDecimalDigits property, and it should automatically get applied to the DoubleEdit cell type.

Regarding the crash, Can you please post the Stack trace that you get, this should help discover the cause of the issue.

Please let me know if you want any more details.

Thanks,
Fahad
Grid.WPF Team
Syncfusion Inc.,


AS Andrew Snyder June 9, 2009 12:53 PM UTC

The crash happens when i try to get into edit mode.

An unhandled exception of type 'System.InvalidCastException' occurred in Syncfusion.Grid.Wpf.dll

Additional information: CurrentCellUIElement should be of type DoubleTextBox

> Syncfusion.Grid.Wpf.dll!Syncfusion.Windows.Controls.Grid.GridCellRendererBase.CurrentCellUIElement.set(System.Windows.UIElement value = {System.Windows.Controls.TextBox: 1.2222}) Line 204 C#
Syncfusion.Grid.Wpf.dll!Syncfusion.Windows.Controls.Grid.GridCellRendererBase.SetCurrentCellState(Syncfusion.Windows.Controls.Grid.GridControlBase gridControl = {DataWindow.SampleGridControl}, Syncfusion.Windows.Controls.Cells.RowColumnIndex cellRowColumnIndex = {RowColumnPosition { RowIndex = 2, ColumnIndex = 2}}, Syncfusion.Windows.Controls.Grid.GridActivateCurrentCellOptions options = {Syncfusion.Windows.Controls.Grid.GridActivateCurrentCellOptions}) Line 220 + 0x1e bytes C#
Syncfusion.Grid.Wpf.dll!Syncfusion.Windows.Controls.Grid.GridVirtualizingCellRenderer.RefreshContent() Line 184 + 0x44 bytes C#
Syncfusion.Grid.Wpf.dll!Syncfusion.Windows.Controls.Grid.GridCellNumericEditBaseCellRenderer.RefreshContent() Line 174 + 0x8 bytes C#
Syncfusion.Grid.Wpf.dll!Syncfusion.Windows.Controls.Grid.GridCurrentCell.CreateCurrentCellUIElements() Line 669 + 0xc bytes C#
Syncfusion.Grid.Wpf.dll!Syncfusion.Windows.Controls.Grid.GridCurrentCell.BeginEdit(bool focusCellUIElement = true) Line 733 + 0xe bytes C#
Syncfusion.Grid.Wpf.dll!Syncfusion.Windows.Controls.Grid.GridSelectCellsMouseController.MouseDown(Syncfusion.Windows.Controls.Scroll.MouseControllerEventArgs e = {Syncfusion.Windows.Controls.Scroll.MouseControllerEventArgs}) Line 852 + 0x20 bytes C#
Syncfusion.GridCommon.WPF.dll!Syncfusion.Windows.Controls.Scroll.MouseControllerDispatcher.MouseDown(System.Windows.Input.MouseButtonEventArgs e = {System.Windows.Input.MouseButtonEventArgs}, bool isPreview = false) Line 715 + 0x1d bytes C#
Syncfusion.GridCommon.WPF.dll!Syncfusion.Windows.Controls.Scroll.MouseControllerDispatcher.OnMouseDown(System.Windows.Input.MouseButtonEventArgs e = {System.Windows.Input.MouseButtonEventArgs}) Line 573 + 0xd bytes C#
Syncfusion.GridCommon.WPF.dll!Syncfusion.Windows.Controls.Scroll.MouseEventTargetCollection.OnMouseDown(System.Windows.Input.MouseButtonEventArgs e = {System.Windows.Input.MouseButtonEventArgs}) Line 53 + 0xc bytes C#
Syncfusion.GridCommon.WPF.dll!Syncfusion.Windows.Controls.Scroll.ScrollControl.OnMouseDown(System.Windows.Input.MouseButtonEventArgs e = {System.Windows.Input.MouseButtonEventArgs}) Line 1228 + 0x13 bytes C#




As for the second example why can i not change the box back to a text box when i am going into edit mode?

if (e.Cell == CurrentCell.CellRowColumnIndex && CurrentCell.IsInBeginEdit)
{
Model[e.Cell.RowIndex, e.Cell.ColumnIndex].CellType = "TextBox";
}


MS Mohamed Suhaib Fahad A. Syncfusion Team June 9, 2009 01:29 PM UTC

Hi Andrew,

Thanks for the details provided. The Grid maintains a CurrentCell state internally so that everything is in sync. When you try to change the active cell's CellType, that exception gets thrown. Best way would be to set change the active cell's CellType after you call this method,

this.grid.CurrentCell.Deactivate();

This method will reset the CurrentCell's state and the exception will not be thrown. Le t me know if this helps you out.

Thanks,
Fahad
Grid.WPF Team
Syncfusion Inc.,


AS Andrew Snyder June 9, 2009 03:27 PM UTC

I have tried:
CurrentCell.Deactivate();
Model[e.Cell.RowIndex, e.Cell.ColumnIndex].CellType = "TextBox";

but then an exception is thrown when i try to begin editing:
Object reference not set to an instance of an object.
> Syncfusion.Grid.Wpf.dll!Syncfusion.Windows.Controls.Grid.GridCurrentCell.BeginEdit(bool focusCellUIElement = true) Line 734 + 0x7 bytes C# Syncfusion.Grid.Wpf.dll!Syncfusion.Windows.Controls.Grid.GridSelectCellsMouseController.MouseDown(Syncfusion.Windows.Controls.Scroll.MouseControllerEventArgs e = {Syncfusion.Windows.Controls.Scroll.MouseControllerEventArgs}) Line 852 + 0x20 bytes C# Syncfusion.GridCommon.WPF.dll!Syncfusion.Windows.Controls.Scroll.MouseControllerDispatcher.MouseDown(System.Windows.Input.MouseButtonEventArgs e = {System.Windows.Input.MouseButtonEventArgs}, bool isPreview = false) Line 715 + 0x1d bytes C# Syncfusion.GridCommon.WPF.dll!Syncfusion.Windows.Controls.Scroll.MouseControllerDispatcher.OnMouseDown(System.Windows.Input.MouseButtonEventArgs e = {System.Windows.Input.MouseButtonEventArgs}) Line 573 + 0xd bytes C# Syncfusion.GridCommon.WPF.dll!Syncfusion.Windows.Controls.Scroll.MouseEventTargetCollection.OnMouseDown(System.Windows.Input.MouseButtonEventArgs e = {System.Windows.Input.MouseButtonEventArgs}) Line 53 + 0xc bytes C# Syncfusion.GridCommon.WPF.dll!Syncfusion.Windows.Controls.Scroll.ScrollControl.OnMouseDown(System.Windows.Input.MouseButtonEventArgs e = {System.Windows.Input.MouseButtonEventArgs}) Line 1228 + 0x13 bytes C#


so i then tried

CurrentCell.Deactivate();
Model[e.Cell.RowIndex, e.Cell.ColumnIndex].CellType = "TextBox";
CurrentCell.Activate(e.Cell, new GridActivateCurrentCellOptions(GridSetCurrentCellOptions.ForceRefresh));

but the value does not appear in the text box and it will not let me edit





MS Mohamed Suhaib Fahad A. Syncfusion Team June 10, 2009 03:39 PM UTC

Hi Andrew,

The exceptions are getting thrown because of improper typing at runtime. Changing the CellType at runtime will actually cause some abnormal behavior in the work flow of the grid, and so it is not advisable to do that.

As per your initial requirements, I have a sample prepared that will have NumberDecimalDigits set to 2 before showing the original values, and uses a TextBox control. Since the DoubleEdit control doesn't have a feature to allow any number of decimal spaces, because it uses the NumberFormatInfo, I guess using a text box would be easy. But, doing this will actually remove all the functionalities that the DoubleEdit provides.

www.syncfusion.com/development/uploads/82280_6_10.zip

More appropriate would be that you set some max decimal digits for the DoubleEdit and override the OnRender method (as in the sample) and simply render out the result value with '2' decimal digits.

Please check it out and let me know if that helps you out.

Thanks,
Fahad
Grid.WPF Team
Syncfusion Inc.,

Loader.
Live Chat Icon For mobile
Up arrow icon