Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   ASP .Net (http://www.velocityreviews.com/forums/f29-asp-net.html)
-   -   DataGrid SortCommand not firing using code-behind?? (http://www.velocityreviews.com/forums/t59031-datagrid-sortcommand-not-firing-using-code-behind.html)

Ken Tucker 07-05-2003 08:01 PM

DataGrid SortCommand not firing using code-behind??
 
I've read about this issue in many articles across the net... But haven't
found a solution. I see all kinds of custom code to perform sorting with
datagrids, but my example is so simple, I must just be missing something.

Basically, I have a .aspx page that is very simple and has a simple
datagrid. All code is in the .cs page for the datagrid (hence, I'm doing all
datagrid work programmatically). The datagrid is populated from a SQL table
and prints just fine in the browser. I can click on any of the headers (for
sorting) but it appears that once clicking, the sortgrid function isn't
firing and I'm getting no results (empty page mostly) back.

I **HAVE** gotten this to work when I move all the datagrid "code" into the
aspx page, but since this is a template I'm using across many pages, I want
to put it all in the code-behind and make it totally dynamic on the calling
page... I refuse to give up and move away from the code-behind. ;)

I have several debug areas in here, one of which just does response.writes,
and another that changes a label so I know what has fired. I never ever get
anything from SortGrid (both response.write and label) to show in the
resulting HTML, so it appears to never get called when a column is clicked
on (resulting from SortCommand, see below).

The problem must lie in this line:
myDataGrid.SortCommand += new DataGridSortCommandEventHandler(SortGrid);
because that's the spot where it tells what to do with the event... But I
can't figure it out for the life of me.

Thanks for any help you can provide.... Links, etc!

-Ken


Here's the code.

****************
kbresults.aspx:
****************

<%@ Page language="c#" Src="kbresults.aspx.cs" Inherits="test.kb"
enableViewState="True" AutoEventWireup="True"%>

<html>
<head></head>

<body>

<form runat="server" id=form1 name=form1>
<asp:DataGrid id="myDataGrid" runat="server"/>
</form>

<asp:Label id=testola Text="Default" runat=server/>

</body>
</html>


****************
kbresults.aspx.cs
****************

using System;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace test
{
public class kb : System.Web.UI.Page
{

public DataGrid myDataGrid;
protected Label testola;
public DataSet ds;

private void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack) BindGrid("");

if (IsPostBack)
{
Response.Write ("PostBack");
}
}

public void BindGrid(string sortField)
{
//debug text
Response.Write ("BindGrid");

//debug label
testola.Text = "BindGrid";

SqlConnection dsConn = new SqlConnection("blah blah");

dsConn.Open();

SqlDataAdapter dsAdapter = new SqlDataAdapter("SELECT blah from blah'",
dsConn);

DataSet ds = new DataSet();
dsAdapter.Fill(ds, "TABLE");

DataView source = new DataView(ds.Tables["TABLE"]);
//source.Sort = sortField;

myDataGrid.DataSource = source;

myDataGrid.AutoGenerateColumns = false;

myDataGrid.AllowSorting = true;
myDataGrid.SortCommand += new DataGridSortCommandEventHandler(SortGrid);

// Add columns
BoundColumn col1 = new BoundColumn();
col1.DataField = "Category";
col1.SortExpression = "Category";
col1.HeaderText = "Category";
myDataGrid.Columns.Add(col1);

BoundColumn col2 = new BoundColumn();
col2.DataField = "ID";
col2.SortExpression = "ID";
col2.HeaderText = "ID";
myDataGrid.Columns.Add(col2);

HyperLinkColumn col3 = new HyperLinkColumn();
col3.DataNavigateUrlField = "ID";
col3.DataNavigateUrlFormatString = "blah.asp";
col3.DataTextField = "Title";
col3.SortExpression = "Title";
col3.HeaderText = "Title";
myDataGrid.Columns.Add(col3);

BoundColumn col4 = new BoundColumn();
col4.DataField = "DateUpdated";
col4.SortExpression = "DateUpdated";
col4.HeaderText = "Date";
myDataGrid.Columns.Add(col4);

BoundColumn col5 = new BoundColumn();
col5.DataField = "EnteredBy";
col5.SortExpression = "EnteredBy";
col5.HeaderText = "Entered By";
myDataGrid.Columns.Add(col5);

myDataGrid.DataBind();
}

protected void SortGrid(Object src, DataGridSortCommandEventArgs e)

{
//debug label
testola.Text = "You sorted";

//BindGrid((string)e.SortExpression);

//debug text
Response.Write ("SortGrid");
}


}
}



