Hi
Is there a cell level property using which i can apply formats to a value for a particular cell?
I have grid(dynamic grid using ultradatasource) such that there are predefined formats(e.g. percentage,currency etc) to be applied to values for some cells within a column.
In the forums i can find ways to apply format for a complete column but that is not useful in my case.
Normal 0 false false false EN-US X-NONE X-NONE
TYPE
VALUE
a
<dollar>
b
<percentage>
The best way to solve this problem is to use a DefaultEditorOwner when you create the editor that you assign to the UltraGridColumn.Editor property. This class derives from the class that we use to abstract out the communication layer between the editor and the grid. In your case you would derive a class from DefaultEditorOwner, override the GetFormat method, and pass an instance this derived class into the constructor of the editor you assign to the UltraGridColumn.Editor property.
The signature of the GetFormat method (like most of the virtual methods exposed by this class) contains an 'ownerContext' parameter; this is either the UltraGridCell or a CellUIElement, and if I remember, can also be an UltraGridRow as well, although you can ignore that case and just call the base class implementation. Once you get a context of a cell, you decide what format you want to apply, then assign that format to the out parameter of the same name. In this manner, you can apply a different format to each cell in that column dynamically.
Can you please provide a simple code example for that(vb.net)?
Thanks
Hi,
grakgem said:Thanks for your example but there was no effect when i used it in my project. Any idea why?
The only reason I can think of why this would not work is if you are using a very old version of the controls. Perhaps there's a bug in an older version or maybe the Format on the editor was not supported in some older version and was added later.
grakgem said:Just to make my case clear I am looking for a simple cell level property to format a cell's value,isn't there anything like that in Wingrid?
No, the Format property is on the column, there's no Format property on the Cell, so you have to use an editor. If the field you are working with is read-only and the user cannot edit it, then another option to consider would be to use a CreationFilter and format the text of the UIElement directly. So this would affect the display without affecting the actual value of the cell.
grakgem said: And one more thing the cellchange event is taking a lot of time.It is getting executed while editing also. And using AfterCellChange event is taking even more time. Is there a best practice to use these events?
And one more thing the cellchange event is taking a lot of time.It is getting executed while editing also. And using AfterCellChange event is taking even more time.
Is there a best practice to use these events?
CellChange fires on every keystroke. There is no AfterCellChange event, so I'm not sure which event you mean. AfterCellUpdate, maybe? That event only fires once when the cell edit is committed to the underlying DataSource of the grid. I can't see any reason why either of those events should be taking a lot of time, unless maybe something in the code is causing an exception and you are catching and handling it so you don't see the message.
Mike Saltzman"]The only reason I can think of why this would not work is if you are using a very old version of the controls. Perhaps there's a bug in an older version or maybe the Format on the editor was not supported in some older version and was added later.
we are using ver. 8.3.20083.1009.Does it support this feature?
I just took a look and it looks like I was wrong and this always worked.
But I noticed that the Format and the FormatInfo properties on the column will override the properties on the editor. So be sure you are not setting these properties on the column.
If that still doesn't help, see if you can duplicate the problem in a small sample project and post it here (you can attach a file under the Options tab) and I will be happy to take a look and see why it's not working.
We are not setting the format property at column level.
As we have to apply different formats to different cells,whose row index and column index are dynamically generated,we have created a function using your example which will be called every time we are changing the value of a cell & used the code written in "InitializeRow" event of your example.
But still its not working.Any suggestion?
The attached sample demonsrates how to apply a different format for each cell in a column without assigning a different editor to each cell (that approach is inefficient because if you have lots of cells you will be creating lots of editors). In this example, a column which contains currency values is assigned a custom EmbeddableEditorOwnerBase implementation which overrides the GetFormatInfo method; this is the method the cells use when obtaining the formatting information from the grid.
I've been trying variations of the code posted on this subject in this as well as several other postings without success and have found a caveat (at least in version 10.1) that will keep the format from ever updating. If you ever had a format in the column entered via the editor and remove it, it doesn't actually remove the format line and always overrides what you do with a blank format. I had to delete the line from the designer to get it to work.
Example (from designer):
Before:
ultraGridColumn22.Format = "C2";
After:
ultraGridColumn22.Format = "";
Okay, as long as bPercent is a value based on something in e.Row, then I don't see anything wrong with this code. If you could post a small sample project demonstrating the issue, I would be happy to take a look at it, but otherwise, I don't see any reason why this should not work.
bPercent is set based off a date value on that row. I was setting its value just before the code.
They want all old records to be formatted $ and new records formatted %. I have a record created date in each record.
Sorry I simplified my code because I have to change 4 fields based on this.
I did not get this line included in the example code.
I can mock up an example but it will work sometimes and seems based off lots of data. When it does not format there is no format at all.
What is bPercent here? It looks like you are using some form-level variable to determine which format to use, but that doesn't make sense. You need to use some information on the row itself. Otherwise, you will be assigning formats to the row pretty much at random.
Hello webd,
I am not able to catch what is happening here so could you please wrap this scenario in a small sample project which reproduces the behavior and attach it here.