DataGrid control events like Sort, page, Item not getting fired...

G

Gunjan Garg

Hello All,

I am working to create a generic datagrid which accepts a
datasource(ListData - This is our own datatype) and depending on the calling
program customizes itself for sorting, paginantion or accepting the add and
remove item events.

What i am observing is that none of the vents are happening... (Sort, page,
or item). I am sure I am missing something basic here... Need help... Thanks
much

Guns
www.goondemand.com
----------------------------------------------------------------------------
--------------------------
<%@ Control Language="C#" %>
<%@ import Namespace="goondemand.framework" %>
<%@ import Namespace="goondemand.framework.types" %>
<%@ import Namespace="goondemand.ui.util" %>
<%@ import Namespace="System.Data" %>
<script runat="server">
// private elements

private String accesskey="";
private String addbuttontext="+";
private String align = "left";
private bool allowsorting=false;
private bool allowpaging=false;
private String classname = "grid-body-default";
private int colspan=0;
private bool displayrownumber=false;
private bool editable=false;
private String evenrowcolor = "White";
private String headertext="";
private bool hideborder=true;
private ListData listdata;
private String nextpagetext="Next";
private String oddrowcolor = "WhiteSmoke";
private int pagesize=10;
private String pagestyle="Numeric";
private String prevpagetext="Prev";
private String removebuttontext = "-";
private bool rowtag = false;
private String rownumberlabel="S_No";
private bool showaddbutton=true;
private bool showremovebutton = true;
private bool showheader=true;
private bool showfooter=false;
private int spacesfromleft = GlobalConfig.SPACESFROMLEFT;
private String tooltip="";
private int width = 0;
private bool visible=true;

// implementation elemnts
private String sortfield="";
private bool ascending=true;
private String selectedsortfield;
private ArrayList hyperlinkcolumns = new ArrayList();
private ArrayList navigatetoURL = new ArrayList();
private ArrayList sortablecolumns = new ArrayList();
private ArrayList invisiblecolumns = new ArrayList();
private int itemtoaddororemove;
private bool itemremove=false;
private bool itemadd = false;
private String associatedURL="";

// the dataview that contains the data for this grid
private DataView dv;

// PROPERTIES


public String ACCESSKEY{
get{
return accesskey;
}

set{
accesskey = value;
localgrid.AccessKey =accesskey;
}
}

public String ADDBUTTONTEXT{
get{
return addbuttontext;
}

set{
addbuttontext = value;
}
}

public String ALIGN{
get{
return align;
}
set{
align = value;
if(align.ToLower() == "left"){
localgrid.PagerStyle.HorizontalAlign=HorizontalAlign.Left;
}
else{
localgrid.PagerStyle.HorizontalAlign=HorizontalAlign.Right;
}
}
}

public bool ALLOWPAGING{
get{
return allowpaging;
}

set{
allowpaging = value;
localgrid.AllowPaging = allowpaging;
if(allowpaging){
if(pagesize==0){
pagesize=10;
}
localgrid.PageSize = pagesize;
if(pagestyle.ToUpper() == "NUMERIC"){
localgrid.PagerStyle.Mode = PagerMode.NumericPages;
}
localgrid.PagerStyle.NextPageText = nextpagetext;
localgrid.PagerStyle.PrevPageText = prevpagetext;
}
}
}


public bool ALLOWSORTING{
get{
return allowsorting;
}

set{
allowsorting = value;
localgrid.AllowSorting = allowsorting;
}
}

public String CLASSNAME{
get{
return classname;
}

set{
classname = value;
localgrid.CssClass=classname;
}
}

public int COLSPAN{
get{
return colspan;
}

set{
colspan = value;
}
}


public bool DISPLAYROWNUMBER{
get{
return displayrownumber;
}

set{
displayrownumber = value;
}
}

public bool EDITABLE{
get{
return editable;
}

set{
editable = value;
}
}

public String EVENROWCOLOR{
get{
return evenrowcolor;
}

set{
evenrowcolor = value;
if(evenrowcolor.Length > 0){

localgrid.AlternatingItemStyle.BackColor=System.Drawing.Color.FromName(evenr
owcolor);
}
}
}

public String HEADERTEXT{
get{
return headertext;
}

set{
headertext = value;
}
}

public bool HIDEBORDER{
get{
return hideborder;
}

set{
hideborder = value;
if (hideborder){
localgrid.BorderStyle = BorderStyle.Solid;
}
else{
localgrid.BorderStyle = BorderStyle.None;
}
}
}

public ListData LISTDATA{
get{
return listdata;
}

set{
listdata = value;
}
}

