gabba gabba .net!


I'm lost in dotnet jungle!
Archivio Posts
Anno 2006
Statistiche
  • Views Home Page: 4.184
  • Views Posts: 16.346
  • Views Gallerie: 0
  • n° Posts: 27
  • n° Commenti: 3

Creare un datagrid a cui è possibile aggiungere righe manualmente..

Mi è capitato oggi per un lavoro di dover creare un datagrid cui si possa aggiungere dinamicamente delle righe, pare una cosa banale però mi ci è andata via qualche oretta e ho dovuto fare un po' di workaround, ma alla fine ce l'ho fatta..
Sicuramente la cosa era fattibile in modo più elegante, e magari c'era qualche scoriciatoia a me sconosciuta, ma ormai l'ho risolta così.
Posto un esempio composto di una pagina aspx e codebehind, un dataset tipizzato e una classe che deriva dal dataset e ne gestisce l'inserimento della nuova riga..
Se vi capita provatelo e ditemi pure se vi pare una solenne m*****a!

---------------------------------------------------------------------------------------------------------------
START CODE
---------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------
Default.aspx
---------------------------------------------------------------------------------------------------------------

<%@ Page language="c#" Codebehind="Default.aspx.cs" AutoEventWireup="false" Inherits="DataGridNewRow.Default" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
 <HEAD>
  <title>DataGridNewRow</title>
  <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
  <meta name="CODE_LANGUAGE" Content="C#">
  <meta name="vs_defaultClientScript" content="JavaScript">
  <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
 </HEAD>
 <body>
  <h2>Add New Row To Datagrid</h2>
  <a href="http://blogs.dotnethell.it/gabbagabbanet/" target="_blank">http://blogs.dotnethell.it/gabbagabbanet/</a>
  <hr>
  <form id="Form1" method="post" runat="server">
   <asp:datagrid id="dgAnagrafica" runat="server" Width="100%" AutoGenerateColumns="False"
    BorderWidth="1px" CellSpacing="1" CellPadding="2" ShowFooter="True"  OnItemDataBound="dgAnagrafica_ItemDataBound" style="font-name:verdana;font-size:13px;border:1px solid #000000;" >
    <AlternatingItemStyle BackColor=#f1efe2></AlternatingItemStyle>
    <Columns>
     <asp:TemplateColumn HeaderText="Nome">
      <ItemTemplate>
       <asp:Label Runat="server" ID="lbl_Nome" Text='<%#DataBinder.Eval(Container.DataItem,"Nome")%>'>
       </asp:Label>
      </ItemTemplate>
      <FooterTemplate>
       <asp:TextBox style="width:100px;" Runat="server" ID="txtNome"></asp:TextBox>
      </FooterTemplate>
     </asp:TemplateColumn>
     <asp:TemplateColumn HeaderText="Cognome">
      <ItemTemplate>
       <asp:Label Runat="server" ID="lbl_Cognome" Text='<%#DataBinder.Eval(Container.DataItem,"Cognome")%>' >
       </asp:Label>
      </ItemTemplate>
      <FooterTemplate>
       <asp:TextBox style="width:100px;" Runat="server" ID="txtCognome"></asp:TextBox>
      </FooterTemplate>
     </asp:TemplateColumn>
     <asp:TemplateColumn HeaderText="Indirizzo">
      <ItemTemplate>
       <asp:Label Runat="server" ID="lbl_Indirizzo" Text='<%#DataBinder.Eval(Container.DataItem,"Indirizzo")%>' >
       </asp:Label>
      </ItemTemplate>
      <FooterTemplate>
       <asp:TextBox style="width:100px;" Runat="server" ID="txtIndirizzo"></asp:TextBox>
      </FooterTemplate>
     </asp:TemplateColumn>
     <asp:TemplateColumn HeaderText="Data di nascita">
      <ItemTemplate>
       <asp:Label Runat="server" ID="lbl_DataNascita" Text='<%#DataBinder.Eval(Container.DataItem,"DataNascita")%>' >
       </asp:Label>
      </ItemTemplate>
      <FooterTemplate>
       <asp:TextBox style="width:100px;" Runat="server" ID="txtDataNascita"></asp:TextBox>
      </FooterTemplate>
     </asp:TemplateColumn>
     <asp:TemplateColumn HeaderText="Telefono">
      <ItemTemplate>
       <asp:Label Runat="server" ID="lbl_Telefono" Text='<%#DataBinder.Eval(Container.DataItem,"Telefono")%>' >
       </asp:Label>
      </ItemTemplate>
      <FooterTemplate>
       <asp:TextBox style="width:100px;" Runat="server" ID="txtTelefono"></asp:TextBox>
      </FooterTemplate>
     </asp:TemplateColumn>
     <asp:TemplateColumn HeaderText="">
      <ItemTemplate>
       <asp:Button style="width:100px;" Runat="server" ID="btDelete" Text="Delete" OnClick="btDelete_Click"></asp:Button>
      </ItemTemplate>
      <FooterTemplate>
       <asp:Button style="width:100px;" Runat="server" ID="btAdd" Text="Add" OnClick="btAdd_Click"></asp:Button>
      </FooterTemplate>
     </asp:TemplateColumn>
    </Columns>
   </asp:datagrid>
  </form>
 </body>
