<mySearch ⁄>
<mySnippets order="rand" ⁄>
<myContacts ⁄><email ⁄>
<windows live messenger ⁄>
<myCurriculum type="pdf" ⁄>
<myBlog show="last" ⁄>
<myNews show="rand" ⁄>
<myNews type="cat" ⁄>
<myQuote order="random" ⁄>O homem não vive uma centena de anos, mas preocupa-se o suficiente para mil
<myPhoto order="random" ⁄>
<myAdSense ⁄>
<myVisitorsMap ⁄>

body{ font-family: Tahoma, Verdana, Arial, sans-serif;font-size: 11px;color: #000; margin: 8px;text-align: center; } /****** <campos input > ******/ select, input{background-color: #ffffff;font-size: 8pt;border: 1px solid #1b5b7e;padding-left: 1px;} select:hover, input:hover{color: #000080;background-color: #99CCFF} select:focus, input:focus{color: #000;background-color:#ffffd4; } input[type="text"]:hover{background: #99CCFF url("images/pencil.png") no-repeat bottom right;} input[type="text"]:focus{background: #ffffd4 url("images/edit.png") no-repeat bottom right;} input[type="submit"]{background: #ffffff url("images/save.png") no-repeat center right;padding-right: 18px;height: 20px;} input[type="submit"]:hover{background: #ffffd4 url("images/submit.png") no-repeat center right;padding-right: 18px;height: 20px;} /****** <campos input /> ******/ /****** <tabelas> ******/ table{border: solid 1px #1b5b7e; margin: 0 auto;} th{border: solid 1px #3C7088;color: #fff;font-weight: bold;text-align: center; background: #3C7088 url("images/bg.gif") repeat-x left center; width: 190px;padding: 2px; } td{background: #EFEBE7 url("images/bg2.gif") repeat-x left center;border:solid 1px #1b5b7e;padding: 2px;} a{color: #000080;text-decoration: underline;} /****** <tabelas/> ******/
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; /// <summary> /// Summary description for Field /// </summary> public class Field { private string _name; private Type _type; /// <summary> /// Método construtor /// </summary> /// <param name="name">Nome do Campo</param> /// <param name="systemType">Tipo do Campo</param> public Field(string name, string systemType){ this._name = name; this._type = System.Type.GetType(systemType); } /// <summary> /// Obter nome do campo /// </summary> public string FieldName {get{return this._name;}} /// <summary> /// Obter tipo do campo /// </summary> public Type FieldType {get{return this._type;}} }
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Collections; /// <summary> /// Summary description for Fields /// </summary> public class Fields : IEnumerator, IEnumerable { private ArrayList _fields=new ArrayList(); private int _pos=-1; /// <summary> /// Método construtor /// </summary> public Fields(){ } /// <summary> /// Método construtor (overloading) /// </summary> /// <param name="field">Objecto Campo</param> public Fields(Field field) { this.AddField(field); } /// <summary> /// Adicionar Campo /// </summary> /// <param name="field"></param> public void AddField(Field field) {this._fields.Add(field);} /// <summary> /// Implementar as interfaces: IEnumerator, IEnumerable /// Isto faz com que possamos usar o foreach /// </summary> #region IEnumerator Members public object Current {get{return this._fields[this._pos];}} public bool MoveNext() { this._pos++; return (this._pos < this._fields.Count); } public void Reset() {this._pos =-1;} #endregion #region IEnumerable Members public IEnumerator GetEnumerator() { return (IEnumerator)this; } #endregion }
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Collections; /// <summary> /// Class que contém os registos da DataTable /// </summary> public class Record{ private Hashtable _arr = new Hashtable(); /// <summary> /// Método construtor /// </summary> public Record() { } /// <summary> /// Adicionar informação a um campo /// </summary> /// <param name="col">Campo</param> /// <param name="value">Valor</param> public void AddFieldValue(string col, string value) {this._arr.Add(col, value);} /// <summary> /// Obter valor de um determinado campo /// </summary> /// <param name="field">Campo</param> /// <returns>Valor do Campo</returns> public string GetFieldValue(string field) { return this._arr[field].ToString();} /// <summary> /// Obter o número de colunas do registo /// </summary> /// <returns></returns> public int Count() { return this._arr.Count;} }
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Collections; /// <summary> /// Class que fornece informações, /// só possui métodos/atributos estáticos /// </summary> public class Settings { static public string mySessionName = "MyPersistentDataTable"; static public string[] column_titles = { "BI", "Nome", "Telefone" }; /// <summary> /// Obter os nomes das colunas que vão preencher /// a DataTable /// </summary> /// <returns></returns> public static Hashtable Columns() { Hashtable columns = new Hashtable(); columns.Add(column_titles[0], "System.Int32"); columns.Add(column_titles[1], "System.String"); columns.Add(column_titles[2], "System.String"); return columns; } /// <summary> /// Método construtor /// </summary> public Settings() { } }
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Collections; /// <summary> /// Summary description for DynamicGridview /// </summary> public class DynamicGridview { private DataTable _dt; private string _tableName; private Int16 _allow_duplicates; public enum AllowDuplicates { Yes = 1, No = 0 } /// <summary> /// Método construtor /// </summary> /// <param name="dataTableName">Nome da DataTable armazenada na sessão</param> public DynamicGridview(string dataTableName, AllowDuplicates allow) { this._dt = new DataTable(dataTableName); this._tableName = dataTableName; this._allow_duplicates = (Int16)allow; } /// <summary> /// Adicionar colunas à DataTable /// </summary> /// <param name="col">Colunas</param> public void AddColumns(Fields fields) { foreach (Field field in fields) { this._dt.Columns.Add (new DataColumn(field.FieldName, field.FieldType)); } this.SaveSession(); } /// <summary> /// Adicionar linha de dados à DataTable /// </summary> /// <param name="row">Registo</param> public void AddRecord(Record record) { if (this._allow_duplicates == 0) { if (RecordExists(record)) return; } DataRow myNewRow; DataColumn auxCol; myNewRow = this._dt.NewRow(); int count = this._dt.Columns.Count; for (int i = 0; i < count; i++) { auxCol = this._dt.Columns[i]; myNewRow[auxCol] = record.GetFieldValue(auxCol.ColumnName); } this._dt.Rows.Add(myNewRow); this.SaveSession(); } /// <summary> /// Guardar objecto na sessão /// </summary> public void SaveSession() { HttpContext.Current.Session[this._tableName] = this; } /// <summary> /// Verificar se o registos já se encontra na DataTable /// </summary> /// <param name="rec"></param> /// <returns></returns> private Boolean RecordExists(Record rec) { if (_dt.Rows.Count == 0) return false; bool result = false; int count = _dt.Columns.Count, aux = 0; foreach (DataRow row in _dt.Rows) { foreach (DataColumn col in _dt.Columns) { if (rec.GetFieldValue(col.ColumnName).Equals(row[col.ColumnName].ToString())) aux++; } if (aux == count) { result = true; break; } aux = 0; } return result; } /// <summary> /// Obter DataTable /// </summary> public DataTable DTable { get { return this._dt; } } }
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" EnableViewState="false" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>myDynamicGridView</title> <link href="style.css" rel="stylesheet" type="text/css" /> </head> <body> <form id="form1" runat="server"> <div> <asp:GridView ID="gridView" runat="server" EnableViewState="false"></asp:GridView> <br /> BI <asp:TextBox ID="txtBI" runat="server"></asp:TextBox> Nome <asp:TextBox ID="txtNome" runat="server"></asp:TextBox> Telefone <asp:TextBox ID="txtTelefone" runat="server"></asp:TextBox> <br /><br /><br /> <asp:Button ID="btAddRecord" runat="server" OnClick="btAddRecord_Click" Text="Adicionar Registo" /> <br /><br /> <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/other_page.htm">Ir para outra página</asp:HyperLink> </div> </form> </body> </html>
using System; using System.Configuration; using System.Data; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Collections; public partial class _Default : System.Web.UI.Page { DynamicGridview myDynamicGrid; protected void Page_Load(object sender, EventArgs e) { //se a DynamicGridview já estiver em sessão //construímos a gridview if (Session[Settings.mySessionName] != null) { myDynamicGrid = (DynamicGridview)Session[Settings.mySessionName]; gridView.DataSource = this.myDynamicGrid.DTable; gridView.DataBind(); } //a DynamicGridview não se encontra na sessão nem estamos a fazer um postback //vamos então instanciar a DynamicGridview e adicionar-lhe as colunas/campos else if (!IsPostBack) { myDynamicGrid = new DynamicGridview(Settings.mySessionName, DynamicGridview.AllowDuplicates.No); //<construir campos da gridview> Fields fields = new Fields(); IDictionaryEnumerator columnsEnum = Settings.Columns().GetEnumerator(); while (columnsEnum.MoveNext()) { fields.AddField(new Field(columnsEnum.Key.ToString(), columnsEnum.Value.ToString())); } //<construir campos da gridview /> //adicionar campos this.myDynamicGrid.AddColumns(fields); } } protected void btAddRecord_Click(object sender, EventArgs e) { this.myDynamicGrid = (DynamicGridview)Session[Settings.mySessionName]; //obter gridview //criar um registo Record rec = new Record(); rec.AddFieldValue(Settings.column_titles[0], txtBI.Text); rec.AddFieldValue(Settings.column_titles[1], txtNome.Text); rec.AddFieldValue(Settings.column_titles[2], txtTelefone.Text); //adicionar registo this.myDynamicGrid.AddRecord(rec); //actualizar gridview gridView.DataSource = this.myDynamicGrid.DTable; gridView.DataBind(); } }