Forms Data Controls :: GridView Disappears When Click A Column Header To Sort?
Jul 28, 2010
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 several grid views indide div's, and when I click the Sort header on an open div the div collapses and no sort happens. I believe it is just reloading the entire page but when I surround PageLoad with !ISPostBack then the page redraws as blank. Since the sort script is generated by the GV, I don't know how to stop it from creating side effects.
Here's my code:
<script type="text/javascript" language="javascript"> function toggleDisplay(id) { var obj = document.getElementById(id); obj.style.display = (obj.style.display == "none") ? "" : "none"; return false; // cancel the href } </script>
If the grid column is clicked to sort i dont want to retireve data agian, i can get it from viewstate, but i dont know if that triggered the post back or if the ImageButton on the page triggered it
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 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 gridview which I am trying to be able to sort by clicking the column header. Currently, I have the column header underlined by turning the 'allow sorting' function to TRUE, but when I click the column header, it does nothing.
Is this a good method for displaying a soricon? or are there better ways of doing it;
[URL]
Also when the gridview is first loaded its sorted by a "Date Submitted" field which is sorted on the data source (stored procedure) is there any way of showing the icon then so people know that it is sorted by "Date Submitted" at the moment the icon only shows when someone re-sorts the grid.
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; } }
Is there a way to Sort a Gridview by a Calculated Column? I have a gridview with template fields using lablels and a linq datasource. Those columns sort just fine. I can not get the Calculated column to sort, because there is no sort expression to use...
i have a gridview that has the ability to sort by each of the columns, but suppose if i'm on page 2 of the results and sort any of the columns, it jumps back to page 1. is there a way to keep it on page 2, still have the sorted date work?
I have been struggling with this problem for a long time. Does anyone have any clue about this problem? I created a gridview and set the allowsorting to true. This gridview has four columns: Name, Position, StartDate, and EndDate. I want the gridview to be sorted on the EndDate.
Inside of the save event, I called the BindGrid() function to rebind the datasource to the gridview. The changes will shown immediately, but the problem is that the records are not sorting on EndDate. I have to refresh the page manually to get the view sorted.
Just spent about 8 hours googling and looking through this forum for a solution on how to make sure that I can dynamically sort. Here is the situation.
I have 1 Gridview that displays 10 different scenarios based on what button is clicked.
I am also returning only top 10 records. I am doing all of the data binding pragmatically. So I have BoundFields, HyperLinkFields etc.
I also want to sort some records. When I change DataSource SQL statement the gridview somehow remembers what the last sort value was and it errors out saying that value "x" cannot be sorted because it does not exists.
Here I get an error that says that the data source does not support sorting? Doesnt it say gridview1.allowsorting = false;
I also tried gridview1.sort("", SortDirection.Ascending); This does nothin... except query my database one more time because i have a onSorting event that looks like this:
[Code]....
Here is an example of just one of those SLQ statements inside GetSQLQuery:
I have a merged column of firstname and lastname by "Select firstname + lastname from table" but when it appears in the gridview the header text of the column is "Expr1000". How can I change the header text of that merged column?, and I want to change its text into "NAME".
I want if the header of a particular column contains a word "S", the header and row turns red. I used following code to make header red and it works fine. How to make it such that the rows also turn red if condition is met ? I cannot hardcode in columns since the Gridview is autogenerate colums as data structure keeps changing.
Protected Sub GridView1_DataBound(ByVal sender As Object, ByVal e As System.EventArgs)Dim HeaderRow As GridViewRow = GridView1.HeaderRowFor Each c As TableCell In HeaderRow.CellsIf c.Text.EndsWith("S") Then c.BackColor = Drawing.Color.OrangeRed End If Next End Sub