</HTML>

---------------------------------------------------------------------------------------------------------------
Default.aspx.cs
---------------------------------------------------------------------------------------------------------------

using
System;
using
System.Collections;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Web;
using
System.Web.SessionState;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.HtmlControls;
namespace
DataGridNewRow
{
/// <summary>
/// Summary description for WebForm1.
/// </summary>
public class Default : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid dgAnagrafica;

private void Page_Load(object sender, System.EventArgs e)
{
if (!IsPostBack)
{
AnagraficaHandler objAnagrafica =
new AnagraficaHandler();
dgAnagrafica.DataSource=objAnagrafica.Tables[0].DefaultView;
dgAnagrafica.DataBind();
}
}
protected void btAdd_Click(object sender, EventArgs e)
{
DataGridItem dgFooter = (DataGridItem)dgAnagrafica.Controls[0].Controls[dgAnagrafica.Items.Count+1];
AnagraficaHandler objAnagrafica ;
if (Session["DsAnagrafica"]!=null)
{
objAnagrafica = (AnagraficaHandler)Session["DsAnagrafica"];
}
else
{
objAnagrafica =
new AnagraficaHandler();
}

objAnagrafica.Nome=((TextBox)dgFooter.Cells[0].FindControl("txtNome")).Text;
objAnagrafica.Cognome= ((TextBox)dgFooter.Cells[2].FindControl("txtCognome")).Text;
objAnagrafica.Indirizzo =((TextBox)dgFooter.Cells[3].FindControl("txtIndirizzo")).Text ;
try
{
objAnagrafica.DataNascita=Convert.ToDateTime( ((TextBox)dgFooter.Cells[1].FindControl("txtDataNascita")).Text );
}
catch{
objAnagrafica.DataNascita = DateTime.MinValue;
}
objAnagrafica.Telefono=((TextBox)dgFooter.Cells[4].FindControl("txtTelefono")).Text;
objAnagrafica.InsertNewRow();
dgAnagrafica.DataSource=objAnagrafica.Tables[0].DefaultView;
dgAnagrafica.DataBind();
Session["DsAnagrafica"]=objAnagrafica;
}
protected void dgAnagrafica_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if (e.Item.ItemType==ListItemType.Item || e.Item.ItemType==ListItemType.AlternatingItem)
{
for(int i=0;i<dgAnagrafica.Columns.Count;i++)
{
if (i==3)
{
try
{
DateTime dt;
string shortdate;
dt = Convert.ToDateTime(((Label)e.Item.Cells[i].Controls[1]).Text);
if (dt!=DateTime.MinValue)
{
shortdate = dt.ToShortDateString();
}
else
{
shortdate =
string.Empty;
}
((Label)e.Item.Cells[i].Controls[1]).Text = shortdate;
}
catch
{}
}
}
}
}
protected void btDelete_Click(object sender, System.EventArgs e)
{
AnagraficaHandler objAnagrafica = (AnagraficaHandler)Session["DsAnagrafica"];
objAnagrafica.Tables[0].Rows[((DataGridItem)((System.Web.UI.WebControls.Button)(sender)).Parent.Parent).DataSetIndex].Delete();
dgAnagrafica.DataSource = objAnagrafica.Tables[0].DefaultView;
dgAnagrafica.DataBind();
}

