Forms Data Controls :: Gridview Custom Header Disappears On Postback
Jun 1, 2010
I have a datarepeater inside which I load a gridview. After the grid's binding is done I create an extra header line to group the columns (that's the only way I could do it, I couldn't figure a way to add an event for a control inside the repeater).That works fine and the page displays perfectly.However everytime I do a postback from other controls, I lose the 2nd header and 1 extra empty line appears at the top of the gridview
I have a page with a TextBox, a Button, a GridView, and a SqlDataSource. I click the Button to execute the SQL in the TextBox using the SqlDataSource. The SqlDataSource populates the GridView. Everything works as expected until I click a column heading to sort.
When I click a column heading, the GridView disappears and I have to click the Button to display the grid again. When I do, the grid is displayed in the order of the column I clicked.
I don't understand why the GridView is disappearing when I click a column header.
Does anyone know how to fix this so the GridView is sorted and displayed only by clicking the column header?
I have a gridview where in the users are allowed to edit certain data and there is an update on top of the page which will send out all the changes made inside the GridView. But, the problem is , as soon as the update button is clicked, the grid disappearsand no update is made. This problem occurs when the size of the data on the page is huge. When we have less amount of data on the gridview, It does update. But, when there is a huge amount of data on the gridview, it does not. We have tried to increase the page size on the server, but to no use.
Scenario: I have a Gridview where I want to handle the Sorting in a custom control that I've added to the header. I've added this control to my GridView's Header via OnRowCreate event handling. I want the Sort Expressions to persist session to session (via Webparts Personalization)
Here is what I have for adding the custom header control to the GridView Header
[Code]....
This works out well for adding the control, but I can't get anything to persist because these controls are creating initially via postback (per the event) and re-created on all subsequent postbacks. I can't add an If(!IsPostback) because the controls are initially created on the gridview's postback (well at least thats how it's acting when I put it in there) If I were to add this control via the ASP page, not via the Codebehind, I would be able to persist the control. If I try to treat it as though everything is setup correctly, and assign my custom control's controls to [Personalizable], I get a runtime error telling me that I can only have webpartzones in or before Page_init (I'm guessing this is due to when/where the gridview hits the OnRowCreate event). If there is some fundimental logic I'm missing, or best practices that I'm moving away from,
have an ASP.net 4.0 page containing a GridView, where during the Page_Init event I'm dynamically adding BoundField columns to the gridview. I also have some custom sorting and paging methods that I use with this gridview, which result in postbacks on the page. In Chrome, Firefox, Safari, and Opera the gridview behaves as expected. HOWEVER, in IE 6, 7, or 8 when I click to sort a column in the gridview, or go to the next page of results in the gridview, it does not bind on postback, returning nothing back to the browser. Again, in anything but Internet Explorer, paging and sorting (frankly any postback event) brings back the gridview in its expected state. I only have the problem in IE. Relevant snippets of my code follow, where you'll see my Page_Init event calling a method in my WebFunctions class to add the BoundField columns for the table I pass to it, and my Page_Load event that calls the method in the user control responsible for binding my dataset to the gridview. Initial page load works in all browsers, but postback loading of the gridview only works in non-IE browsers.
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls;
[code]....
my data in gridview4 disappears when i click add to cart it shows no data  again i have to pass a query from gridview 3 and then gridview 4 appears and then again if i click on add to cart in gridview 4 it shows no data.
It happened to add an extra Gridveiw Header in row_databound event , It did worked fine on !Postback but disappered on Page.Postback . Quick google search guided me to move the event to Row_Created event and every thing is okay .
Can any expert post some pointers , differnces between grid row_created vs row_databount with some sample table data created dynamically behaviour of both the events in !Postback and page.Postback .
I use Server.Transfer("pagename", True) to navigate from a page where two dates have been selected to a page with a gridview that uses the dates to query the database and display the results. The gridview initially displays correctly but when I operate the select or sort it disappears.
I am populating a column in a gridview with a dropdownlist as follows:
[Code].... [Code]....
When I edit the gridrow, the dropdown is there and I can select a new item.
But I can't find the dropdown during the rowupdated event. The cell control says it's a Textbox. All of the other items in the row are fine and I can get the data back. But I can't get the DropDown item.
Here are some of the things I have tried in the RowUpdating event:
DropDownList test = (DropDownList)e.FindControl("ddlPeriod"); //null DropDownList ddl = (DropDownList)GridView1.Rows[e.RowIndex].FindControl("ddlPeriod"); //Also null var test = row.Cells[8].Controls[0]; //Says its a textbox.
I have created a custom gridview that show "Select All | Clear All" hyper links in header to select the checkboxes in the gridview. That means that I have added these two hyperlink controls to the gridview header and am not showing the actual column headers.
[Code]....
Now, I want to remove the border that is displayed on the header row. How can I remove it? I tried th.BorderStyle = BorderStyle.None; but it didn't work. I need gridlines in the data rows but the header row should not have any border.
I have created a custom gridview that show "Select All | Clear All" hyper links in header to select the checkboxes in the gridview. That means that I have added these two hyperlink controls to the gridview header and am not showing the actual column headers.
[Code]....
Now, I want to remove the border that is displayed on the header row. How can I remove it? I tried th.BorderStyle = BorderStyle.None; but it didn't work. I need gridlines in the data rows but the header row should not have any border.
I have a gridview with daatsource from MembershipUserCollection. When my collection doesn't contain any records the gridview just disappears. I want to display the empty gridview indicating no records exist rather than the grid just become invisible.
i have a gridview bound to sql datasource with template fields binding the columns. I have set the Header Style to a css class. I have 3 columns not bound to data as Add, Edit and Delete. When I set the text color to white for the header only the non bound columns go white. The bound columns are BLUE like hyperlink. Any one know a way round this. (If I set the style in the gridview the all columns are white. Want to set in external css file).
I have a small problem I am returning some data from a query and have allowed paging, however when I click on the next button to view the following page the gridview disappears.
My datasource is specified in the code behind:
<asp:Panel ID="dtpanel" runat="server" Visible="False"> <asp:GridView ID="grddetails" runat="server" AutoGenerateColumns="False" AllowPaging="True" OnPageIndexChanging="grddetails_SelectedIndexChanged" ViewStateMode="Enabled" onselectedindexchanged="grddetails_SelectedIndexChanged" AllowSorting="True" > <Columns> <asp:BoundField DataField="Col1" HeaderText="Col1" SortExpression="Col1" /> <asp:BoundField DataField="Col2" HeaderText="Col2" SortExpression="Col2" /> <asp:BoundField DataField="Col3" HeaderText="Col3" SortExpression="Col3" /> <asp:BoundField DataField="Col4" HeaderText="Col4" SortExpression="Col4" /> <asp:BoundField DataField="Col5" HeaderText="Col5" SortExpression="Col5" /> <asp:BoundField DataField="Col6" HeaderText="Col6" SortExpression="Col6" /> </Columns> </asp:GridView> </asp:Panel> using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Data; using System.Data.SqlClient; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void GridView2_SelectedIndexChanged(object sender, GridViewCommandEventArgs e) { int y = Convert.ToInt32(e.CommandArgument); Control control = GridView2.Rows[y].Cells[0].Controls[0]; LinkButton btn = control as LinkButton; string qval = btn.Text; string query = "SELECT * FROM Table WHERE Col LIKE '%" + qval + "%'"; string connectionString = @"Data Source=servername;Initial Catalog=dbname;Integrated Security=True"; SqlConnection accessConnection = new SqlConnection(connectionString); SqlCommand accessCommand = new SqlCommand(query, accessConnection); SqlDataAdapter grddetailsDataAdapter = new SqlDataAdapter(accessCommand); DataTable grddetailsDataTable = new DataTable("Table"); grddetailsDataAdapter.Fill(grddetailsDataTable); int dataTableRowCount = grddetailsDataTable.Rows.Count; if (dataTableRowCount > 0) { grddetails.DataSource = grddetailsDataTable; grddetails.DataBind(); } dtpanel.Visible = true; } protected void GridView1_SelectedIndexChanged(object sender, GridViewCommandEventArgs e) { int w = Convert.ToInt32(e.CommandArgument); Control control = GridView1.Rows[w].Cells[0].Controls[0]; LinkButton btn = control as LinkButton; string qval2 = btn.Text; Label1.Text = btn.Text; string query = "SELECT * FROM Table WHERE Col LIKE '%" + qval2 + "%'"; string connectionString = @"Data Source=servername;Initial Catalog=dbname;Integrated Security=True"; SqlConnection accessConnection = new SqlConnection(connectionString); SqlCommand accessCommand = new SqlCommand(query, accessConnection); SqlDataAdapter grddetailsDataAdapter = new SqlDataAdapter(accessCommand); DataTable grddetailsDataTable = new DataTable("Table"); grddetailsDataAdapter.Fill(grddetailsDataTable); grddetails.DataSource = grddetailsDataTable; grddetails.DataBind(); dtpanel.Visible = true; } protected void grddetails_SelectedIndexChanged(object sender, GridViewPageEventArgs e) { DataTable dataTable = grddetails.DataSource as DataTable; grddetails.PageIndex = e.NewPageIndex; grddetails.DataBind(); dtpanel.Visible = true; } }