Forms Data Controls :: DetailsView EmptyDataTemplate After Insert Defaults To Empty Insert Screen
Jan 27, 2010
In my detailsview, I have an emptydatatemplate set up to allow users to enter new records. The code works. However, once the record is inserted, the detailsview defaults to a standard insert screen. I know this will cause confusion for the users. I would prefer the detailsview to either show in edit mode or a read-only mode. I have used detailsview.changemode and detailsview.currentmode in the custom sub created for the add new button of the emptydatatemplate- neither of which do what I was hoping. It would be even better if when there was no data, it defaulted to the insert screen (which seems like that should be an easy, no-brainer way for .net to function) but it doesn't. Or, I don't know how to accomplish it.
I don't want to force the user to click cancel after inserting an item through the emptydatatemplate just to be able to use the detailsview for other records.
I have a problem with DetailsView linked with Database, DetailsView is Insert/Edit enabled, and adding/ediditng data works, however........ when I add a new record (DetailsView in Insert mode) and press INSET instead going to record I have just created in Read-Only Mode it shows me blank form, it looks that the "linking" field is null.
There is user selected search criteria used to display both a FormView (Invoice header information such as ship_id, vendor, date, store, etc...) and cooresponding GridviewDetails (product details such as upc, description, unit cost, qty ordered, qty received, etc...) There is a one to many relationship between 1 invoice (formview) and many product details (gridview). I need to add the ability to insert product details to a particular invoice (ship_id is the link between the 2 tables) if an invoice currently doesn't have any. I have the emptydatatemplate programmed with dropdownlists and textboxes to capture the user entered information along with a submit button. However the insert doesn't occur.
I know the problem is how I am (incorrectly) using the findcontrol, but for the life of me I can't seem to find the correct syntax (been searching the forums for nearly a weeks implementing different syntax and testing to no avail!)
I have successfully implemented the ability to insert a new row using the footertemplate and was banking on some of that code to assist me with the insert of new details in the emptydatetemplate. Grrrrr....still not working. Below is the current version of the test page programming.
Code behind for the OnClick button in the emptydatatemplate "submit": (note: I know at least part of the problem is in how I am attempting to find the controls. Here is where I can not find a syntax that works and I have tried several dozen versions...)
GridviewDetails EmptyDataTemplate programming is below:
I've also included my entire GridViewDetails programming just in case it helps to read what it is that I am trying to do:
And here's the entire code behind that I have so far to make everything else function as desired:
I am using 1 textbox with a Ajax Calendar extender to allow my user's to select a date graphically (exp: 12/15/2009). I have another textbox for the hour and minutes in military time(exp: 15:30). I think i have the code to grab the data from the 2 textbox's and combine them to be inserted into the field (exp: 12/15/2009 15:30). Here is my insert code for the Field:
However unless I make all the fields Nullable the insert fails, on top of that none of the other field that I have selected on the Detailsview Insert or Edit are inserted into there fields. Half of my fields have to be non-null values. So how do I fix this?
I can supply additional vb code and the aspx code if needed.
This is the error I'm getting: Cannot insert the value NULL into column 'Operation_type', table '/GAOSDB.MDF.dbo.BC_Perf_Log'; column does not allow nulls. INSERT fails. The statement has been terminated.'
This is the first non-null column.
I need to get this figured out because I have 30 other web pages that will be utilizing the same approach.
Getting the message that ObjectDataSource ... count not find a non-generic method ... that has parameters ... The parameter list is fine until I get to the very end and it list the two data fields that are in my DetailsView. Using the ASP Tutorial #17 (Examining the Events Associated with Inserting, Updating, and Deleting) and the Exploring the Data Modification - specifically the one showing the INSERT of the Product Name and UnitPrice. ASPX page is pretty simple and attempting something similar, two fields to insert a new record - update the other fields later.
Full Error Message follows along with ASPX and the AsignaturasBLL.cs. Interesting thing is that when I swap the two fields in the DetailView, then the last two fields in the error message are swapped. In the error message I bolded these two fields.
Is it possible to code DetailsView to go to the new record I've just insertted? Currently it appears to default to the first record, utlimatly I'd like it sorted Last name, first name and upon an Insert it should go to that new record on pageload.
I am using DetailsView to INSERT new records. I have a field "Paid Date"(date) that needs to be pre-populated with the current date. 90% of the time, the user will use the default date, however, there are times when the user will need to change the data as needed. I want to add this default in the code-behind. I DO NOT want to use template item.
I figure that this should be relatively straightforward, but I still can't get it to work. I have a gridview and a detailsview to set up shifts for students and teachers. I would like to be able to insert new shifts using a detailsview. I will limit the students, teachers and location to items that are in a dropdownlist. The problem is that when I handle the iteminserting event. the e.values collection doesn't contain all of the fields I want to populate. How do I add the new fields to the list. This is my codebehind:
Sub On_Inserting(ByVal sender As Object, ByVal e As DetailsViewInsertEventArgs)
I have a dropdownlist in the edititemtemplate of a detailsview. The dropdownlist is bound with an objectdatasource. The detailsview is bound to a seperate objectdatasource which connects it to the insert method. When the page loads the dropdownlist is bound properly. However, when I make a selection and select insert I get the following error: Could not find a property named 'DeptID' on the type specified by the DataObjectTypeName property in ObjectDataSource 'objCurrentProduct'. I've tried to remove the SelectedValue='<%# Bind("DeptID") %> attribute. I can then insert without an exception being thrown but the selected value of the dropdown is not recognized. Here is the code:
Scenario : I have two database tables with one to many relationship. eg:- City and Related news. So I have a gridview(Gridview1) which lists out all the cities and allows edit, delete of the gridview rows. Now since i wanted to display all news for the city, i have a nested gridview as a column in this Gridview1. This nested gridview displays all the news for the cities. And I have edit, delete buttons for this gridview too - So far, good - works fine.
Now what I would like to do is - To insert a new news item for a city. For this, I attached a detailsview to my nested grid(gridview2), and tried to insert. I need the primary key id of city table from the first grid (gridview1) to insert the news into the second database table and I could not access this value from the parent gridview. My gridview1 does not have datakeyname, it is programatically bound.
Also, When the gridview/detailsview is nested, it does not get listed in the event-handler list. So I cannot use say, detailsview1_iteminserting. I do not how to add this event handler
Has anybody done anything similar? When I started, it looked like a pretty straightforward thing - There must be some way to do this. But I just can't get it to work. How do you usually insert into the child table in a one-to-many relationship? Should i just be using two separate gridviews?
I'm inserting data into a SQL database through a detailsview. When a user inserts an incorrect data type or leaves a required field blank it shoots off to a big error screen. Is there a control that I can use that will allow it to give an error (with a little star or something) that says which field is incorrect without the big error screen?
How do I set the value of a field in a detailsview to the selectedvalue of a gridview on the same page? I am also trying to set today date as value of another field in the detailsview as well as UserID. I wrote the following codebehind for the date setting:
TextBox tb = (TextBox)DetailsView2.FindControl("TextBoxCreDate"); tb.Text=System.DateTime.Now.ToShortDateString(); TextBoxCreDate is a template field in my DetailsView.
Unfortunately, I get a Object reference not set to an instance of an object. Error message.
My web form contains a detailsview control that I have added a templated field to with a DropDownList in the InsertItemTemplate. The DetailsView default mode is 'insert. My detailsview is attached to a sqldatasource that has a stored procedure in the db to handle the insert. When I enter data in the fields and select insert all values from the detailsview are written to the table except for the selection that was made in the dropdownlist. I am using the ddl.selecteditem.value to populate my variable however when the insert method is envoked it doesn't send my value. The DDL value that I am capturing does not need to be written to the table it is just a flag for some variables that need to be set at the stored proc level. How do I get the DDL selected value to be sent with the insert statement?
Here is my code behind:
Protected Sub DropDownList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Dim temp As DropDownList Dim AccessLevel As String temp = AddUserDetailsView.FindControl("DropDownList1")End Sub AccessLevel = temp.SelectedItem.Value Label1.Text = AccessLevel
I guess I'm not sure exactly how or where to do what I need.
First off - here's what I need - - when the user clicks on the NEW button in the detailsView, I have the User.Identity.name captured in a variable and I need to set one of the textboxes (InsertItemTemplate) named 'txtNew' to that name.
I've tried using the ModeChanging (and ModeChanged) event: Dim dv As TextBox = CType(DetailsView1.FindControl("txtNew"), TextBox) If (e.NewMode = DetailsViewMode.Insert) Then ....
However, no matter what, 'dv' always shows as 'Nothing', so I can't change the text of it.
GirdView and DetailsView in defautl.aspx. When i insert a new record using detailsview it works and gridview is updated. But i want jump to the right page in gridview after importing the record. How can i highlight the new row imported record in Girdview. I use ajax so gridview and detailsview are in updatepanel.
This would seem to be quite a trivial task, however I am having trouble retrieving the identity of the record inserted using the detailsview.insert() in the code behind. It would seem that detailsview.DataKey.Value would contain this value, but it is null after the insert is performed.
A TemplateField of a DetailsView can be assigned a value easily at any of many event handlers such as Load, PreRender, etc. when the page is loaded. However, after Insert or Cancel is clicked, all the fields are cleared. I cannot figure out how to assign a value to the field again in code-behind.