#region
Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}

#endregion

}
}


---------------------------------------------------------------------------------------------------------------
AnagraficaHandler.cs
---------------------------------------------------------------------------------------------------------------

using
System;
namespace
DataGridNewRow
{
/// <summary>
/// Summary description for AnagraficaHandler.
/// </summary>
public class AnagraficaHandler : AnagraficaDataSet
{
public AnagraficaHandler()
{
//
// TODO: Add constructor logic here
//
}
private string m_Nome;
public string Nome
{
get
{
return m_Nome;
}
set
{
m_Nome=
value;
}
}
private string m_Cognome;
public string Cognome
{
get
{
return m_Cognome;
}
set
{
m_Cognome=
value;
}
}
private string m_Indirizzo;
public string Indirizzo
{
get
{
return m_Indirizzo;
}
set
{
m_Indirizzo=
value;
}
}
private DateTime m_DataNascita;
public DateTime DataNascita
{
get
{
return m_DataNascita;
}
set
{
m_DataNascita=
value;
}
}
private string m_Telefono;
public string Telefono
{
get
{
return m_Telefono;
}
set
{
m_Telefono=
value;
}
}
public void InsertNewRow()
{

AnagraficaDSRow dsRow = (AnagraficaDSRow)
this.Tables[0].NewRow();
dsRow.Nome=
this.Nome;
dsRow.Cognome=
this.Cognome;
dsRow.Indirizzo=
this.Indirizzo;
dsRow.DataNascita=
this.DataNascita;
dsRow.Telefono=
this.Telefono;
this.Tables[0].Rows.Add(dsRow);

}
}
}


---------------------------------------------------------------------------------------------------------------
AnagraficaDataSet.XSD
---------------------------------------------------------------------------------------------------------------

<?xml version="1.0" encoding="utf-8" ?>
<xs:schema id="AnagraficaDataSet" targetNamespace="http://tempuri.org/AnagraficaDataSet.xsd"
 elementFormDefault="qualified" attributeFormDefault="qualified" xmlns="http://tempuri.org/AnagraficaDataSet.xsd"
 xmlns:mstns="http://tempuri.org/AnagraficaDataSet.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema"
 xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
 <xs:element name="AnagraficaDataSet" msdata:IsDataSet="true">
  <xs:complexType>
   <xs:choice maxOccurs="unbounded">
    <xs:element name="AnagraficaDS">
     <xs:complexType>
      <xs:sequence>
       <xs:element name="Nome" type="xs:string" minOccurs="0" />
       <xs:element name="Cognome" type="xs:string" minOccurs="0" />
       <xs:element name="Indirizzo" type="xs:string" minOccurs="0" />
       <xs:element name="DataNascita" type="xs:date" minOccurs="0" />
       <xs:element name="Telefono" type="xs:string" minOccurs="0" />
      </xs:sequence>
     </xs:complexType>
    </xs:element>
   </xs:choice>
  </xs:complexType>
 </xs:element>
</xs:schema>


---------------------------------------------------------------------------------------------------------------
END CODE
---------------------------------------------------------------------------------------------------------------
Categoria: work
mercoledì, 24 mag 2006 Ore. 13.41
Calendario
novembre 2024
lmmgvsd
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678
Ora e Data
Mappa
Copyright © 2002-2007 - Blogs 2.0
dotNetHell.it | Home Page Blogs
ASP.NET 2.0 Windows 2003