/*
Copyright 2002-2008 Corey Trager
Distributed under the terms of the GNU General Public License
*/
using System;
using System.Web;
using System.Data;
namespace btnet
{
public class SortableHtmlTable
{
///////////////////////////////////////////////////////////////////////
public static void create_from_dataset(
HttpResponse r,
DataSet ds,
string edit_url,
string delete_url)
{
create_from_dataset(r, ds, edit_url, delete_url, true);
}
///////////////////////////////////////////////////////////////////////
public static void create_from_dataset(
HttpResponse r,
DataSet ds,
string edit_url,
string delete_url,
bool html_encode)
{
create_start_of_table(r);
create_headings(r, ds, edit_url, delete_url);
create_body(r, ds, edit_url, delete_url, html_encode);
create_end_of_table(r);
}
///////////////////////////////////////////////////////////////////////
public static void create_start_of_table(
HttpResponse r)
{
r.Write("\n
\n");
r.Write("click on column headings to sort
\n");
r.Write("\n");
//r.Write ("
\n");
r.Write("\n");
}
///////////////////////////////////////////////////////////////////////
public static void create_end_of_table(
HttpResponse r)
{
// data
r.Write("
\n");
r.Write("\n");
r.Write("
\n");
}
///////////////////////////////////////////////////////////////////////
// headings
///////////////////////////////////////////////////////////////////////
public static void create_headings(
HttpResponse r,
DataSet ds,
string edit_url,
string delete_url)
{
r.Write("\n");
int db_column_count = 0;
foreach (DataColumn dc in ds.Tables[0].Columns)
{
if ((edit_url != "" || delete_url != "")
&& db_column_count == (ds.Tables[0].Columns.Count - 1))
{
if (edit_url != "")
{
r.Write("edit | ");
}
if (delete_url != "")
{
r.Write("delete | ");
}
}
else
{
// determine data type
string datatype = "";
if (Util.is_numeric_datatype(dc.DataType.ToString()))
{
datatype = "num";
}
else if (dc.DataType.ToString() == "System.DateTime")
{
datatype = "date";
}
else
{
datatype = "str";
}
r.Write("\n");
if (dc.ColumnName.StartsWith("$no_sort_"))
{
r.Write(dc.ColumnName.Replace("$no_sort_", ""));
}
else
{
string sortlink = "";
sortlink = sortlink.Replace("$col", Convert.ToString(db_column_count));
sortlink = sortlink.Replace("$type", datatype);
r.Write(sortlink);
r.Write(dc.ColumnName);
r.Write("");
}
//r.Write (" "); // for debugging
//r.Write (dc.DataType);
r.Write(" | \n");
}
db_column_count++;
}
r.Write("
\n");
}
///////////////////////////////////////////////////////////////////////
// body, data
///////////////////////////////////////////////////////////////////////
public static void create_body(
HttpResponse r,
DataSet ds,
string edit_url,
string delete_url,
bool html_encode)
{
foreach (DataRow dr in ds.Tables[0].Rows)
{
r.Write("\n");
for (int i = 0; i < ds.Tables[0].Columns.Count; i++)
{
string datatype = ds.Tables[0].Columns[i].DataType.ToString();
if ((edit_url != "" || delete_url != "")
&& i == (ds.Tables[0].Columns.Count - 1))
{
if (edit_url != "")
{
r.Write("edit | ");
}
if (delete_url != "")
{
r.Write("delete | ");
}
}
else
{
if (Util.is_numeric_datatype(datatype))
{
r.Write("");
}
else
{
r.Write(" | ");
}
if (dr[i].ToString() == "")
{
r.Write(" ");
}
else
{
if (datatype == "System.DateTime")
{
r.Write(Util.format_db_date(dr[i]));
}
else
{
if (html_encode)
{
r.Write(HttpUtility.HtmlEncode(dr[i].ToString()));
}
else
{
r.Write(dr[i]);
}
}
}
r.Write(" | ");
}
}
r.Write("
\n");
}
}
} // end SortableHtmlTable
} // end namespace