Current filter:
                                You should refresh the page.
                                Support Center
                                0
                                  • Hi,

                                    my forms have always start parameters. There are filled from the user on start or from another form. These parameters (can be required or not) are used to build a FixedFilterCriteria of a XPServerCollectionSource. This is the master source for the form and is connected to a GridControl. After start I am setting the same param's values in the filter row of the GridView and the GridView.ActiveFilterCriteria to the XPServerCollectionSource.FixedFilterCriteria. Now some questions:

                                    1. How to allow, when user change a field in the filter row and this field is used from XPServerCollectionSource.FixedFilterCriteria, to change XPServerCollectionSource.FixedFilterCriteria and sync it with the GridView.ActiveFilterCriteria?

                                    I have read in the questions here, that you combine both criteria. I have tried with '&', but if there is the same field in both criteria (for sample "part_nr") it is not replaced but added to the where condition.

                                    Best Regards,
                                    Emil Atanasov

                                You must  log in  or  register  to leave comments

                                1 Solution

                                0

                                Hi Emil,

                                As far as I understand, you need to synchronize the XPServerCollectionSource.FixedFilterCriteria with GridView.ActiveFilterCriteria after a user has changed the latter. You can do this in the GridView.ColumnFilterChanged event handler. If I misunderstood your scenario, please describe it in greater detail.

                                Show all comments
                                • Michael Tietz 02.12.2013

                                  And how this answer to the question, which you have written as title? Second opinion, please.

                                • Hi Michael,

                                  From what I gather, you wish to set a changed ActiveFilterCriteria from the grid to the FixedFilterCriteria filter of XPServerCollectionSource. From my point of view, the main difficulty here is to catch the moment when the grid filter was changed. So, I suggest you use the GridView.ColumnFilterChanged event for this purpose.

                                  If this is not the case, would you please send us a project that illustrates what behavior you see currently and describe what behavior you wish to achieve in more detail?

                                • Michael Tietz 02.12.2013

                                  Hi Gosha,

                                  of course I will use the ColumnFilterChanged event, because this is the only event, where I can catch the changes. But this is not difficult. It is difficult to first combine both criteria and then re-sync them with showing the changes in the FilterRow. What you are suggesting is not a solution. Thus I would like a second opinion from a developer, please.

                                  Best Regards,
                                  Emil Atanasov

                                • Hi Emil,

                                  As far as I understand, when a user changes a grid filter, you need to combine it with XpServerCollectionSource.FixedFilterCriteria and then set the resultant filter to XpServerCollectionSource.FixedFilterCriteria and GridView.ActiveFilterCriteria and update the Filter Row to display the filter. I have attached a project to illustrate how to do this. To update the Filter Row, use the GridView.GuessAutoFilterRowValuesFromFilter method.
                                  Please note that not all possible filters can be represented by a corresponding string in the Filter Row.

                                • Michael Tietz 02.13.2013

                                  Hi Gosha,
                                  first, I know about GuessAutoFilterRowValuesFromFilter. Second, start your sample and change two times the filter in the column "Ship Country". The result is in the attachment (using France and Germany). How does this help me? And when we read, what I have written (see above): " I have tried with '&', but if there is the same field in both criteria (for sample "part_nr") it is not replaced but added to the where condition."
                                    And third, is it possible some one other to answer this question? That is what I mean under "second opinion".

                                  Best Regards,
                                  Emil Atansov

                                • Maxim (DevExpress Support) 02.14.2013

                                  Please give us additional time. We will answer you ASAP.

                                • Dear Emil,

                                  I requested that my colleagues look over this thread, including your last post. Just like me, they too were not quite clear about what your last post was stating. No doubt you understand that the precision of our answers depends on the clarity with which our customers present their inquiries.

                                  From what we gather, it looks like you need to merge two criteria: one from XpServerCollectionSource and one from the Grid filter criteria.

                                  For example, if we have the following criteria:

                                  1:
                                  [ID] > 2 && [Name] StartsWith 'k'

                                  2:
                                  [ID] <= 6 && [Country] Equals 'USA'

                                  After applying your operation, you expect to get:

                                  [ID] <= 6 && [Name] StartsWith 'k' && [Country] Equals 'USA'

                                  We don't have built-in functionality to do this. You can achieve this behavior by implementing your own visitor similar to the one illustrated in the How to delete all criteria corresponding to a particular field from CriteriaOperator example. I have attached a project illustrating how this task can be implemented in the case of the FunctionOperator.

                                  If you are going to use other operators, you can easily use similar code in this case. If you encounter any difficulties with this, please post a corresponding post along with a project illustrating the issue.

                                • Michael Tietz 02.15.2013

                                  Dear Gosha,

                                  you wrote in the original question Q474237 (from which you made two other: Q371812 and Q371813): " my colleagues and I provided you with several solutions". OK, let's take your last one. Go in your sample, start it and click the small X button bottom left.

                                  Dear people from the second or third level support,

                                  is it possible when I ask three times for a second opinion, someone other to answer my question. A developer who knows good the components would give me advise in 5 minutes. Let see how many people (time) was involved:
                                  Me - 7 posts,
                                  Goscha - 7 posts,
                                  Oleg - 2 posts,
                                  Maxim - 1 post,
                                  Areg - 1 post

                                  How much time is lost here? Was my question really so ill-defined? May be this was my fault.
                                  However, you can delete all 3 question.

                                  Best Regards,
                                  Emil Atanasov.

                                • Hi Emil,

                                  To resolve the issue with the "Remove Filter" button, handle the case when GridView.ActiveFilterCriteria is null. I modified my project to illustrate how you can do this.

                                  As for "involving a second opinion", while our support system doesn't provide the capability for you to choose a support engineer for your tickets, please note that several members of our support team have been involved in answering your inquiries. Perhaps I could have not split your original inqiury into two threads. I believe, however, that our conversation would be more effective if we understood how the desired behavior should look from the end-user's view point.

                                  I read the How to prevent a filter criteria for a specific field from being removed ticket and found that you wish to achieve the behavior I described and illustrated in my project above. Nevertheless, it is not clear why you are using XpServerCollection source's FixedFilterCriteria. I suggest you consider using a slightly different approach - using only GridView.ActiveFilterCriteria. Like in Oleg's approach, you may check if your predefined criteria already containes the Grid filter in the ColumnFilterChanged event handler. If not, add this criteria. This approach will allow you to skip synchronizing FixedFilterCriteria and ActiveFitlerCriteria, and will prevent the filter from being reset.

                                • Michael Tietz 02.18.2013

                                  Hi Gosha,

                                  have you ever check your answers? The remove filter was a example. Start your sample, and set filters on some fields, delete some others and change one,two. Than open the filter panel and see what you have.

                                     What I've said about second opinion: "developer who knows good the components". You can show me a lot of people, which write here, but does not solve anything.

                                    I am using the "Oleg's approach" since two years. And I need the FixedFilterCriteria because in reality I have more than one pre-condition. This is excerpt from the real code:
                                          public CriteriaOperator GetInputCriteria()
                                          {
                                              lqit = new List<QryInputType>();
                                              int c = (qryHasInputDict == null ? 0 : qryHasInputDict.Count)+(qryHasParentInput != null?1:0)+(qryQBEDict==null?0:qryQBEDict.Count);
                                              if (c > 0)
                                              {
                                                  if (qryHasParentInput != null && qryHasParentInput.ParValue == null)
                                                      return CriteriaOperator.Parse("1=0");

                                                  // Master Key
                                                  if (qryHasParentInput != null)
                                                  {
                                                      lqit.Add(qryHasParentInput);
                                                      gc++;
                                                  }
                                                  // Filter on Start
                                                  if (qryHasInputDict != null)
                                                  {
                                                      foreach (var qit in qryHasInputDict.Values)
                                                          if (qit != null && !ReferenceEquals(qit.QryCriteria, null) && tryToAddInputFilter(lqit,qit))
                                                              gc++;
                                                  }
                                                  // Filter from Query by Example
                                                  if (qryQBEDict != null)
                                                  {

                                                      foreach (var qit in qryQBEDict.Values)
                                                          if (qit != null && !ReferenceEquals(qit.QryCriteria, null) && tryToAddInputFilter(lqit, qit))
                                                              gc++;
                                                  }

                                                  if (lqit.Count > 0)
                                                  {
                                                      CriteriaOperator[] coa = lqit.Select(x => x.QryCriteria).ToArray();
                                                      return GroupOperator.And(coa);
                                                  }

                                              }
                                              return null;
                                          }

                                  I don't know, what I should say more. You continue to write, after I have four times asked for another opinion. I will find alone the solution.
                                    And I will (quotation from you) " kindly request" not to answer me any more.

                                  Emil Atanasov

                                • Hi Emil,

                                  I would like to introduce myself into this discussion. My name is Stan and I am a senior support engineer who is responsible for support service in several different directions including all aspects related to .Net Windows Forms products. While reviewing our correspondence I have noticed that you are often not satisfied with the quality of the support service we provide and often ask to involve developers who created a specific product. I would like to shed some light on the business flow in our company and add positive aspects to our discussion.

                                  When a specific component is being released, a developer who created this component is actively involved in the process of supporting this product and researching customer cases. Each complex ticket (including this one) is thoroughly discussed with a corresponding developer, and a final solution is provided based upon the collective discussion. I can assure you that this particular ticket has been also discussed with our team internally.

                                  While I completely understand your intention to directly contact a developer who created a component, I’m afraid that this is not an option, and we just cannot provide such service. No doubt, you understand that we have thousands of clients and receive more than a thousand of questions per day. The development process would be frozen if each developer would interactively answer questions of our clients. Our engineers have a very strict development schedule and cannot be distracted from it. Moreover, we are not able to force a specific support engineer to answer questions from specific clients as with this approach we will lose the flexibility in our service, which will cause delayed responses. I am sure that such service will be useless for our clients.

                                  On the other hand, each support engineer who works with our clients is an experienced person who has great knowledge of a corresponding component. In fact, an engineer working in our company is not involved in the support process until he/she creates several components and receives feedback about them. This approach gives our support team the most experienced engineers. All support engineers are focused on finding a solution, so we are doing our best to give an acceptable way to introduce a requested functionality.

                                  Emil, I have thoroughly researched all correspondence related to the original thread recently created by you (XPServerCollectionSource.FixedFilterCriteria , GridView.ActiveFilterCriteria and GridView FilterRow) and see that there is a lot of misunderstanding in these tickets. The primary cause of this situation is that our engineers do not see the final behavior you require in terms of the end-user. All of the questions and solutions provided are focused on the way how two properties – FixedFilterCriteria and ActiveFilterCriteria - should be synchronized with each other. We still, however, don’t have a clear understanding why you need to synchronize these properties. The resulting approach looks like you are trying to find a black cat in a dark room. I see that each solution provided has pros and cons. As you noticed, this way of discussion is not productive, takes a lot of time, and doesn’t give expected results. That is why I urge you to clearly describe the expected behavior and the way the end-user would utilize it. Besides elaborating on the required behavior, I would appreciate you describing all issues you see with the provided solution in a step-by-step manner so we clearly understand what exactly is wrong with the suggested approach. I’m almost sure that this will save a lot of time, and you will receive much more precise answers to your questions.

                                  Now, let’s discuss technical details of your task. As you already know, we discussed this approach with our developers and came to the conclusion that this is a rather unusual approach to synchronize the above mentioned properties. As Gosha said in one of his previous posts, this functionality is not supported out-of-the-box. Moreover, there is no easy and universal way to achieve the described behavior. In fact, these two properties should never be mixed because they are designed to be used for completely different purposes. The FixedFilterCriteria property is intended to pre-filter data at the server side level. Though you are already using some kind of synchronization between the UI and this property, it is not designed to be used for such purposes. The pre-filter criteria must not interoperate with the UI. Despite this, the ActiveFilterCriteria property is filled in by the end-user through the UI. The final criteria at each level may be rather complex and contain a lot of combinations that use the same property. As a result, the merge (synchronization) operation may cause a serious inconsistence. I saw that you provided the following example:
                                  1.     FixedFilterCriteria equals “[PartNr] == 123456789 and [OrderDate] > 01.01.2013”
                                  2.     ActiveFilterCriteria equals “[PartNr] = 987654321 and [Store] Like ‘M%’”
                                  The resulting merge operation in this case is obvious and should equal "[PartNr] == 987654321 and [OrderDate] > 01.01.2013 and [Store] LIKE 'M%'"
                                  However, in general, both of the above mentioned criteria can be much more complex, so it will be impossible to combine them. For example, let’s imagine the following criteria:
                                  1.     FixedFilterCriteria equals “([PartNr] == 123456789 and [OrderDate] > 01.01.2013) or ([PartNr] == 234234242 and [OrderDate] < 01.01.2009)”
                                  2.     ActiveFilterCriteria equals “[PartNr] = 987654321 or ([Store] Like ‘M%’ and [PartNr] > 9999999999) or ([OrderDate] > 01.01.2013 and [PartNr] < 9999999999 and [PartNr] >= 888888888”
                                  In this particular situation, as you may notice, there is no straightforward way to merge the above mentioned criteria and create a single one because of ambiguity as to what operator in the source criteria (e.g., FixedFilterCriteria) corresponds to a particular operator in the destination criteria (e.g., ActiveFilterCriteria). In this case, it is only possible to create an algorithm which meets only your particular scenario.

                                  Now let’s discuss solutions provided by my colleagues.
                                  1. Oleg’s approach, which is based upon the ActiveFilterString property processing. This is the simplest approach, which prevents the FixedFilterCriteria from being updated if the filter string contains some predefined fields. The main problem with this approach is that the FixedFilterCriteria is completely reset on each filter changing. With this technique, you may lose the previous value stored in the FixedFilterCriteria property.
                                  2. Gosha’s approach, which is based upon real criteria stored in the ActiveFilterCriteria and FixedFilterCriteria properties. This approach is much more complex, but is also more universal. This is not a real-life example, and, of course, it cannot be used in your application as is, because eventually it is impossible to cover all possible scenarios using any of the techniques above. As Gosha mentioned in one of his answers (see the message from Feb 14), you can achieve this behavior by implementing your own visitor similar to the one illustrated in the provided example. The code sample from this thread simply demonstrates a way to iterate through the CriteriaOperator class and pre-process these criteria. To introduce some custom logic, you may need to implement a much more complex algorithm that meets your requirements.
                                  Nevertheless, all of the above described solutions are not the best, because they try to combine two different criteria based upon some custom logic, which I think is impossible to do in a common scenario. I agree with Gosha that a universal solution here is to introduce an algorithm that will remove the necessity to synchronize these two criteria (ActiveFilterCriteria and FixedFilterCriteria). In other words, criteria stored in the FixedFilterCriteria property should not contain fields that are used in the UI. All such operators should be applied at the UI level. The only case when such intersection may take place is when you need to filter records independently of the condition applied at the UI level. For example, when you need to prevent Order Dates earlier than 1998 from being displayed regardless of the AutoFilterRow’s content.

                                  To conclude I must note that, in my opinion, Gosha is the most experienced engineer in our team. Also, the paradox here is that he is one of engineers who were involved in the XtraGrid’s development process that is related to the filtering mechanism. Just take a look at the code demonstrated in the FindCriteriaHelper.cs and MergeCriteriaHelper.cs units, and you will no doubt realize that it exposes our internal approaches used to pre-process CriteriaOperators. Emil, that is why I urge you against using abusive manner of discussing tasks, and be more friendly and constructive. This will help us serve you even better that we could before.

                                  I hope that my explanation will help you make a proper decision. Nevertheless, I will keep my ears open for you. If you have any thoughts in regard to our support service or are disappointed by specific behavior, do not hesitate to share your feelings with us. We are hear to help you overcome any bottlenecks related to our products.

                                • Michael Tietz 02.19.2013

                                  Hi Stan,

                                  thank you for your response. Of course your developers have to do other things. I do not want a special treatment. It was enough, someone to read the question and to tell me:
                                        "Hey Emil, you cannot mix FixedFilterCriteria and change it in the GridControl, use ActiveFilterCriteria instead. I understand that you want to disable some filters deleting. You can use this and this or implement it alone."
                                    Instead of this I was "kindly requested" to split the question and the meaning is lost and there was endless discussion. Where were I abusive? When I wanted a second opinion? Or may be four times to ask for this? For me, it is normal to hear a second opinion. Two heads thinks better.

                                     Why did I needed it? Because I am using the same engine to dynamic create (populate) not only GridControl, but also DataLayoutControl. (Yes. I know that DataLayoutControl is not designed to work with XPServerCollectionSource). Now I have changed everything to use ActiveFiilterCriteria. But for this, I have to use hidden GridControl behind the DataLayoutControl.

                                  " I have noticed that you are often not satisfied with the quality of the support service we provide "
                                  When I decided to buy your components, that was because of three main reasons. The first is, because I have used your components (still are using) in Delphi and they are beautiful. The second was dynamic loading and the third your DataLayoutControl. But in reality I have used a huge amount of time to make this things work together with I will say "normal" Oracle database. In one schema I have for sample form 600 tables, 25 with more than 1 000 000 rows, 80 with more than 100000, and 160 with above 10000 rows. And this is even not a big schema. You won't want any of this table loaded in memory. I am sure your components are working perfect with XPCollection, but for me this is not a choice. To load dynamically I have to use a component with IListServer interface. And the only one you can edit was XPServerCollectionSource. And the problems begun:

                                    1. We have to set on every table the IDs to be Int32. Your problem was a memory, may be. Now you have at least Int64 too. The normal sequence in Oracle is for Number which goes in System.Decimal.

                                    2. This is a typical sequence of statement (insead of one) issued from XPServerCollectionSource:
                                  a) select * from (select count(*) as F0 from "ERTEST_V80" N0
                                  where (Lower(N0."TL_NR") like :p0)) where RowNum <= 1
                                  b) select * from (select N0."ERTEST_ID" as F0 from "ERTEST_V80" N0
                                  where (Lower(N0."TL_NR") like :p0)
                                  order by N0."ERTEST_ID" asc) where RowNum <= 201
                                  c) select {a lot of fields} from "ERTEST_V80" N0
                                  where N0."ERTEST_ID" in (:p0,:p1,:p2,:p3,:p4,:p5,:p6,:p7,:p8,:p9,:p10,:p11,:p12,:p13,:p14,:p15,:p16,:p17,:p18,:p19,:p20,:p21,:p22,:p23,:p24,:p25,:p26,:p27,:p28,:p29,:p30,:p31,:p32,:p33,:p34,:p35,:p36,:p37,:p38,:p39,:p40,:p41,:p42,:p43,:p44,:p45,:p46,:p47,:p48,:p49,:p50,:p51,:p52,:p53,:p54)

                                  Really. Three statements? And one of them is select count(*). Every Oracle developer will cry. OK, I understand the reason (but don't appreciate this way). I have to make on some places "required" filters. (The reason for this question)

                                  3. You can make Delete and Edit with XPServerCollectionSource, but "Dear Emil" you cannot make Insert. Actually you can but our components are "Not designed" for this. What? OK. I've made it "on my own risk".

                                  4. DataLayoutControl and VGridControl are "not designed" to work with XPServerCollectionSource. I've made this too "on my own risk".

                                  5. There is no simple way to synchronize multiple components. Put a grid, inspector and layout, move with grid, edit in layout and sync all this. I am doing a lot of redundant refreshes.

                                     There is more, but is not the place to discuss them here. For all this to work I spent a lot (A LOT) of time to search ways in your support forum. My code has on hundred places small tips and tricks. See all my question (.net) in the support center. All they are connected with these problem. This was the reason for this question too. What I wanted is a normal work with Oracle.

                                    Our business is to migrate OracleForms applications to .Net. When the client ask me, why is the 20 years old application is faster than this, what I should say. "O but the new one is so beautiful. You have a Valentin theme.". And what should I say when they ask me, why the normal thing in the old application (like in-place insert) cannot be done in the NEW one.

                                     So. If I have abused someone, I am sorry. I did not want it. But you can try to understand me too. My work instead of pleasure is a torture. Actually, I do not want to write here a single line. I want to pay my both subscription, to implement the Business Logic in my applications, your components to work perfectly and don't to think about them.

                                  Best Regards,
                                  Emil Atanasov

                                  (P.S. You can make the question private, because I cannot change it)

                                • Hi Emil,

                                  Thank you for your valuable response. I completely understand your frustration, and that is why I started this discussion. I have to admit that our components are not ideal, and there are always a lot of improvements that can be introduced into software regardless of the amount of time that has already been spent to develop it. Emil, no doubts you understand that it is almost impossible to create a universal component that would meet all possible requirements.

                                  Particularly the Server Mode feature is designed to bring rows from tables that contain a huge number of records. This feature however was created to operate only with our grids and it is not intended to be used with the LayoutControl. In case of the LayoutControl, it is supposed that the developer should implement a data loading mechanism. E.g. a specific row can be loaded using a usual ADO.Net. This approach will work pretty fast, because there will be only a few records that should be loaded per request. Generally, it is enough to load only a single record from the database without using Server Mode at all. If you decide to use DataLayoutControl, the proper solution is to manually load data without using Server Mode. The primary purpose of Server Mode is to provide dynamic data loading relatively to complex features like scrolling, grouping, summaries. Neither of these features are provided by the XtraLayoutControl and, consequently, the ServerMode is useless in this case.

                                  Another thing that confuses me is why you need to place LayoutControl over the grid. Why do you need to preserve the grid in the invisible state and for which purpose are you going to use it? This looks like a wrong way to achieve some functionality. Perhaps the best way for you would be to utilize the LayoutView that works similar to LayoutControl, but this component is a part of XtraGrid. I am not completely sure about this suggestion, because your scenario is not quite clear.

                                  I would like to refrain from discussing all the technical aspects in this message. I just agree that there are some limitations and rules that may look inconsistent at first glance, and you will probably need to write additional code to implement specific behavior. Instead, let me focus on the way our engineers work with customer tasks. Even if a specific functionality cannot be changed, we are always focused on a solution. I believe that if our engineer understands the real scenario and the problem a customer is experiencing, he will provide an appropriate solution that will operate correctly. That is why the best way to receive the most effective solution from our team is to clearly explain the use case.

                                  Emil, I was probably too harsh by saying “abuse”, I apologize for that. I am sure that no one is trying to abuse anyone here. I just meant that asking for the second opinion may be treated like an unwillingness to follow suggestions provided by our team. Though I completely agree that it is normal to hear the second opinion, this is not always an option in case of the support service. I believe that you will understand this if you imagine the whole process. Involving an additional engineer into a specific discussion requires him to completely research the task, understand the problem and spend a considerable time to find a solution. This often means that the amount of required resources is unreasonably doubled. This makes other clients wait for their answers longer than usual, which in its turn affects the quality of our service in whole. That is why at present we do not provide the capability to discuss a particular problem with several engineers.
                                  We are currently considering the capability to introduce a new kind of support service allowing a particular support engineer to work with a specific client. This, however, is only in our plans, and I cannot guarantee that we will provide such service in the near future.

                                  I would like to add a few words about the original thread (XPServerCollectionSource.FixedFilterCriteria , GridView.ActiveFilterCriteria and GridView FilterRow). I see that you feel uncomfortable about the fact that Gosha split your message and this broke the meaning of your task. Indeed, after re-reading several tickets, I now realize that they are related to the same functionality. However, at first glance it is rather difficult to understand that these two questions are related to each other, because they look completely unrelated. IMHO, the first one is more related to the data processing business logic, while the second one is related to applying some constraints at the UI level. These tasks look completely different to me. On the other hand we are constantly trying to create separate tickets for each unrelated technical question asked by a customer. This approach allows us to avoid a muddle in the discussion that may occur in case there are a lot of questions and there is something unclear in the answer. As you may realize, because of this weird misunderstanding our team was on the wrong track, and I apologize for this.

                                  If you still have any unanswered or unresolved questions, please do not hesitate to reactivate the corresponding support ticket and write your comments there. We will do our best to give you a prompt solution.

                                • Michael Tietz 02.20.2013

                                  Hi Stan,

                                  thank you very much for your response.

                                  What I have done is to use some "templates" (actually four of them), with which I am making more than 300 hundred forms per application. The whole business logic is in the database and everything visual is in .ini files. To achieve this, I am generating on the fly XPO objects, columns in grids with the necessary editors (some of them are deseriallized from a dictionary), items in a DataLayoutControls with the editors, rows in VGridControls and series in Charts. Because of the dynamic loading and everything to use the same logic I am using XPServerCollectionSources (based on generated XPOs), which I am synchronize on fly.
                                    
                                  Why I use DataLayoutControl and not the LayoutView in GridControl? How I said, all visual things are in an .ini file. To be possible this Layout,Grids,Inspectors layouts to be done from people which does not know C#(VisualStudio), all the layouting is done on run time "mode". DataLayoutControl has (or at least has had before 2 years) better run time editing. This was the reason. And now we have more than 70 "Layouts", which I cannot transfer automatically to the LayoutView (I have asked for this, but this does not exists). And this is a lot of work to layouting 100 fields on tabs in the LayoutControl. And I tell you, to make all this (and some more) to work is not easy :)

                                  The reason to do this, was to speed migrating from OracleForms to .Net for our clients. The second reason is that our main product is a sort of dictionary combined with analyzers in which is stored information from a lot of sources. From there I am getting information for "on the fly" generations. We want to sell the "templates" as part of our product to other ISVs who do migrations like ours. (Of course they should by DevExpress and some other components ).

                                  Now you know everything :) .
                                  Regards

                                  Hi Gosha,

                                  I am very sorry for what happened. I did not want to insult you. This was, from my side, not the right way to discuss questions. Thank you for your patience. Piece?

                                  Best Regards,
                                  Emil Atanasov

                                • Hello Emil,
                                  Unfortunately, Stan has been ill, but he is eager to reply to you once he returns. We appreciate your patience.

                                • Hi Emil,

                                  I've just taken a rest, and I'm now ready to continue discussing the above mentioned tasks with you. I greatly appreciate your intention to share your experience with us and I'm really happy that we are almost on the same page right now.

                                  After re-reading your last message, I realize that most likely a lot of issues you found with our Server Mode + XPO technologies appeared because these components are used in rather specific scenarios. No doubt you understand this too. Our developers did not realize that you decided to utilize this software this way. I understand that your decision is based upon the easiest, in your opinion, way to achieve a specific functionality. However, to be frank, the easiest way isn't always optimal, and as you already noticed, may lead serious drawbacks.

                                  As for the XtraGrid's LayoutView component, this component is based upon the LayoutControl. I am almost sure that it can be properly adjusted at runtime. Emil, though I realize how much work is required to go in this direction, I still think that this is the best way to sort these issues out. In any case, the final decision is up to you.

                                  I would like to say a few things about the DataLayoutControl used with a Server Mode collection. In spite of the fact that I do not know all the details of your implementation, I can imagine the only correct way to perform synchronization - manually load the required object from the Server Mode collection, populate another collection with these objects and finally, link the newly created collection to the DataLayoutControl. This approach however, is not quite correct in my opinion. I do not recommend you use it, because in Server Mode, objects are loaded as packages (about a hundred objects per request). This approach is optimal when working with grid, but it useless for a container that displays only a single object at the same time. If you don't need to display several records at once (don't require a hidden grid for UI), I strongly recommend against using Server Mode and loading objects manually. If you however, need to display the Grid, and for example, switch the Grid's and the LayoutControl's visibility depending on some scenario, I think the best way to achieve this goal is to display a simple LayoutControl over the grid when necessary. The approach should be similar to the one demonstrated in the "Layout Detail" sample that is included in the XtraGrid demos.

                                  I'll pass your last sentence to Gosha. I'd like to assure you, at no time do we desire any confrontation with our clients. Our primary intention is to deliver the service to our customers in the most efficient manner. And on behalf of our team, I apologize that in this particular situation we weren't able to give you outstanding service.

                                  Thanks,
                                  Stan

                                • Michael Tietz 03.05.2013

                                  Hi Stan,

                                  I hope you are well now.
                                  Thank you for your understanding and patience. I will try to change some of the implementations. We will continue to use DevExpress components, because they are the best on the market (I can speak for WinForms) and because of the outstanding support. Thank you.

                                  Best Regards,
                                  Emil Atanasov

                                • Hi Emil,

                                  Thank you for your compliments, I greatly appreciate them. Please do not hesitate to contact us in case of any issues related to our products. We would be happy to assist you at any time.

                                You must  log in  or  register  to leave comments

                                To start a chat you should create a support ticket


                                If you need additional product information, write to us at info@devexpress.com or call us at +1 (818) 844-3383

                                FOLLOW US

                                DevExpress engineers feature-complete Presentation Controls, IDE Productivity Tools, Business Application Frameworks, and Reporting Systems for Visual Studio, along with high-performance HTML JS Mobile Frameworks for developers targeting iOS, Android and Windows Phone. Whether using WPF, Silverlight, ASP.NET, WinForms, HTML5 or Windows 8, DevExpress tools help you build and deliver your best in the shortest time possible.

                                Copyright © 1998-2014 Developer Express Inc.
                                All trademarks or registered trademarks are property of their respective owners