Button update con DropDownList dinamiche in GridView

mercoledì 27 gennaio 2021 - 17.20

nesta Profilo | Newbie

Ciao a tutti. Mi trovo in difficoltà e chiedo aiuto per una situazione trattata spesso, ma separatamente e cioè: DDL create dinamicamente in GridView e evento esterno al GV che ne prende in value/Text ... x memorizzare nel DB.
Sono alle prime esperienze ed il codice che riporto, spesso deriva da altro trovato in rete.
**************************************************************************************************************
In una WebForm ho disegnato un panel con all'interno una GridView. Esterno al panel c'è un Button.
La GridView è costituita da 2 BoundField (di cui il primo not visible).
Nel Load della pagina:
1. "assumo" 2 variabili DateTime che mi serviranno x aggiungere le DropDownList
2. "popolo" il DataTable mysql oCombo che mi servirà x le combo
3. if (!this.IsPostBack) {
... "popolo" il DataTable oDataTable_2 filtrando la mia tabella x credenziali e intervallo di date
... ciclo questo DT x generare i TemplateField. Questo il codice:
for (int k = 2; k < oDataTable_2.Columns.Count; k++) //aggiungo le colonne dei giorni dalla terza colonna
{
TemplateField tfield = new TemplateField();
tfield = new TemplateField();
tfield.HeaderText = oDataTable_2.Columns[k].ColumnName;
tfield.ItemStyle.Width = 55;
GridView2.Columns.Add(tfield);
}

... faccio il DataBind
}

4. Questo il codice:
protected void GridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
string NomeGiorno = "";
for (int k = 2; k < oDataTable_2.Columns.Count; k++)
{
NomeGiorno = oDataTable_2.Columns[k].ColumnName.ToString();
DropDownList ddlCombo = new DropDownList();
ddlCombo.ID = NomeGiorno;
ddlCombo.DataSource = oCombo;
ddlCombo.DataTextField = oCombo.Columns[0].ColumnName;
ddlCombo.DataValueField = oCombo.Columns[0].ColumnName;
ddlCombo.DataBind();
string country = (e.Row.DataItem as DataRowView).Row[NomeGiorno].ToString();
ddlCombo.Width = 55;
ddlCombo.Font.Name = "Arial";
ddlCombo.Font.Size = 8;
ddlCombo.Items.FindByText(country).Selected = true;
e.Row.Cells[k].Controls.Add(ddlCombo);
}
}
GridView2.Columns[1].HeaderStyle.CssClass = "locked";
}

Fin qui tutto ok (o per lo meno esteriormente). Uso le DDL, combiando item ... tutto OK !

Alla fine della fiera però voglio memorizzare le nuova situazione nel DB e così dovrò costruire
la query di update ciclando le colonne del GridView (che ha una sola row)
Ma non trovo il controllo !!

Ho provato questo codice ...

protected void ButtonOK_Click(object sender, EventArgs e)
{
string cStringa = "update pianificazione set ";
string NomeGiorno = "";
for (int k = 2; k < GridView2.Columns.Count; k++) //ciclo le colonne dei giorni dalla terza colonna
{ // cioè dopo codice fiscale, cognome e nome .
NomeGiorno = GridView2.Columns[k].ToString();
string prova = ((DropDownList)GridView2.Rows[0].FindControl(NomeGiorno)).SelectedItem.Text;
.....
.....
}

ottengo l'errore classico:

System.NullReferenceException: 'Riferimento a un oggetto non impostato su un'istanza di oggetto.'

Grazie a tutti coloro x potranno darmi una mano
Alessio
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5