Datagrid Girl [MVP] 07-05-2003 09:22 PM

Re: DataGrid SortCommand not firing using code-behind??
 
Hi Ken,
Since you're creating your columns dynamically, try changing this line:

if (!IsPostBack) BindGrid("");

To:
BindGrid("");

Datagrid Girl
http://www.datagridgirl.com

"Ken Tucker" <ken@iit.net> wrote in message
news:i8GNa.43612$926.4506@sccrnsc03...
> I've read about this issue in many articles across the net... But haven't
> found a solution. I see all kinds of custom code to perform sorting with
> datagrids, but my example is so simple, I must just be missing something.
>
> Basically, I have a .aspx page that is very simple and has a simple
> datagrid. All code is in the .cs page for the datagrid (hence, I'm doing

all
> datagrid work programmatically). The datagrid is populated from a SQL

table
> and prints just fine in the browser. I can click on any of the headers

(for
> sorting) but it appears that once clicking, the sortgrid function isn't
> firing and I'm getting no results (empty page mostly) back.
>
> I **HAVE** gotten this to work when I move all the datagrid "code" into

the
> aspx page, but since this is a template I'm using across many pages, I

want
> to put it all in the code-behind and make it totally dynamic on the

calling
> page... I refuse to give up and move away from the code-behind. ;)
>
> I have several debug areas in here, one of which just does

response.writes,
> and another that changes a label so I know what has fired. I never ever

get
> anything from SortGrid (both response.write and label) to show in the
> resulting HTML, so it appears to never get called when a column is clicked
> on (resulting from SortCommand, see below).
>
> The problem must lie in this line:
> myDataGrid.SortCommand += new

DataGridSortCommandEventHandler(SortGrid);
> because that's the spot where it tells what to do with the event... But I
> can't figure it out for the life of me.
>
> Thanks for any help you can provide.... Links, etc!
>
> -Ken
>
>
> Here's the code.
>
> ****************
> kbresults.aspx:
> ****************
>
> <%@ Page language="c#" Src="kbresults.aspx.cs" Inherits="test.kb"
> enableViewState="True" AutoEventWireup="True"%>
>
> <html>
> <head></head>
>
> <body>
>
> <form runat="server" id=form1 name=form1>
> <asp:DataGrid id="myDataGrid" runat="server"/>
> </form>
>
> <asp:Label id=testola Text="Default" runat=server/>
>
> </body>
> </html>
>
>
> ****************
> kbresults.aspx.cs
> ****************
>
> using System;
> using System.Data;
> using System.Data.SqlClient;
> using System.Drawing;
> using System.Web.UI.WebControls;
> using System.Web.UI.HtmlControls;
>
> namespace test
> {
> public class kb : System.Web.UI.Page
> {
>
> public DataGrid myDataGrid;
> protected Label testola;
> public DataSet ds;
>
> private void Page_Load(object sender, EventArgs e)
> {
> if (!IsPostBack) BindGrid("");
>
> if (IsPostBack)
> {
> Response.Write ("PostBack");
> }
> }
>
> public void BindGrid(string sortField)
> {
> //debug text
> Response.Write ("BindGrid");
>
> //debug label
> testola.Text = "BindGrid";
>
> SqlConnection dsConn = new SqlConnection("blah blah");
>
> dsConn.Open();
>
> SqlDataAdapter dsAdapter = new SqlDataAdapter("SELECT blah from blah'",
> dsConn);
>
> DataSet ds = new DataSet();
> dsAdapter.Fill(ds, "TABLE");
>
> DataView source = new DataView(ds.Tables["TABLE"]);
> //source.Sort = sortField;
>
> myDataGrid.DataSource = source;
>
> myDataGrid.AutoGenerateColumns = false;
>
> myDataGrid.AllowSorting = true;
> myDataGrid.SortCommand += new

DataGridSortCommandEventHandler(SortGrid);
>
> // Add columns
> BoundColumn col1 = new BoundColumn();
> col1.DataField = "Category";
> col1.SortExpression = "Category";
> col1.HeaderText = "Category";
> myDataGrid.Columns.Add(col1);
>
> BoundColumn col2 = new BoundColumn();
> col2.DataField = "ID";
> col2.SortExpression = "ID";
> col2.HeaderText = "ID";
> myDataGrid.Columns.Add(col2);
>
> HyperLinkColumn col3 = new HyperLinkColumn();
> col3.DataNavigateUrlField = "ID";
> col3.DataNavigateUrlFormatString = "blah.asp";
> col3.DataTextField = "Title";
> col3.SortExpression = "Title";
> col3.HeaderText = "Title";
> myDataGrid.Columns.Add(col3);
>
> BoundColumn col4 = new BoundColumn();
> col4.DataField = "DateUpdated";
> col4.SortExpression = "DateUpdated";
> col4.HeaderText = "Date";
> myDataGrid.Columns.Add(col4);
>
> BoundColumn col5 = new BoundColumn();
> col5.DataField = "EnteredBy";
> col5.SortExpression = "EnteredBy";
> col5.HeaderText = "Entered By";
> myDataGrid.Columns.Add(col5);
>
> myDataGrid.DataBind();
> }
>
> protected void SortGrid(Object src, DataGridSortCommandEventArgs e)
>
> {
> //debug label
> testola.Text = "You sorted";
>
> //BindGrid((string)e.SortExpression);
>
> //debug text
> Response.Write ("SortGrid");
> }
>
>
> }
> }
>
>




