Asp.net - Refactor To Design Pattern: Displaying/hiding Different Combinations Of Controls Based On State?
May 26, 2009
Assume you have controls A, B, C, D and E all with a Visibility property. You also have states 1,2,3,4,5 and 6 in which various combinations of your controls would be displayed. Currently this is being handled by switch statements for each state: i.e.
Select Case PageState
case "1"
a.visible = false
b.visible = true
[code]....
As you can imagine, this becomes a pain as every state needs a show/hide statement for each control. How can I refactor this so that adding controls and/or states becomes trivial?My first instinct is to extend the control and add a collection of states that it should display for but this sounds like overkill.
Edit:I was deliberately vague in my question in case this has other implications. In my current instance the "controls" in question are ASP Panels. Does that change anything?
I am trying to setup an SSN Masked TextBox, the mask i selected for the field is 999-99-9999 When the field has no info the mask pattern shows in it, i would like to hide it and display it only upon info entry, meaning the user will enter the first 3 digits and then '-' will appear, will enter 2 more digits and then the second '-' will appear.
Using VB.Net, I'm looking for best practices in dealing with the following idiom:[code]What I really want is something VB.Net doesn't offer -- additional and simultaneous iterators on For Each statements.[code]I'm interested in both Linq and non-Linq recommendations, comments about Copy method design, comparisions to C# or other languages.
I am working on a parser for a serial data protocol. I have an overarching Packet class, a couple sub-classes such as CommandPacket and StatusPacket, and then a few sub-classes of each of those:
[Code]..
While I don't think it is entirely relelvant to the discussion, I am doing this in VB.NET. There is also a similar (but not quite the same) question posted here: Java - subclass validation design pattern
I've been studying design patterns off-and-on now for a project I've recently been working on. I've been fortunate with this last one not to have to work with databases, but will soon have an opportunity.
I'm trying to replicate a design pattern used in a graphical programming language called LabVIEW. One thread produces commands, and another thread, or series of threads, consumes the commands.This is very similar to using Queues in VB...but there doesn't seem to be an easy way to start the consumer thread when new items are added to the queue.
Here is what I would like to accomplish, please let me know if there is a straightforward way to accomplish this with out of box .Net functionality.1) Start the Consumer Thread...it sits idle, waiting for some new commands to appear in its Queue.2) Producer places a few commands into the Queue. Example: "Home X Axis", "Home Y Axis", "Initialize Pump", "Display Ready Message"3) Consumer thread 'wakes up' at seeing the new commands, then performs the 4 tasks specified in 2.4) Consumer thread goes 'idle' again, and simply waits for new commands to appear in the Queue.
Process can continue on and on forever. The main problem I see with Queues is that there is no 'Wait for Something to Appear in Queue then Retrieve it" functionality. I don't want to use a perpetual loop to keep checking ever n milliseconds.
With C# anonymous delegates, we can avoid declaration of extra method, I know in VB.NET they're not available, but is there a design pattern that I can use so that I can avoid writing an extra method each time? I need it for SPSecurity.RunWithElevatedPrivileges which will be used a lot of times in our code.
Public Sub Control1Updated() Handles control1.TextChanged control2.Text = SomeFunction(control1.Text) End Sub
[code]....
Basically the pairs of {control1.Text, control2.Text} and {control2.Text, control1.Text} should be the same. If control1.Text is changed to let's say "a" then control2.Text is ALWAYS "b". If control2.Text is changed to "b" then control1.Text is ALWAYS "a". How do I achieve this with events without going into an infinite loop? [the best I can think of is to make a check if the other control.Text is already the desired value].
In the MVC design pattern we must use a controller(s) classes.
What are the fucntions (features) of the controller apart from handling communication bewteen Model and View?e.eg; can we include input validation code in the controller?
In teh MVC design pattern, Controller is strongly related to the view (GUI). IN my application i need to generated a new BrandID, i used stored procedure to retreive the highest BrandID from teh DB (The model calls the stored procedure and sends the retreival value to the Controller), then in the controller increments the BrandID by "1" to create a new brand ID. SInce, controller is strogly related to "view", should i include this "brandID increment" part in teh controller or in the model classes?
I have a winform which allows people to edit data from a database, to simplify things assume there is a Customer table in database with 3 fields - Name, City, Country. Through winform(s) people can Add/Edit/Delete customers.For each of these actions we need to save:
What the field names are (Name,City,Country in this case)What the field values were before they were modified What the field values are after they are modified.If the action is Add or Delete then 2 and 3 will be the same.I have already implemented this using XMLSerialisation (but not using any of the design patterns) and my XML output looks like this.
The solution can handle different areas of the system with different number of fields (i.e the same thing works when you are modifying Products for instance).is there a well defined design pattern to deal with this kind of behavior?
having difficulty with understanding object lifetime / instantiation.I have a windows from with a datagridview and a panel. The datagridview has a checkbox column and a list of names which is populated from a database.The panel has a few text boxes (e.g. name, age, favourite sports team) and a 'save changes' button.
The idea is that when the user selects a person in the datagridview by checking the appropriate checkbox then the panel shows the relevant data for that person (name, age, fav sports team) by pulling the data from a database. If the user would like to update the person's details they can do so by typing in the textboxes and then clicking the 'save changes' button. All quite simple so far.
The way I have designed this is to have a 'panel' class and to create an instance when the user checks a checkbox.(NB - the reason I have created a 'panel' class is that I intend to replicate the datagridview and panel on other tabpages within my form and thought it would be useful to have a generic 'panel' class that I could re-use.)
My code looks a bit like this:
If CheckBoxClicked Then Dim UpdatePanel As New UpdatePanel(MyForm.NameTextBox, MyForm.AgeTextBox, MyForm.FavSportTeamTextBox, MyForm.SaveButton) UpdatePanel.GetData() ...
When the user clicks the SaveButton the data is updated to the database and I have a display message (simple textbox) which says "Update successful" and displays for 5 seconds before hiding itself.
Here is the problem:Suppose a user checks a checkbox, reviews the data and does not make any changes, and then checks another checkbox and decides to update the data by clicking the 'save changes' button. What happens is that the "Update successful" message is displayed twice.
I think this is because every time the user checks a checkbox an instance of UpdatePanel is created. If a I select five different people using the checkboxes and then hit 'save changes' I get five "Update successful" messages.
I am not sure how to overcome this. It feels like each time a checkbox is clicked I need to check if an instance of UpdatePanel exists and then destroy it. I tried using UpdatePanel = Nothing and also investigated IDisposable and GC.Collect() but with no luck.
I am using the "Adobe Acrobat 7.0 Browser Control Type Library 1.0" control to view PDF's in my vb.net application. I want it to show just the PDF with no menus and toolbars.
I have used the following code: AxAcroPDF1.LoadFile("C:ShippingForm.pdf") AxAcroPDF1.src = "C:ShippingForm.pdf" AxAcroPDF1.setShowToolbar(False) AxAcroPDF1.setView("fitH") AxAcroPDF1.setLayoutMode("SinglePage") AxAcroPDF1.setShowScrollbars(False) AxAcroPDF1.Show()
I am still getting the Navigation Panel on the left side of the panel. Does anybody have information on which method would disable this or maybe a list of all the methods?
One of the problems that I constantly see with Winforms applications is that the GUI thread is stuck while a long-running task is running or just plain stops refreshing (yes, I know - needs threading). Is there a code template/design pattern I can use when reacting to mouse clicks or button presses? Should there be a processing thread always running in the GUI app? Basically, how do I write a great Winforms Application that is easy to maintain and doesn't have any quirky refresh bugs?
In VB.NET, I have a LinkButton that, when clicked, creates a report. We want to disable this functionality based on whom is logged into the system. I have a session variable to indicate whether this should be visible or not but when I set idLinkButton.visible = False, it has no effect. Any ideas on what I need to do to be able to turn this on and off?
I have a bunch of controls on my form and am wondering if I can hide some so it doesn't look so cluttered.I only wnt to hide them on the designer though and not at runtime. Any way to do this?
I've implemented the Event Based Async Pattern for the first time in a relatively complex class. I'm having some doubts about if I've done it as it should be done, and if there are no better approaches. One of the things that make me frown the most is how I'm currently handling all the cross thread events. This class contains a decent amount of events, about 20. What I've done is created a dictionary in which I have a list of callbacks, one for each event. The keys are a value of an enum containing all keys I created. In the underneath line, eventDelegates is the dictionary, and delegates is the enum.
Before I build my own and after looking for quite a while (to no avai) does any one know of a function that will return the dates of a recurrence.
For instance:
- The recurrence might be the first Monday of each month.
- The second week of each month.
So what I want is to pass the recurrence information to the function and it will return in an array all the dates that are applicable.I've looked at some other topics here but none are as comprehensive as what I need.
I've been building controls for many years professionally and personally, but even back in VB6 days I just could not work this out. After all this time I remembered about it again.If I create a usercontrol/containercontrol and add one or more controls to the controls surface, I just cannot figure out how to access the controls at design time.
I have a form that searches a db. Some searches will always result in one row of data, others might return multiple rows. I want to have the data from a single row shown in text boxes and the multiple rows show in a datagridview is it possible to hide/show those depending on the amount of rows.
basically i have a form with loads of controls. So many infact it stretches the whole hieght of my screen.I only need half these showing since the rest are just a sort of 'log'I have seen ti done loads, that only the controls i want to show at start up are displayed then when some one hits a little button in the bottem it expands the rest leaving them showing to.
I'd like to design a Winform with expanding controls if that 's overly complicated. The idea is that I would have rows of information, each with an "Expand" button. On pressing the button, the rows underneath the selected row would move down and the controls that are associated with the selected row (some textboxes/ dropdowns etc) would appear. Vice versa when you click the "Hide" button.
I'm having a weird bug with a TabControl that I've never seen before. Here's what I got:
A TabControl with 3 tabs. The first 2 tabs have an inherited DGV on them, and the third page is like a options page. The 3rd tab has a bunch of labels, comboboxes, checkboxes etc...
Whenever I play/start debuggings/run the app the controls of the 3rd page turn "invisible" on the design view. They are still shown in the app. Here are two pictures showing what I mean:
This is what the designer looks like BEFORE I run it: This is what the designer looks like AFTER I run it (Running app on the right): I've tried building/rebuilding/cleaning and nothing. If I close the solution and VS and reopen it, it will show but that's a pain to deal with.
I have a list of movie names in a list view. The user clicks a button and the posters and names are displayed instead. I want to be able to change it back to the list again. The problem I am facing is the size of the rows stay the same as the pictures when there not even there, the text alignment isnt fully to the left either. Is there a way to return the listview to its original state?
Is there a way to iteratively reference an ASP.NET control based on it's name pattern? Perhaps by a "pointer" or something?What I have are a large set of comboboxes (each with an associated DropDownList and TextBox control). The DropDownList always has an item selected by default, but the use may wish to submit a NULL value. I come up with the following code to handle three cases: NULL, Existing Item, New Item.
'TextBoxControl & DropDownListControl should iteratively reference their ' respective TextBox & DropDownList controls by the actual control name
[code]....
The problem is, with so many comboboxes, I could easily end up with hundreds of lines of code. I wish to handle this in a more dynamic way, but I do not know if it is possible to reference controls in this way. Say I wanted to reference all the TextBox Controls and DropDownList Controls, respectively.
I can do string formatting with a given naming pattern to generate a name ID for any of the controls because they are all named with the same pattern. For example by attaching a specific suffix, say "_tb" for TextBox Controls and "_ddl" for DropDownList Controls:
Can this sort of thing be done in VB? Ultimately, my goal is to take the value entered/selected by the user, if any, and send it to a stored procedure on SQL Server for insertion into the database.
I just want to repeat a code block if a CheckBox it's checked...So, i'm very novice to programing in Visual Basic and i'm learning by myself doing little things like a Ping Tool.I have this code:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Label1.Text = ""
I want to store true or false value based on the state of check box here is my insert statement, the problem is this this insert statement stores 1 or 0 instead of 1 or 0 i want to store true or false how to achieve this. [code]
Im having odd problems with how my form is displaying at runtime...if you look at the 2 attachments you can see at runtime the labels disappear under the check box's, but at design time they are positioned perfectly.
I created a control so that I can add label, txtbox and checkbox during runtime. I was able to do this successfully but after this, I need to get the state of this checkboxes every time the user check it, RUNTIME.[code]...