public String NEXTTEXT{
get{
return nextpagetext;
}

set{
nextpagetext = value;
if (nextpagetext.Length > 0){
localgrid.PagerStyle.NextPageText = nextpagetext;
}
}
}

public String ODDROWCOLOR{
get{
return oddrowcolor;
}

set{
oddrowcolor = value;
if(oddrowcolor.Length > 0){

localgrid.ItemStyle.BackColor=System.Drawing.Color.FromName(oddrowcolor);
}
}
}

public int PAGESIZE{
get{
return pagesize;
}

set{
pagesize = value;
if(pagesize == 0){
localgrid.PageSize = 10;
}
}
}

public String PAGESTYLE{
get{
return pagestyle;
}

set{
pagestyle = value;
if (pagestyle.ToUpper() == "NUMERIC"){
localgrid.PagerStyle.Mode = PagerMode.NumericPages;
}
else{
localgrid.PagerStyle.Mode = PagerMode.NextPrev;
}
}
}

public String PREVTEXT{
get{
return prevpagetext;
}

set{
prevpagetext = value;
if (prevpagetext.Length > 0){
localgrid.PagerStyle.PrevPageText = prevpagetext;
}
}
}

public String REMOVEBUTTONTEXT{
get{
return removebuttontext;
}

set{
removebuttontext = value;
}
}

public bool ROWTAG{
get{
return rowtag;
}

set{
rowtag = value;
}
}

public String ROWNUMBERLABEL{
get{
return rownumberlabel;
}

set{
rownumberlabel = value;
}
}

public bool SHOWADDBUTTON{
get{
return showaddbutton;
}

set{
showaddbutton = value;
}
}

public bool SHOWREMOVEBUTTON{
get{
return showremovebutton;
}

set{
showremovebutton = value;
}
}

public bool SHOWHEADER{
get{
return showheader;
}

set{
showheader = value;
localgrid.ShowHeader = showheader;
}
}

public bool SHOWFOOTER{
get{
return showfooter;
}

set{
showfooter = value;
localgrid.ShowFooter = showfooter;
}
}

public int SPACESFROMLEFT{
get{
return spacesfromleft;
}
set{
spacesfromleft = value;
}
}

public String TOOLTIP{
get{
return tooltip;
}
set{
tooltip = value;
localgrid.ToolTip = tooltip;
}
}

public int WIDTH{
get{
return width;
}

set{
width = value;
if(width >0){
localgrid.Width = width;
}
}
}

public bool VISIBLE{
get{
return visible;
}

set{
visible = value;
}
}


