31 messaggi dal 04 marzo 2012
Salve,
ho la necessità di creare una gridview da codice, e riempirla con determinati dati.
per far cioè ho pensato di fare come segue, il mio problema però è che devo aggiungere anche una colonna che deve essere una dropdownlist e riempirla con il contenuto di una tabella, e qui mi blocco.
Immagino che devo inserire un colonna di tipo templatecolumn e dentro il dropdown, ma non so come si fa, mi potete fare un esempio per cortesia.
Ringrazio anticipatamente.

column = New DataColumn()
column.DataType = System.Type.GetType("System.String")
column.ColumnName = "Codice"
column.ReadOnly = True
column.Unique = False
table.Columns.Add(column)

column = New DataColumn()
column.DataType = System.Type.GetType("System.String")
column.ColumnName = "Descrizione"
column.ReadOnly = True
column.Unique = False
table.Columns.Add(column)

For i = 0 To objDataSetOggettiTipo.Tables(0).Rows.Count - 1

row = table.NewRow()
row("Codice") = objDataSetOggettiTipo.Tables(0).Rows(i).Item("Codice")
row("Descrizione") = objDataSetOggettiTipo.Tables(0).Rows(i).Item("Descrizione")
table.Rows.Add(row)

Next
10.161 messaggi dal 09 febbraio 2002
Contributi
Ciao,


Immagino che devo inserire un colonna di tipo templatecolumn e dentro il dropdown, ma non so come si fa, mi potete fare un esempio per cortesia.

Sì, quello che puoi fare in maniera dichiarativa con il markup lo puoi fare anche da codice C# o VB.NET.

Supponiamo di voler creare una dropdownlist per i generi (maschile o femminile).

//Colonna con menu a tendina
var gender = new TemplateField();

//Il TemplateField vuole che si valorizzino i suoi template.
//Secondo tua necessità, popola l'ItemTemplate, L'EditItemTemplate e così via
//Io popolo l'ItemTemplate con una label, per offrire il valore in sola lettura
//e l'EditItemTemplate con la DropDownList per offrire la possibilità di modifica.

//ItemTemplate
gender.ItemTemplate = new ControlTemplate(() =>
{
    return new Label();
});

//EditItemTemplate
gender.EditItemTemplate = new ControlTemplate(() => {
    var dropDownList = new DropDownList
    {
        DataTextField = "GenderName",
        DataValueField = "GenderId"
    };
    //La dropdownlist ha un proprio data source
    dropDownList.DataSource = GetDataSourceForGender();
    return dropDownList;
});

//Aggiungo la colonna
gridView.Columns.Add(gender);


Ti servirà anche questa classe ControlTemplate che serve da contenitore alla dropdownlist (o a qualsiasi altro controllo tu voglia usare).
public class ControlTemplate : ITemplate
{
    private readonly Func<Control> controlFactory;
    public ControlTemplate(Func<Control> controlFactory)
    {
        this.controlFactory = controlFactory;
    }
    public void InstantiateIn(Control container)
    {
        container.Controls.Add(controlFactory());
    }
}


...e questo era il metodo che fornisce il datasource alla dropdownlist. E' solo un esempio. Nel tuo caso i valori arriveranno dal database.
private DataTable GetDataSourceForGender()
{
    //Questo è un datatable generato a mano ma il suo contenuto
    //può ovviamente essere ottenuto dal database
    var genders = new DataTable();

    //Schema
    genders.Columns.Add("GenderId", typeof(int));
    genders.Columns.Add("GenderName", typeof(string));

    //Data
    genders.Rows.Add(1, "F");
    genders.Rows.Add(2, "M");

    return genders;
}



Il codice che hai postato credo che non c'entri, perché vedo che stai creando un DataTable e copiandoci dentro gli stessi dati di un altro DataTable. Puoi spiegare qual è il suo utilizzo?

ciao,
Moreno

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.