Ken Tucker 07-06-2003 03:59 AM

Re: DataGrid SortCommand not firing using code-behind??
 
Thanks. I'm surprised that works, but it looks like it was just a case of
not really understanding the flow of execution. Now when I sort, it's off by
a click (the first click doesn't sort, the next one sorts on the last
click). I'm close though.

I assumed code would execute immediate at SortGrid, but now that I think
about it, it must start at Page_Load, go through DataGrid, then fire at
SortGrid...

Thanks again for your help.

Ken

"Datagrid Girl [MVP]" <datagridgirl@operamail.com> wrote in message
news:%23$aFJuzQDHA.3144@tk2msftngp13.phx.gbl...
> Hi Ken,
> Since you're creating your columns dynamically, try changing this line:
>
> if (!IsPostBack) BindGrid("");
>
> To:
> BindGrid("");
>
> Datagrid Girl
> http://www.datagridgirl.com
>
> "Ken Tucker" <ken@iit.net> wrote in message
> news:i8GNa.43612$926.4506@sccrnsc03...
> > I've read about this issue in many articles across the net... But

haven't
> > found a solution. I see all kinds of custom code to perform sorting with
> > datagrids, but my example is so simple, I must just be missing

something.
> >
> > Basically, I have a .aspx page that is very simple and has a simple
> > datagrid. All code is in the .cs page for the datagrid (hence, I'm doing

> all
> > datagrid work programmatically). The datagrid is populated from a SQL

> table
> > and prints just fine in the browser. I can click on any of the headers

> (for
> > sorting) but it appears that once clicking, the sortgrid function isn't
> > firing and I'm getting no results (empty page mostly) back.
> >
> > I **HAVE** gotten this to work when I move all the datagrid "code" into

> the
> > aspx page, but since this is a template I'm using across many pages, I

> want
> > to put it all in the code-behind and make it totally dynamic on the

> calling
> > page... I refuse to give up and move away from the code-behind. ;)
> >
> > I have several debug areas in here, one of which just does

> response.writes,
> > and another that changes a label so I know what has fired. I never ever

> get
> > anything from SortGrid (both response.write and label) to show in the
> > resulting HTML, so it appears to never get called when a column is

clicked
> > on (resulting from SortCommand, see below).
> >
> > The problem must lie in this line:
> > myDataGrid.SortCommand += new

> DataGridSortCommandEventHandler(SortGrid);
> > because that's the spot where it tells what to do with the event... But

