Hi,
I have a bounded Ultracombo having following items in the list.
ID Code--------------------1 A 2 B3 Ccombo is binded with a table having two columns, ID and Code. DisplayMember is Code and ValueMember is ID. Whenever we type any data that is not in the list then ValueChanged event is firing twp times. Lets say I typed D in combo then
First time UltraCombo.Value comes as null and second time it comes as the data I typed ( "D" ). This is happening in 9.1 version dlls.In 8.1 version dlls it was working fine ( ValueChanged event was firing only once ). We were using 8.1 dlls and out application was designed to check value null for invalid data. After upgading the dlls all these problems get started.. Its crashing our application..
Are you guys going to fix this bug?
Thanks,Dhananjay
Hi Dhananjay,
I just tested this out in a small sample project and it seems to work fine for me. The event only fires once.
I am attaching the sample I used so that you can try it out and see if you get the same results. If you do, then there's some other factor at work in your application that is causing this. Maybe a property setting or the handling of an event.
If not, then it's probably because I'm usinga newer build than you and you should get the latest service release.
Hi Mike,
Why ultraCombo.Value is coming as invalid data? in earlier version dlls if we type invalid data ( If ValueMember does not match ) then Value was coming null. now its coming as typed invalid data... I think, earlier functionality was correct.. combo.Text should come as Typed text and Value should be null because ValueMember did not match.. Do you guys fix this Or this is new feature...?
ThanksDhananjay
Just to add to this thread, we have also been having exactly the same issue after recently upgrading our Controls to 9.1 (from 6.x).
A lot of our code relied on the fact that the "Value" property would be null when the user decided to free type an entry into the combobox when it didnt exist in the list (so we could determine that it would need to be added to the database as a new item).
Because the "Value" property is now returning the "Text" property we are fairly limited and unsure on what approach to take to resolve the problem (and we need to be cautious with it being a global change affecting all areas of our system).
Initially i thought it would be best posting here to see if any further information had been obtained by anyone on this matter. It would be beneficial if we could determine if this was an intentional change and if it was documented in a specific release (i did an initial search but failed to find anything).
After reviewing our system it would be quite a lot of work to rewrite every instance which is affected by this change to the controls behaviour so im hoping there is an alternative.
Any help or thoughts appreciated.
Regards,
N . Corns
The original behavior of the control was always to return the displayed text as the Value whenever the item does not match an item on the list. It has to be that way, or there would be no way to get the text and whatever the user enters would be lost.
A bug was introduced at some point that changed this behavior so that the control started returning null.
This bug was then fixed and the original behavior was restored to the intended behavior, which is to return the text as the value.
You can use the IsItemInList method to determine if the current value does not exist on the list.
Mike, Mike, Mike... The post was not originally to see why event ValueChanged is raise 2 times?
Here is the stack trace of the first time the event ValueChanged is raise:
Infragistics2.Win.UltraWinEditors.v10.3.dll!Infragistics.Win.UltraWinEditors.TextEditorControlBase.FireValueChanged(System.EventArgs e) + 0x69 bytes
Infragistics2.Win.UltraWinEditors.v10.3.dll!Infragistics.Win.UltraWinEditors.UltraComboEditor.OnValueChanged(System.EventArgs args) + 0x10b bytes
Infragistics2.Win.UltraWinEditors.v10.3.dll!Infragistics.Win.UltraWinEditors.TextEditorControlBase.OnValueChanged(object sender, System.EventArgs args) + 0x11 bytes
Infragistics2.Win.v10.3.dll!Infragistics.Win.EmbeddableEditorBase.RaiseValueChangedEvent() + 0x2b bytes
Infragistics2.Win.v10.3.dll!Infragistics.Win.EditorWithCombo.ProcessAutoComplete(System.Windows.Forms.Keys lastKeyDown) + 0x71e bytes
Infragistics2.Win.v10.3.dll!Infragistics.Win.EditorWithCombo.ProcessTextBoxTextChanged(out bool selectionChangedByAutoEdit = false) + 0x4d bytes
Infragistics2.Win.v10.3.dll!Infragistics.Win.EditorWithCombo.Infragistics.Win.IEmbeddableTextBoxListener.OnTextChanged() + 0xe3 bytes
Infragistics2.Win.v10.3.dll!Infragistics.Win.EmbeddableTextBox.OnTextChanged(System.EventArgs e = {System.EventArgs}) + 0x89 bytes
System.Windows.Forms.dll!System.Windows.Forms.TextBoxBase.WmReflectCommand(ref System.Windows.Forms.Message m) + 0xb1 bytes
System.Windows.Forms.dll!System.Windows.Forms.TextBoxBase.WndProc(ref System.Windows.Forms.Message m) + 0x42 bytes
System.Windows.Forms.dll!System.Windows.Forms.TextBox.WndProc(ref System.Windows.Forms.Message m) + 0x36 bytes
Infragistics2.Win.v10.3.dll!Infragistics.Win.EmbeddableTextBoxWithUIPermissions.WndProc(ref System.Windows.Forms.Message m) + 0x180 bytes
System.Windows.Forms.dll!System.Windows.Forms.Control.ControlNativeWindow.OnMessage(ref System.Windows.Forms.Message m) + 0x13 bytes
System.Windows.Forms.dll!System.Windows.Forms.Control.ControlNativeWindow.WndProc(ref System.Windows.Forms.Message m) + 0x31 bytes
System.Windows.Forms.dll!System.Windows.Forms.NativeWindow.DebuggableCallback(System.IntPtr hWnd, int msg = 8465, System.IntPtr wparam, System.IntPtr lparam) + 0x64 bytes
And here is the second time:
Infragistics2.Win.UltraWinEditors.v10.3.dll!Infragistics.Win.UltraWinEditors.UltraComboEditor.OnValueChanged(System.EventArgs args) + 0x27f bytes
Infragistics2.Win.v10.3.dll!Infragistics.Win.EditorWithCombo.Infragistics.Win.IValueListOwner.OnSelectedItemChanged() + 0x1e7 bytes
Infragistics2.Win.v10.3.dll!Infragistics.Win.ValueList.SelectedIndex.set(int value) + 0x84 bytes
Infragistics2.Win.v10.3.dll!Infragistics.Win.ValueList.Infragistics.Win.IValueList.SelectedItemIndex.set(int value) + 0x5 bytes
Infragistics2.Win.v10.3.dll!Infragistics.Win.EditorWithCombo.OnSuggestModeCloseUp(Infragistics.Win.IFilterableValueList valueList, int selectedIndex) + 0xe bytes
Infragistics2.Win.v10.3.dll!Infragistics.Win.EditorWithCombo.Infragistics.Win.IValueListOwner.OnCloseUp() + 0x1f4 bytes
Infragistics2.Win.v10.3.dll!Infragistics.Win.ValueListDropDown.OnCloseUp(bool closeDropDownManager) + 0x90 bytes
Infragistics2.Win.v10.3.dll!Infragistics.Win.ValueListDropDown.OnDropDownManagerCloseUp(object sender, System.EventArgs e) + 0x10 bytes
Infragistics2.Win.v10.3.dll!Infragistics.Win.DropDownManager.Close() + 0x446 bytes
Infragistics2.Win.v10.3.dll!Infragistics.Win.DropDownManager.InternalCloseDropDown(System.Windows.Forms.Control owner) + 0x13c bytes
Infragistics2.Win.v10.3.dll!Infragistics.Win.DropDownManager.CloseDropDown(System.Windows.Forms.Control owner) + 0x3e bytes
Infragistics2.Win.v10.3.dll!Infragistics.Win.DropDownManager.DelayedCloseUp() + 0x30 bytes
System.Windows.Forms.dll!System.Windows.Forms.Control.InvokeMarshaledCallbackDo(System.Windows.Forms.Control.ThreadMethodEntry tme) + 0x76 bytes
System.Windows.Forms.dll!System.Windows.Forms.Control.InvokeMarshaledCallbackHelper(object obj) + 0x69 bytes
mscorlib.dll!System.Threading.ExecutionContext.runTryCode(object userData) + 0x51 bytes
As you can see, this is not the same stack trace.
I think the reason why the event is raise 2 times instead of one is not a problem in my application; this is a bug in Infragistics.
Any workaround?
I found a reason where the event is raise 2 times:
Here is a sample code:
Public Class Form1
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
For i As Integer = 0 To 10
UltraComboEditor1.Items.Add(i, i.ToString)
Next
UltraComboEditor1.AutoCompleteMode = Infragistics.Win.AutoCompleteMode.SuggestAppend
End Sub
Private Sub UltraComboEditor1_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles UltraComboEditor1.ValueChanged
MsgBox("ValueChanged")
End Class
If you type the value "1" in the combo, the ValueChanged is raise 2 times.
If you remove the line that set the AutoCompleteMode, the ValueChanged is raise one time.
It's a bug in Infragistics.
Sorry, I guess I was thinking about UltraComboEditor. There are no such events on UltraCombo.If you don't need multiple columns in your list, you might want to consider using UltraComboEditor, instead of UltraCombo. I don't think this problem occurred in both controls.
Can't find any Before/AfterExitEditMode events for UltraCombo. Anyway, thanks a lot for the info.
I don't think there's any way to work around this.
You can try using the Before/AfterExitEditMode events.
There is no event that fires when the user is finished typing, because it's impossible for the control to know when they are "finished". You might be able to make use of the Validating event, which will fire when they try to leave the control.
But personally, I doubt that any of these events will help.
Any work around you may think of? I don't think by any chances our company will take the risk to upgrade it to v10.3.
May I know what is the event UltraCombo control fire when it out of the edit mode? Or may I know what is the event fire when user finished entering the text manually in the text box?
Thank you very much.
If the latest service release for 8.2 is not working, then there's nothing we can do. That version is over 3 years old and is no longer being updated.