Page_load filling data after loading UserControl ASP.net - asp.net

I have an aspx Page that contain a userControl that contains textboxes.
in the page_load method, it reads from the database, and i want to fill the textboxes of the usercontrol with the data been read.
the problem i am facing, that the flow of page loading is
Page_Load of the page, where i am assigning the text field, then it page_load of the userControl, so here all the data will be erased, then it will show the page.
how i can fix this.

use OnDataBinding or OnPreRender

in this case, you have to fill the data of UserControl in Page_Init not Page_Load, the problem here will be solved :)

Related

How to bind TextBox from DropdownList in ASP NET without page refresh

I have a dropdownlist control and a text box control in asp.net. dropdownlist is getting data from database. suppose some data are x-ray,USG,MRI and their value are 100,200,300. So if i select x-ray from the dropdown i want it's value 100 binds at the textbox without page refresh. How can i do this??? Please Help.
Using .net, to have something happen on the server side when something is selected from DropDownList, having property AutoPostBack=true is required. This means when you change the SelectedIndex, the page refreshes (postback), then the SelectedIndexChanged event is fired.
Theres a few approaches. In your page_load event, put everything you want to happen on the first page load in If Not IsPostBack Then ... End If block. Then when a PostBack happens, like DropDownList_SelectedIndexChanged, the code in If Not IsPostBack Then won't happen, because it IS a postback.
The above approach still has a page reload, but you can choose what happens when its this type of PostBack page reload. You may have javascript thats re-firing, though...
The second approach would be to have no postback event happen from the dropdownlist, and handle the Binding of the selected item in DropDownList to the TextBox with javascript.

SelectedIndexChanged Event In .ascx UserControl On MasterPage

Please I need someone to help me with this issue:
When I select an item from an .ascx usercontrol 'DropDownList Box' added to a master page with PlaceHolder1.Controls.Add(LoadControl("//UserControls/mycontrol.ascx"));
The .ascx user control disappears after the item has been selected
You don't show your code, so it's hard to provide an exact answer. but probably you add your user control dynamically only one time and it disappears after each postback.
You need to load Usercontrol after each postback so you need to load Usercontrol in something like Page_load method if you don't.

Asp.NET Page Lifecyle: do Event Handlers run before control Databinding events?

I am trying to take advantage of the page lifecycle in Asp.NET so that I don't bind to my datasources more than I actually need to.
This has led to the following problem. I have an ObjectDataSource, GridView, and a button on my page. The button adds a record to the database, which should be picked up by the data source and presented on the Grid. The problem is that the item is not showing up on the gridview until I refresh the page.
I can solve the problem by calling GridView.DataBind() in my button's event handler, but this goes against what I understand about the .NET Page Lifecycle.
Based on this article, the lifecycle should be as follows:
In addition the article states that the Databinding event is "Raised after the control's PreRender event, which occurs after the page's PreRender event."
So, my button click event should fire first, during the Event Handling phase. It should add the record the database.
Next PreRender should be called on the controls.
Finally DataBind should be called on the controls, and the Grid should update to capture the new record.
Yet this doesn't seem to happen. What am I not understanding?
I think the issue is that your viewstate is not enabled on your GridView. This is what I experienced, but then I also had to call DataBind() on the GridView from the page PreRender event if the request was a postback to get the data updated in the GridView on postback.
Edit:
It would help to understand the issue and context better if you could post the source code of your page (aspx + codebehind). How and where do you connect your GridView to your datasource? Statically in markup or dynamically? Do you make any calls to page.DataBind()? ... These things may influence the behaviour of the GridView.

GridView onrowediting event values lost

im working on asp.net with c#, and I have a gridview with textboxes and dropdownlists.
I have data loaded from an sql database into the gridview with the GridView1_RowDataBound.
I have a linkbutton which once is clicked brings the GridView1_RowEditing event, this enables the whole row for editing. But when this happens, all the data for the corresponding row is gone. All the textboxes and dropdownlists have no value.
What can I do, so the values stay on the controls once the RowEditing event is fired?
Be sure that you are not data binding after the control has been loaded. Be sure that you are populating the data for your control only after making sure the page is not being posted.
If Not Page.IsPostBack Then
'Populate control
End If
Otherwise the control data will be reset as viewstate data is loaded on PreInit before the Load event is called.
Also, ensure you have viewstate enabled unless you are repopulating the control data.

Benefit of Binding a GridView in Page_PreRender vs Page_Load?

Assume I have an asp:GridView with some customer information. On that page I also have a button which allows me to add a new user to the GridView. When I add the click the user, I databind the gridview again in the button click. Correct me if I am wrong, but if the asp.net lifecycle or at least part of it is in the following order:
page_load
Hookup event handlers such as my button click
page_preRender
Does this mean that if I put the databinding for the gridview in preRender, that is the only place I need to worry about calling it. I can remove it from the button click. This is what I think, but I am not sure if my thinking is correct, so I would like some more insight as to the benefit of putting code in PreRender as opposed to PageLoad
By PreRender, you assume that most logic in the page that would affect the binding result has been completed (usually in Page_Load, but anywhere earlier really).
Controls in the .Net framework by default do their binding in the PreRender event (makes sense, bind to the datasource at the last possible moment...could be that you changed the data 400 times earlier in the lifecycle). Here's the full layout of the 2.0 lifecycle for reference.
PreRender - Before this event occurs:
The Page object calls EnsureChildControls for each control and for the page.
Each data bound control whose DataSourceID property is set calls its DataBind method. For more information, see Data Binding Events for Data-Bound Controls later in this topic.
The PreRender event occurs for each control on the page. Use the event to make final changes to the contents of the page or its controls.

Resources