Datagrid Contenente Tabella A Runtime

terrix77

Nuovo Utente
14 Lug 2007
1
0
0
Salve a tutti sono nuovo da queste parti e con me porto un problema riscontrato (ormai una ossessione) in una articolata pagina asp.net.

Ho una pagina ASP.NET 2.0 così strutturata: un datagrid contenente delle colonne di tipo itemtemplate (1 colonna immagine- 2 colonna label, 3 colonna placeholder - 4 colonna label) i cui valori sono letti da database e la cui logica è piazzata è tutta piazzata nell'evento ONITEMDATABOUND, e fin qui nessun problema. Sempre nel medesimo evento costruisco a runtime una tabella (3 colonna del datagrid di tipo itemtemplate contenete un placeholder) avente il numero di righe e il numero di colonne dipendenti da tre query differenti; sempre all'interno di tale tabella le celle contengono dei textbox creati anch'essi runtime secondo alcune condizioni dettate dalle query precedenti. Tale tabella ASP.NET è aggiunta runtime al placeholder, il quale come già detto, è piazzato nella 3 colonna itemtemplate del datagrid, ed anche fin qui nessun problema.

In pratica i problemi sono relativi alla tabella ASP.NET, in quanto deve dipendere necessariamente da 3 query che mi danno nell'ordine: intestazione (1 query), prima colonna (2 query), corpo della tabella (3 query dipendente dagli ID delle due precedenti), in pratica si tratta di una struttura matriciale.

