I do not have any code to show, but using asp.net, vb.net, and SQL with stored procedures.
If on a page I have an item that is added to the database and therefore that information is "saved", is there a way to have an ("exit without saving") button on the page that does away with those changes?
Using infragisitcs ultrawebgrid, you add an item to one table. You can add an item to another table on that page. i assume adding these items to the table automatically saves in the database. There is also a text box but without clicking save I do not believe that those items are actually added to the database. Update panel is used, I don't know if that matters.
If after someone adds to the table but then decides.. oh wait.. I don't want to do this just yet, is there a "one-click" way to act as if I never visited that page to add info? I'm assuming it would be deleting the entries but this would have to be limited to deleting ONLY those items added while making... we don't want people adding info, then going back and deleting once the "save" button has been pushed.
There are a couple of options for handling 'undo,' you can handle it after they save by using markers in your database, or you can cache changes until they hit a 'commit' button that then saves their changes in the database.
Caching changes is the cheaper implementation, but then you can get caught with users who haven't figured out that they're not really saving anything until they take that final step.
Related
I have a web page written in ASP.net where it finds a list of employees, displays them in a listview and allow the user to change different statuses for each employee.
On each row I have employee information like name, date of birth, address and then 4 status fields that are displayed as checkboxes and a comment field where the user can type a comment explaining why they changed a certain status.
Currently in Listview, there is an edit, delete button when they click edit, the checkboxes and text field are displayed the user updates them and click save.
asp.net will do a postback to save the changes for this row and then fetches the data again to refresh the list.
The problem I am having is the list is very large (more than 3000 names), so I am using pagination to show 50 to 100 names on each page. This is still a big performance problem because after every line update a query needs to run to fetch those names again, and with ASP.NET the server is generating the html and passing everything to the browser.
The customer wants the page to be mobile friendly too, so I am thinking to redo the page using Angular on front end with web-api or mvc.net on back end that returns JSON.
My question is there an easy way to do this and allow the user to change the status for multiple employees on the same page at once and then click one submit to update all the changes? if I do it this way, there will be less queries to run and it will be faster for the user because they don't have to wait after every line update.
Any examples will be greatly appreciated, unless there is a different way to implement this, in this case please let me know.
I have a thought that may work.
On load render names and use pagination.
Then use ajax to send the post to server and change data in database.
When editing has returned successful then only change the values that have been edited using javascript for the user to view.
I am developing a ASP.NET 3.5 web site and one of the pages I am building contains a form for which the user is adding names individually and once they have completed this step they move on to the next step, it is when they move to the next step that I want the data collected to be inserted into the database (MS SQL Server 2005) table.
Because the amount of entries will be dynamic I am not sure on what would be the best method for this temporary data collection. I am thinking an arraylist would be easy to work with and have implemented a test with it, but the values are lost on post back.
So my question would be, is the arraylist a suitable solution for the storing of this data and who would I add the data when the user presses the Add button?
UPDATE:
I was able to use sessions, and in the Page_Load sub I added:
If Page.IsPostBack = False Then
Session("recipients") = arrRecipients
Else
arrRecipients = DirectCast(Session("recipients"), ArrayList)
End If
I am not sure if the use of sessions is the best idea (happy to hear peoples thoughts and suggestions for improvement on this one).
Another Alternative to the mentioned list is to use the MultiView control. Show one tab and on button click hide the first tab and show second tab. In the second tab, you can add the submit button that can submit all the controls in both the tabs.
You can add previous button in second tab and to move back to the second tab.
An example for you illustration of MultiView
http://www.tutorialspoint.com/asp.net/asp.net_multi_views.htm
http://www.codeproject.com/Articles/19715/How-to-use-Multiview-Control-in-ASP-NET
I have a question to understand the concept of ASP.NET with each client browser.
I am trying to update the XML on server when a user hits a particular page on my website.
This page is dynamic, but too large so I want it to load using an XML file also I have several drop downs on the page when user changes the value in drop down, I need to refresh the data based upon the selection, additionally my drop down is a custom designed here I do not get and selectedIndex change event.
So I'm using JQuery to get the changed value in my drop down and planning to read XML from jQuery and display the data.
But since the XML is updated on hit of the page on server, I want know, if multiple users hit the same page, will the data displayed as per each users selection or it will mix the data and show the last hits record.
If I'm not mistaken about your question, you basically ask the following:
You have an XML file, which is updated, on some event from user. The page, which is displayed to the user is based on this XML file. What info will users see, when multiple users are working with the application?
This greatly depends on how you are using that file. In general, if you try to write that file to disk each time, users will see the last update. Basically update from the last user.
However, you can synchronize access to this file, write the file on per-user basis and you will see a per-user output:
<data>
<selectedData user="user name">123</selectedData>
<!-- and so on -->
</data>
UPDATE:
For anonymous users this would not work well. However, if you need to store the selection only for the current user, you can use SessionState and not an XML file.
I would like to introduce a new way that it helped me to answer my above question.
What i did here is
on Page load we added all the information related to each section in different hidden fields.
suppose i have three section with my custom drop down!
What exactly we implemented is that on click on my custom drop-down, we separated the values from the hidden field with the separator we entered and displayed the data accordingly, small part of logic but it helped in displaying the data without post back.
and Jquery helps a lot to me for just changing the inner html of my block.
what is the best way of updating to db only the changed rows using gridview?
i have a gridview control that has inline editing and when the user edit the row there are two options "Update" or "Cancel" so user might just click update button without really updating the row...
how can i make sure that, user really changed the row?
I don't use it much but are you sure the GridView doesn't handle that automatically if you are using the built in edit functionality. You could try debugging the OnRowUpdated and OnRowUpdating methods to see if they even get called when save is clicked and nothing has been changed. Even if you don't need them just add them so you can put a break point there to see if they get triggered.
i could not find what i wanted to do so the easiest way of doing this is:
load the data in a object and compare with Equals it works fine in my scenario and the only cons is trip to db which is fine in my case.
I have written an application in ASP.net, that is designed to let the user add records to a database. The page is set up that when a user adds a record, the ID number of the newly added record is set in session, the page Response.Redirects to a "Thank you for submitting" page, then redirects back to the original page to allow further edits. Users can also use the Back button on this screen to go back to the original record adding page, which allows them to make edits to the data.
However, I have found that storing the ID in session isn't a terribly good solution, as a user might try to create two documents in different tabs or windows. I have also tried setting the ID in a literal control, but this causes the problem that when the user uses the Back button, the literal control isn't set to the ID, and new records get added instead of one being edited.
Is there any kind of solution for this?
I'd recommend storing your ID in the QueryString. After the record is added, redirect to your "thankyou" page, which then I am guessing contains a link to the edit form which you will generate with the ID in the querystring. When that link is followed, the edit page shouild pull the ID out of the query string in order to load up the correct record to edit.
Your add and edit form can even be the same page, when an ID is provided in the querystring, your form knows to edit that record, otherwise your form adds a new record.
Silly question, why can the user use the back button to edit the data just accepted in a post?
If the edit previously posted data is a common scenario why not just redirect to a page when the data is accepted that lets them edit it. Then if the hit the back button they would be going back to the original "clean" insert/add new data page.
This would give the following flows
Add->[Post]->Edit->.....
Add->[Post]->Edit->[Back button]->Add->[Post]->Edit->[Post]->Edit....
Have you tried adding the ID in the querystring? Then you could read it, and add it to the session as needed (say on a user clicking the back button).
Seems like a lot of problems allowing editing of an object in a page rendered when using the back button. Would it be too much to give them an edit button instead?
The controls save their state in the ViewState. If you choose to use SessionState instead of ViewState to store the information, then the controls will save their state in the session state and it won't work properly with multiple tabs.
I have not yet found a way to bypass this issue while still using SessionState. Our solution was to use the normal ViewState.
I've tried storing the ID in the querystring (which is mostly fine for editing), but the problem with that is when the information is stored in session for when they use the Back button. If the user does the following:
User creates a record (1st record), the ID is passed along in the querystring, and temporarily stored in session.
User creates another record (2nd record), the ID is passed along in the querystring, temporarily stored in session.
User uses the Back button on the first record to go to the page that doesn't have the querystring.
It's probably a far-fetched scenario, but it's one that may happen. The only solution I have is to block the usage of the Back button to go back to the adding page, by using window.history.forward() in JavaScript. But this as a solution is terrible.
My question for you is why are you storing anything in the session to begin with? If you can avoid storing anything in the session, I think you will be better off altogether.
Having thought about this, does the following sound like a decent solution to the problem I outlined above?
When first adding a record, store a timestamp of when the add page was accessed in a hidden field.
This timestamp is passed through session when the user clicks save. Along with the ID.
If the user opens another tab at the same time and saves, then the new page's timestamp gets passed through session.
If the user tries to access the add page of first record (using the back button), the system looks up session, and sees if there is a timestamp, and whether it matches the one in the hidden field for that page.
If it doesn't match, then the user gets a prompt, and told to edit the record properly.
Does this sound reasonable, or too overly complex?