On postback lose value from dynamically created textbox gridview - asp.net

I dynamically create gridview, and in this grid I have template field also
field.HeaderTemplate = New GridViewTemplate(ListItemType.Header, col.ColumnName)
field.ItemTemplate = New GridViewTemplate(ListItemType.Item, col.ColumnName)
grdEmpty.Columns.Add(bfield)
but when enter some value in text box in this template field i lose value on postback. And also on postback I lose all template field and i must re-create this grid.
My goal is: I have button and i want to add new row in this grid, but i want to have old value also.
I struggle with this all day, and any help is welcome.
Tnx,

Just recreate the grid during each postback. If you have viewstate enabled in the page and the gridview then the property will be restored.
See: here for more explanation

Related

asp.net change cell value on gridview with code behind

I have an asp.net gridview with several rows/pages.
There are some fields below it which display full details of the row which has been clicked on gridview.
I then change a field value on the details below area and the new data is saved programmatically to database.
However the value on the gridview just changed below, doesn't change.
I would like to just change de cell value on the gridview programmatically so there is no need to reload the data grid.
I am basically looking for something like:
GridView1Row.row(currentrow).column(5)="xxxx"
I've search around and found some solutions based on _onrowdatabound but this is not correct, as I just want to change one cell of the grid.
Any ideas ?
The easiest way would be to change the value in your datasource and then binding the datasource to the grid again. (don't reload it from the database just change the value in the datasource)

Update DropDownList control after inserting an item with a detailsview

I have an update panel that includes a dropdownlist control and a detailsview control. The dropdownlist is populated by a sqldatasource control which grabs the data from a table called Places (just a list of venues). The detailsview is insert mode only and inserts places into the database table that populates the dropdownlist. I am trying to allow someone to insert a new place inside the update panel and have the dropdownlist refreshed at the same time so the user will see all places in the dropdownlist, including the one they just added with the details view. Right now, the detailsview is adding the place to the database properly but not updating the dropdownlist. If I refresh the page after adding a new place, the droplist updates with the new place. Any suggestions?
Disclaimer: This answer was posted before any code was posted in the question.
This also assumes both controls are inside the update panel.
In the event handler for Updating or Inserting for your DetailsView control, you need to add the following code:
MyDropDownList.DataBind()
And, worst case scenario, you can do this if the update panel is causing you problems. It's not the greatest performance-wise though.
Response.Redirect(Request.RawURL)

New row in ASP.NET GridView Control

I want to do something really simple, I just can't seem to find the EnableClientAddRow property, so I can set it to true. I have a standard GridView control on a web form. I want a button to appear on the web form. When the user clicks the button, an empty row is added to the GridView UI, so the user can enter data in the appropriate fields. The row will of course, have a "Save" button of some type in one of the columns.
I know this functionality must be in the GridView somewhere, I just can't find it. I did find some odd hacks that try to manually implement this. I'm not really interested in footer manipulations or binding tricks, just the standard add row method.
EDIT:
It appears the GridView does not support adding a row as a first-order operation. This appears to be a serious design flaw.
I typically add a new record to the underlying data source as a part of the "add record" button click action. I then re-bind the view in order to show the blank row.
The new record is typically a DataRow if the GridView is bound to a DataTable, or an object if the GridView is bound to a collection of a particular type. Not sure if that is what you consider a binding trick from your question, but it works well and is quite easy to implement.
Edit - more detail to describe the process:
Add the row to the data source, set the EditItemIndex to the newly added row in order for the row to enter edit mode, then bind the data source to the GridView. Your EditItemTemplate would contain a Cancel and a Save button. Cancel would re-bind the GridView to the underlying data source without the empty row and set EditItemIndex to -1, thereby removing the row from the GridView.
How to easily insert row in GridView with SqlDataSource
If you add a new row to the datasource, even if the row has empty values, and you databind the datasource to the Gridview, it should show up as an editable row just like any of the other rows.

Grid View View state

I'm Using a GridView in my Application.
My GridView has a checkbox column and when the checkbox is clicked, the page is redirected to an other form.
When I return to previous from, nothing comes and GridView data is lost.
I used session and it's working fine, but I want that checkbox which was clicked to also maintain there state.
Is there better method to do this?
Upon redirection to the next page, Iterate your Gridview to update your Datatable with a checked checkbox column and then set that datatable to a session variable. I am assuming that you are already storing your source Datatable to a session.
Sorry, but no other magic work around !!!

Gridview row information disappearing after selectedIndexChanged

I have a master/details setup with a GridView and DetailsView both in UpdatePanels. When the DetailsView is edited and updated, I want these changes to be reflected in the GridView, but without rebinding that data (which could change the selectedItem's sort order among other problems it causes) On DetailsView ItemUpdated I have the following:
' Update Gridview '
ProductsGridView.Rows(selectedIndex).Cells(1).Text = e.NewValues("ProductName")
ProductsGridView.Rows(selectedIndex).Cells(2).Text = e.NewValues("Category")
This works fine when updating, but when a new item is selected in the Gridview, the updated text disappears. Why is this and how can I keep that info? When it is rebound it is fine if it changes position, put until it gets re-bound I would like that data to persist. Thanks.
Answer: It was because the cell's text was not being stored in the viewstate. I added Literal controls to hold the cell's text and updated the literal's text accordingly instead of using the cell's text, like so:
' Update Gridview '
CType(ProductsGridView.Rows(selectedIndex).FindControl("thisLit"), Literal).Text = e.NewValues("SomeValue")
CType(ProductsGridView.Rows(selectedIndex).FindControl("someOtherLit"), Literal).Text = e.NewValues("OtherValue"))
The information is now kept in viewstate and works perfectly =)

Resources