Il mio problema principale consiste nel salvataggio(quando inputo i valori nei textbox) e recupero(quando accedo alla pagina) dei valori di tali textbox in quanto non conosco a priori quanti textbox verranno creati e come strutturare la tabella sql per effettuare le suddette operazioni. Per ridurre la lettura del codice ti posto parte del codice funzionante (contenuto nell'evento ONITEMDATABOUND del datagrid).

//**********************************************************
//COSTRUZIONE MATRICE VARIANTI
//**********************************************************
Table VariantTable = new System.Web.UI.WebControls.Table();
VariantTable.BorderWidth = 1;
VariantTable.CssClass = "Varianti";
VariantTable.GridLines = GridLines.Both;
VariantTable.CellPadding = 0;
VariantTable.CellSpacing = 0;
VariantTable.Width = Unit.Percentage(98);

//REPERIMENTO DEI COLORI
SqlConnection conn_color;
conn_color = new SqlConnection(ConfigurationManager.ConnectionStrings["WFDB"].ConnectionString);
string SelectColor = "SELECT StyleAssociations.Product AS IDProduct, StyleAssociations.Color AS IDColor, Colors.Name, Colors.Red, Colors.Green, Colors.Blue FROM StyleAssociations INNER JOIN Colors ON StyleAssociations.Color = Colors.Id GROUP BY StyleAssociations.Color, StyleAssociations.Product, Colors.Name, Colors.Red, Colors.Green, Colors.Blue HAVING (StyleAssociations.Product = " + idproduct + ")";
SqlCommand CmdColor = new SqlCommand(SelectColor, conn_color);
conn_color.Open();
SqlDataReader ObjDRColor = CmdColor.ExecuteReader(System.Data.CommandBehavior.CloseConnection);

TableRow tr = new TableRow();

//PRIMA CELLA VUOTA
TableCell tdv = new TableCell();
tdv.Width = Unit.Percentage(10);
tdv.Text = "";
tdv.VerticalAlign = VerticalAlign.Middle;
tr.Cells.Add(tdv);

ArrayList ListColor = new ArrayList();

while (ObjDRColor.Read())
{
ListColor.Add(ObjDRColor["IDColor"].ToString());
TableCell td = new TableCell();
td.Width = Unit.Percentage(10);
td.Text = /*ObjDRColor["Name"].ToString().ToLower() + */ "<div style='background-color: " + System.Drawing.ColorTranslator.ToHtml(System.Drawing.Color.FromArgb(Int32.Parse(ObjDRColor["Red"].ToString()), Int32.Parse(ObjDRColor["Green"].ToString()), Int32.Parse(ObjDRColor["Blue"].ToString()))) + "; width: 10px; height: 10px;'></div>";
td.VerticalAlign = VerticalAlign.Middle;
tr.Cells.Add(td);
}
ObjDRColor.Close();
conn_color.Close();

//INTESTAZIONE DEI TOTALI DELLE QUANTITA'
TableCell tdIntTotal = new TableCell();
tdIntTotal.Width = Unit.Percentage(10);
tdIntTotal.Text = "TOTALE";
tdIntTotal.VerticalAlign = VerticalAlign.Middle;
tr.Cells.Add(tdIntTotal);

//AGGIUNGO LE CELLE COLORI ALLA TABELLA
VariantTable.Rows.Add(tr);

//REPERIMENTO DELLE TAGLIE
SqlConnection conn_size;
conn_size = new SqlConnection(ConfigurationManager.ConnectionStrings["WFDB"].ConnectionString);
string SelectSize = "SELECT StyleAssociations.Product AS IDProduct, StyleAssociations.Size AS IDSize, Sizes.Name AS Size FROM StyleAssociations INNER JOIN Sizes ON StyleAssociations.Size = Sizes.Id GROUP BY StyleAssociations.Product, StyleAssociations.Size, Sizes.Name HAVING (StyleAssociations.Product = " + idproduct + ")";
SqlCommand CmdSize = new SqlCommand(SelectSize, conn_size);
conn_size.Open();
SqlDataReader ObjDRSize = CmdSize.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
while (ObjDRSize.Read())
{
TableRow trsize = new TableRow();
TableCell tdsize = new TableCell();
tdsize.Width = Unit.Percentage(10);
tdsize.Text = ObjDRSize["Size"].ToString().ToUpper();
tdsize.VerticalAlign = VerticalAlign.Middle;
trsize.Cells.Add(tdsize);

//REPERIMENTO DELLE QUANTITA'
for (int j = 0; j < ListColor.Count; j++)
{
TableCell tdquantity = new TableCell();
tdquantity.Width = Unit.Percentage(10);

SqlConnection conn_quantity;
conn_quantity = new SqlConnection(ConfigurationManager.ConnectionStrings["WFDB"].ConnectionString);
string SelectQuantity = "SELECT * FROM STYLEASSOCIATIONS WHERE Product = " + idproduct + " AND COLOR=" + ListColor[j].ToString() + " AND SIZE=" + ObjDRSize["IDSize"].ToString() + "";
SqlCommand CmdQuantity = new SqlCommand(SelectQuantity, conn_quantity);
conn_quantity.Open();
SqlDataReader ObjDRQuantity = CmdQuantity.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
if (ObjDRQuantity.Read())
{
if (ObjDRQuantity["Quantity"] != DBNull.Value)
{

tdquantity.Text = ObjDRQuantity["Quantity"].ToString(); /* + "<input type=text size=3 class=InputClass>"; */

//TODO: DA PROVARE
ArrayList ListQuantityCode = new ArrayList();
string QuantityCode = "";
SqlConnection connQuantityCode;
connQuantityCode = new SqlConnection(ConfigurationManager.ConnectionStrings["WFDB"].ConnectionString);
string SelectQuantityCode = "SELECT ASPNETQUANTITYCODE FROM SHOPPINGCART_PRODUCTS WHERE IDShoppingCart = " + idshoppingcart + "";
SqlCommand CmdQuantityCode = new SqlCommand(SelectQuantityCode, connQuantityCode);
connQuantityCode.Open();
SqlDataReader ObjDRQuantityCode = CmdQuantityCode.ExecuteReader(System.Data.CommandBehavior.CloseConnection);

if (ObjDRQuantityCode.Read())
{
if (ObjDRQuantityCode["ASPNETQUANTITYCODE"] != DBNull.Value)
{
ListQuantityCode.Add(ObjDRQuantityCode["ASPNETQUANTITYCODE"].ToString());
}
}
ObjDRQuantityCode.Close();
connQuantityCode.Close();


TextBox qty = new TextBox();
qty.ID = "Crr_" + ListColor[j].ToString() + "_" + ObjDRSize["IDSize"].ToString();

//DEVO EFFETTUARE QUI LA PROCEDURA PER RECUPERARE I VALORI DEI MIEI TEXT BOX, E COME?
//DEVO EFFETTUARE QUI LA PROCEDURA PER SALVARE I VALORI DEI TEXTBOX, E COME?

qty.Text = "";
qty.CssClass = "InputClass";
qty.Width = 30;
tdquantity.Controls.Add(qty);


}
else
{
tdquantity.Text = "";
}
}
ObjDRQuantity.Close();
conn_quantity.Close();

tdquantity.VerticalAlign = VerticalAlign.Middle;

trsize.Cells.Add(tdquantity);
}

//CALCOLO TOTALI DELLE QUANTITA' PER COLOR/SIZE
TableCell tdtotal = new TableCell();
tdtotal.Width = Unit.Percentage(10);

int TotaleQuantita = 0;
for (int i = 0; i < ListColor.Count; i++)
{
SqlConnection conn_totalquantity;
conn_totalquantity = new SqlConnection(ConfigurationManager.ConnectionStrings["WFDB"].ConnectionString);
string SelectTotalQuantity = "SELECT * FROM STYLEASSOCIATIONS WHERE Product = " + idproduct + " AND COLOR=" + ListColor.ToString() + " AND SIZE=" + ObjDRSize["IDSize"].ToString() + "";
SqlCommand CmdTotalQuantity = new SqlCommand(SelectTotalQuantity, conn_totalquantity);
conn_totalquantity.Open();
SqlDataReader ObjDRTotalQuantity = CmdTotalQuantity.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
while (ObjDRTotalQuantity.Read())
{
if (ObjDRTotalQuantity["Quantity"] != DBNull.Value)
{
TotaleQuantita += Int32.Parse(ObjDRTotalQuantity["Quantity"].ToString());
tdtotal.Text = TotaleQuantita.ToString();
}
}
ObjDRTotalQuantity.Close();
conn_totalquantity.Close();
}

tdtotal.VerticalAlign = VerticalAlign.Middle;
//END TOTALI DELLE QUANTITA' PER COLOR/SIZE

trsize.Cells.Add(tdtotal);

//AGGIUNGO LE CELLE SIZE ALLA TABELLA
VariantTable.Rows.Add(trsize);
}
ObjDRSize.Close();
conn_size.Close();

//AGGIUNGO AL PLACEHOLDER LA TABELLA VARIANTI
PlhVarianti.Controls.Add(VariantTable);
//**********************************************************
//END COSTRUZIONE MATRICE VARIANTI
//**********************************************************

Capisco che il problema non è di facile soluzione infatti in ben 9 forum dedicati ad asp.net nessuno mi ha saputo dare una soluzione al mio problema, ma io ci tento anche qui, ciao e grazie in anticipo.
 
Discussioni simili
Autore Titolo Forum Risposte Data
M [PHP] Alternativa a datagrid con PDO PHP 6
riminese77 [ASP.Net] Popup Bootstrap in datagrid ASP.NET 0
M [PHP] Mantenere variabile con datagrid nella pagina 2 PHP 1
M [PHP] Tabella datagrid con icona di modifica che cambia in base a parametro PHP 0
M Problemi tra GROUP BY e tabella 'datagrid.class.php' PHP 6
I Datagrid Jquery PHP, mi servirebbero alcune soluzioni... Insrimento immagine e filtro PHP 2
P [vb.net] passare valori da un datagrid view e un'altra form .NET Framework 2
neo996sps [Visual Studio] Popolare datagrid tramite query Visual Basic 0
W Non si visualizza DataGrid su pagina Web Ajax 0
WorldWideWeb Svuotamento DataGrid Visual Basic 1
L Datagrid selezionare e sommare un campo Visual Basic 0
S Ajax UpdatePanel e Datagrid Ajax 1
cito17 DataGrid e upload file ASP.NET 2
PoLe Alternativa a Datagrid per paginazione Recordset ASP.NET 0
S [Vb.net 2005 Ex] Ricavare i campi da una riga del Datagrid Programmazione 0
S [vb.net 2005] GroupBox e DataGrid Programmazione 0
mythar DataGrid e Hyperlink Programmazione 1
A DataGrid con più tables ASP.NET 0
D DataGrid che si perde i dati ASP.NET 1
Cforever datagrid??? mistero..... ASP.NET 2
K Problemi col DataGrid!!!! ASP.NET 0
S Aiuto Per Un Datagrid Classic ASP 0
G file CSS contenente variabili HTML e CSS 1
F Funzione Glob - ricerca file contenente una parola PHP 1
R Confrontare il dominio di una mail con una stringa contenente un dominio personalizzato, tutto ciò in php o javascript PHP 0
D [HTML] Inviare un link contenente un' immagine HTML e CSS 4
bubino8 [PHP] appendChild contenente codice PHP 2
Monital Leggere un file php contenente dati json PHP 10
D cartella contenente file ma percorso in mysql PHP 3
M pagina registrazione con mail contenente link di attivazione profilo PHP 1
H Menù a discesa contenente dati db, la scelta dal menù deve essere inviata in un altro db. PHP 1
R Ottenere il numero di riga di una tabella mysql contenente un nome specifico PHP 1
H Ricaricare pagina contenente iframe da iframe? Javascript 5
Monital Variabile contenente array con valori dientici e con chiavi uguali PHP 11
Nik Posizionare un div (contenente una tabella) al centro, problema con mozilla HTML e CSS 0
I ObjRS: nome contenente spazio Classic ASP 15
R INSERT di Stringa contenente l'apostrofo Classic ASP 7
D Miglior modo per estrarre le occorrenze di un elemento in un set di più file xml e quindi scrivere il risultato in una tabella Excel o magari in JSON XML 0
S da casella di testo a campo tabella Database 0
E Tabella righe e colonne PHP 0
G Sviluppo tabella orizzontale in un certo ordine PHP 2
R tabella troppo grande Database 0
C Creare Tabella Dati Meteo prelevandoli da dei Tags in un altro foglio PHP 27
M Contare totale risultati tabella in un periodo di tempo PHP 5
E Php aggiornamento tabella PHP 9
L Riempimento di una tabella al click di un bottone Javascript 1
M Accodare record presi da un altra tabella PHP 8
E Estrarre dati da doppia tabella, banale ma non sempre PHP 1
otto9due Inserire o aggiornare tabella my sql controllando una coppia di valori PHP 7
Couting95 inserire dati da un file di testo in una tabella in php PHP 1

Discussioni simili