I
> > can't figure it out for the life of me.
> >
> > Thanks for any help you can provide.... Links, etc!
> >
> > -Ken
> >
> >
> > Here's the code.
> >
> > ****************
> > kbresults.aspx:
> > ****************
> >
> > <%@ Page language="c#" Src="kbresults.aspx.cs" Inherits="test.kb"
> > enableViewState="True" AutoEventWireup="True"%>
> >
> > <html>
> > <head></head>
> >
> > <body>
> >
> > <form runat="server" id=form1 name=form1>
> > <asp:DataGrid id="myDataGrid" runat="server"/>
> > </form>
> >
> > <asp:Label id=testola Text="Default" runat=server/>
> >
> > </body>
> > </html>
> >
> >
> > ****************
> > kbresults.aspx.cs
> > ****************
> >
> > using System;
> > using System.Data;
> > using System.Data.SqlClient;
> > using System.Drawing;
> > using System.Web.UI.WebControls;
> > using System.Web.UI.HtmlControls;
> >
> > namespace test
> > {
> > public class kb : System.Web.UI.Page
> > {
> >
> > public DataGrid myDataGrid;
> > protected Label testola;
> > public DataSet ds;
> >
> > private void Page_Load(object sender, EventArgs e)
> > {
> > if (!IsPostBack) BindGrid("");
> >
> > if (IsPostBack)
> > {
> > Response.Write ("PostBack");
> > }
> > }
> >
> > public void BindGrid(string sortField)
> > {
> > //debug text
> > Response.Write ("BindGrid");
> >
> > //debug label
> > testola.Text = "BindGrid";
> >
> > SqlConnection dsConn = new SqlConnection("blah blah");
> >
> > dsConn.Open();
> >
> > SqlDataAdapter dsAdapter = new SqlDataAdapter("SELECT blah from

blah'",
> > dsConn);
> >
> > DataSet ds = new DataSet();
> > dsAdapter.Fill(ds, "TABLE");
> >
> > DataView source = new DataView(ds.Tables["TABLE"]);
> > //source.Sort = sortField;
> >
> > myDataGrid.DataSource = source;
> >
> > myDataGrid.AutoGenerateColumns = false;
> >
> > myDataGrid.AllowSorting = true;
> > myDataGrid.SortCommand += new

> DataGridSortCommandEventHandler(SortGrid);
> >
> > // Add columns
> > BoundColumn col1 = new BoundColumn();
> > col1.DataField = "Category";
> > col1.SortExpression = "Category";
> > col1.HeaderText = "Category";
> > myDataGrid.Columns.Add(col1);
> >
> > BoundColumn col2 = new BoundColumn();
> > col2.DataField = "ID";
> > col2.SortExpression = "ID";
> > col2.HeaderText = "ID";
> > myDataGrid.Columns.Add(col2);
> >
> > HyperLinkColumn col3 = new HyperLinkColumn();
> > col3.DataNavigateUrlField = "ID";
> > col3.DataNavigateUrlFormatString = "blah.asp";
> > col3.DataTextField = "Title";
> > col3.SortExpression = "Title";
> > col3.HeaderText = "Title";
> > myDataGrid.Columns.Add(col3);
> >
> > BoundColumn col4 = new BoundColumn();
> > col4.DataField = "DateUpdated";
> > col4.SortExpression = "DateUpdated";
> > col4.HeaderText = "Date";
> > myDataGrid.Columns.Add(col4);
> >
> > BoundColumn col5 = new BoundColumn();
> > col5.DataField = "EnteredBy";
> > col5.SortExpression = "EnteredBy";
> > col5.HeaderText = "Entered By";
> > myDataGrid.Columns.Add(col5);
> >
> > myDataGrid.DataBind();
> > }
> >
> > protected void SortGrid(Object src, DataGridSortCommandEventArgs e)
> >
> > {
> > //debug label
> > testola.Text = "You sorted";
> >
> > //BindGrid((string)e.SortExpression);
> >
> > //debug text
> > Response.Write ("SortGrid");
> > }
> >
> >
> > }
> > }
> >
> >

>
>





All times are GMT. The time now is 06:56 AM.

Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.