// Implementation Private Methods
protected void CreateDataSource() {

try{
Log.Instance.write(Log.INFO, this.ToString(), "Createdatasource
called");
DataTable dt = new DataTable();
DataRow dr;
RowData row;
int i;
int j;

if(null != listdata){
// first get the header and add the columns to the data table
row = (RowData)listdata.getRowData(0);
for(i=0; i< row.getFieldCount(); i++){
if(displayrownumber){ // then add an extra row header as S No.
if(i == 0){
dt.Columns.Add(new DataColumn(rownumberlabel, typeof(String)));
}
}

switch(System.Type.GetTypeCode(row.getFieldValue(i).GetType())){

case System.TypeCode.Boolean:
dt.Columns.Add(new
DataColumn((String)row.getFieldName(i),typeof(bool)));
break;

case System.TypeCode.DateTime:
dt.Columns.Add(new
DataColumn((String)row.getFieldName(i),typeof(DateTime)));
break;

case System.TypeCode.Decimal:
dt.Columns.Add(new
DataColumn((String)row.getFieldName(i),typeof(bool)));
break;

case System.TypeCode.Int16:
dt.Columns.Add(new
DataColumn((String)row.getFieldName(i),typeof(Int16)));
break;

case System.TypeCode.Int32:
dt.Columns.Add(new
DataColumn((String)row.getFieldName(i),typeof(Int32)));
break;

case System.TypeCode.Int64:
dt.Columns.Add(new
DataColumn((String)row.getFieldName(i),typeof(Int64)));
break;

case System.TypeCode.String:
default:
dt.Columns.Add(new
DataColumn((String)row.getFieldName(i),typeof(String)));
break;
}
}

// then add the data rows to the data table

for(i=1; i<listdata.getCount(); i++){
row = (RowData)listdata.getRowData(i);
dr = dt.NewRow();
for(j=0; j< row.getFieldCount(); j++){
if(displayrownumber){ // then add an extra row header as S No.
if(j == 0){
dr[j] = i;
}
dr[j+1] = row.getFieldValue(j);
}
else{
dr[j] = row.getFieldValue(j);
}
}
dt.Rows.Add(dr);
}
}

dv = new DataView(dt);
}
catch (Exception ex){
Log.Instance.write(Log.EXCEPTION,this.ToString(), "Exception
occured in method createdatasource with message "+ ex.Message);
throw(ex);
}
}

protected bool IsColumnSortable(String columnname){
bool matchfound = false;
int i;
if(sortablecolumns.Count == 0){
return false;
}
for(i=0; i<sortablecolumns.Count; i++){
if(((String)sortablecolumns).ToLower() == columnname.ToLower()){
matchfound = true;
break;
}
}
return matchfound;

}

protected bool IsColumnHyperlink(String colname){
bool matchfound = false;
int i;
if (hyperlinkcolumns.Count == 0){
return false;
}

for(i=0; i<hyperlinkcolumns.Count; i++){
if(((String)hyperlinkcolumns).ToLower() == colname.ToLower()){
matchfound = true;
associatedURL = (String) navigatetoURL;
break;
}
}
return matchfound;
}

protected bool IsColumnInvisible(String colname){
bool matchfound = false;
int i;
if (invisiblecolumns.Count == 0){
return false;
}

for(i=0; i<invisiblecolumns.Count; i++){
if(((String)invisiblecolumns).ToLower() == colname.ToLower()){
matchfound = true;
break;
}
}
return matchfound;
}


protected void BindGrid(bool sortit) {
Log.Instance.write(Log.INFO, this.ToString(), "Bind Grid called");
if (sortit){
SortGrid();
}
localgrid.EnableViewState = true;
localgrid.DataSource = dv;
localgrid.DataBind();

}


protected void GenerateGrid(){
int i;
HyperLinkColumn hlink;
BoundColumn bcolumn;
ButtonColumn button;
TemplateColumn tcolumn;
TextBox textbox;

String columnname="";

if(localgrid.Columns.Count >0){
localgrid.Columns.Clear();
}
if(null != listdata){

RowData row = (RowData)listdata.getRowData(0);
for(i=0; i < row.getFieldCount(); i++){
// add the row number column if its ON
if(displayrownumber){
if(i==0){
bcolumn = new BoundColumn();
bcolumn.DataField = rownumberlabel;
bcolumn.HeaderText = rownumberlabel;
bcolumn.ReadOnly = true;
localgrid.Columns.Add(bcolumn);
}
}

columnname = (String)row.getFieldName(i);
Log.Instance.write(Log.INFO, this.ToString(), "Fieldname is :" +
columnname);

if(editable){ // the grid is editable

tcolumn = new TemplateColumn();
tcolumn.HeaderText = (String)row.getFieldLabel(columnname);
tcolumn.ItemTemplate = new DataGridTemplate(ListItemType.Item,
columnname);
tcolumn.EditItemTemplate = new DataGridTemplate(ListItemType.EditItem,
columnname);
localgrid.Columns.Add(tcolumn);
}
else{ // the grid is read only
if(IsColumnHyperlink(columnname)){
hlink = new HyperLinkColumn();
hlink.DataNavigateUrlField = columnname;
hlink.DataNavigateUrlFormatString=associatedURL;
//"detailspage.aspx?id={0}";
hlink.DataTextField=columnname;
hlink.HeaderText = (String)row.getFieldLabel(columnname);
hlink.Visible = !(IsColumnInvisible(columnname));
if(IsColumnSortable(columnname)){
hlink.SortExpression = columnname;
}
hlink.Target="_new";
localgrid.Columns.Add(hlink);
}
else{
bcolumn = new BoundColumn();
bcolumn.DataField = columnname;
bcolumn.HeaderText = (String)row.getFieldLabel(columnname);
if(IsColumnSortable(columnname)){
bcolumn.SortExpression = columnname;
}
bcolumn.ReadOnly = true;
bcolumn.Visible = !(IsColumnInvisible(columnname));
localgrid.Columns.Add(bcolumn);
}
}
}

// now add the ADD and Remove button(s)
if(showaddbutton){
button = new ButtonColumn();
button.Text = addbuttontext;
//button.HeaderText ="Click to Add";
button.CommandName = "localgrid_ADD";
button.ButtonType = ButtonColumnType.PushButton;
localgrid.Columns.Add(button);
}

if(showremovebutton){
button = new ButtonColumn();
button.Text = removebuttontext;
//button.HeaderText ="Click to Remove";
button.CommandName = "localgrid_REMOVE";
button.ButtonType = ButtonColumnType.PushButton;
localgrid.Columns.Add(button);
}
}
Log.Instance.write(Log.INFO, this.ToString(), "total columns in grid = " +
localgrid.Columns.Count);

}

protected void SortGrid(){
if(sortfield == selectedsortfield){
ascending = !(ascending);
}
else{
ascending = true;
}

selectedsortfield = sortfield;

if(ascending){
//dv.Sort = sortfield + " ASC";
dv.Sort = sortfield;
Log.Instance.write(Log.INFO, this.ToString(), "ascending is true and
sortfield is " + sortfield + " selectedSortfield is " + selectedsortfield);
}
else{
//dv.Sort = sortfield + " DESC";
dv.Sort = sortfield;
Log.Instance.write(Log.INFO, this.ToString(), "ascending is false and
sortfield is " + sortfield + " selectedSortfield is " + selectedsortfield);
}
}

// ------------ EVENTS -------------------------------------------------

void Page_Load(Object sender, EventArgs e) {
Log.Instance.write(Log.INFO, this.ToString(), "EVENT:: Page_load for
datagridcontrol called");

if(!Page.IsPostBack){
localgrid.EnableViewState = true;
Log.Instance.write(Log.INFO, this.ToString(), "Call is not a post back");
if (sortfield.Length == 0) {
RowData row = (RowData)listdata.getRowData(0);
sortfield = (String)row.getFieldName(0); // default - the first
field in the listdata
selectedsortfield = sortfield;
}

localgrid.ItemStyle.BackColor=System.Drawing.Color.FromName(oddrowcolor);

localgrid.AlternatingItemStyle.BackColor=System.Drawing.Color.FromName(evenr
owcolor);

Log.Instance.write(Log.INFO, this.ToString(), "Value of Sort field is:" +
sortfield + " and value of selected sort field is " + selectedsortfield );
localgrid.CssClass= classname;
GenerateGrid();
CreateDataSource();
BindGrid(false);

localgrid.ShowHeader = showheader;
localgrid.ShowFooter = showfooter;
localgrid.ToolTip = tooltip;
}
}

void localgrid_Page(Object sender, DataGridPageChangedEventArgs e) {
try{
Log.Instance.write(Log.INFO, this.ToString(), "localgrid_page event
called");
localgrid.CurrentPageIndex = e.NewPageIndex;
Log.Instance.write(Log.INFO, this.ToString(), "Pageindex on page event is
: " + localgrid.CurrentPageIndex);
BindGrid(false);
}

catch (Exception ex){
Log.Instance.write(Log.EXCEPTION,this.ToString(), "Exception occured in
event localgrid_page with message "+ ex.Message);
throw(ex);
}
}

void localgrid_Sort(Object sender, DataGridSortCommandEventArgs e) {
Log.Instance.write(Log.INFO, this.ToString(), "localgrid_sort called");
sortfield = (string)e.SortExpression;
Log.Instance.write(Log.INFO, this.ToString(), "Sort field in sort event
is:" + sortfield);
BindGrid(true);
}

void localgrid_Item(Object sender, DataGridCommandEventArgs e) {

if (((LinkButton)e.CommandSource).CommandName == "localgrid_ADD") {
itemadd = true;
itemtoaddorremove = e.Item
}

if (((LinkButton)e.CommandSource).CommandName == "localgrid_REMOVE") {

}
}

// --------- PUBLIC METHODS -------------------------------------------
public void MakeColumnAsHyperlink(String columnname, String URL){
if (columnname.Length > 0){
// add the column name to the arraylist of hyperlink columns
hyperlinkcolumns.Add(columnname);
navigatetoURL.Add(URL);
}
}

public void MakeColumnAsSortable(String columnname){
if (columnname.Length > 0){
sortablecolumns.Add(columnname);
}
}

public void MakeColumnInvisible(String columnname){
if (columnname.Length > 0){
invisiblecolumns.Add(columnname);
}
}

public String getBeginTag(){
String tag = "";

tag ="<td ";
if(rowtag){
tag = "<TR><TD ";
}
if(colspan > 1){
tag = tag + " colspan=\"" + colspan + "\"";
}
tag = tag + " >";

if(headertext.Length >0){
tag = tag + "<TABLE width=\"100%\"><TR><TD>" +
Misc.Instance.getSpaces(spacesfromleft) + headertext + "</TD></TR>";
tag = tag + "<TR><TD>";
}

return tag;
}

public String getEndTag(){
String tag = "</td>";
if(headertext.Length > 0){
tag = tag + "</TR></TABLE></TD>";
}
if(rowtag){
tag = tag + "</TR>";
}

return tag;
}

</script>
<%=getBeginTag()%>
<asp:DataGrid id="localgrid" name="localgrid" runat="server"
OnPageIndexChanged="localgrid_Page"
OnSortCommand="localgrid_Sort"
OnItemCommand="localgrid_Item"
AutoGenerateColumns="false" />
<%=getEndTag()%>
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top