2013-01-14 16 views
5

Ho letto alcuni degli altri thread e non ha funzionato per me = \ Ho un GridView con un DropDownList in un campo. Mi piacerebbe sapere come posso impostare un DataSource per quello? Non sto usando Templates né ItemTemplate né EditItemTemplate Non so come funzioni esattamente, quindi non lo sto ancora usando.Come si imposta un DataSource su DropDownList?

Finora ho solo creato il GridView e riempito i campi con i dati ma non so come fare lo stesso per lo DropDownList. Manca qualcosa credo, che mi sta dando un errore ("The Reference of the Object was not set as an instance of an object")

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
     {         
      DropDownList Drop_Prioridades = (DropDownList)e.Row.FindControl("Drop_Prioridades"); 
      Drop_Prioridades.DataTextField = "BAIXA"; 
      Drop_Prioridades.DataValueField = "1"; 
      Drop_Prioridades.DataTextField = "MEDIA"; 
      Drop_Prioridades.DataValueField = "2"; 
      Drop_Prioridades.DataTextField = "ALTA"; 
      Drop_Prioridades.DataValueField = "3"; 
      Drop_Prioridades.DataBind(); 
     } 

Ho provato anche questo/stesso errore = \

DataSet ds = func.LoadPriority(); 

      foreach (DataRow row in ds.Tables[0].Rows) 
      { 
       ListItem item = new ListItem(); 
       item.Text = row["prioridade"].ToString(); 
       item.Value = row["id"].ToString(); 
       DropDownList ddlPrioridades = (DropDownList)e.Row.FindControl("Drop_Prioridades"); 
       ddlPrioridades.Items.Add(item); 
      } 

e abbiamo provato anche questo ...

HTML :

<columns>      

    <asp:TemplateField HeaderText="PRIORIDADE" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="100px"> 
      <ItemTemplate> 
       <asp:DropDownList ID="Drop_Prioridades" Width="120px" runat="server" ></asp:DropDownList> 
</ItemTemplate>      
</asp:TemplateField> 

Codice Dietro:

0.123.
DataSet ds = func.CarregaPrioridade(); 
      DropDownList ddlist = (DropDownList)e.Row.FindControl("Drop_Prioridades"); 
      ddlist.DataSource = ds; 
      ddlist.DataTextField = "prioridade"; 
      ddlist.DataValueField = "id"; 
+3

Meglio mostrano un certo codice. Che cosa hai provato? – Ofiris

+0

prova a fare una ricerca qui [tonnellate di esempi .NET] (http://www.google.com) – MethodMan

+0

Ho modificato il post. Questo è tutto ciò che ho ottenuto finora = \ Ho già cercato lì e lo sto ancora facendo ... Grazie – Ghaleon

risposta

0

ho risolto il mio problema come questo:

DataSet ds = SomeMethodToFillTheDataSet() 

foreach(DataRow row in ds.tables[0].Rows) 
{ 
    ListItem item = new ListItem(); 
    item.text = "fieldName"; e.g Name 
    item.value = "FieldName"; e.g ID 
    DropDOwnList.Items.Add(item); 
} 
1

dati Bind Row legati evento nel markup, come di seguito:

<asp:GridView ID="grvGrid" runat="server" OnRowDataBound="grvGrid_RowBound"> 
    <Columns> 
     <asp:TemplateField ItemStyle-HorizontalAlign="Left" ItemStyle-VerticalAlign="Top" ItemStyle-Width="7%"> 
       <ItemTemplate> 
        <asp:DropDownList ID="ddlList" runat="server"/> 
       </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView? 

nel codice dietro:

protected void grvGrid_RowBound(object sender, GridViewRowEventArgs e) 
{ 
    DropDownList ddlList= (DropDownList)e.Row.FindControl("ddlList"); 
    ddlList.DataSource = _dSource; 
    ddlList.DataTextField = "text"; 
    ddlList.DataValueField = "value"; 
    ddlList.DataBind(); 


    } 

O

Se discesa sta per avere lo stesso opzioni per ogni riga, non è necessario associarlo durante l'evento RowDataBound. È possibile aggiungere voci s all'elenco a discesa nel markup come di seguito:

<asp:DropDownList id="ddlList"runat="server"> 

       <asp:ListItem Selected="True" Value="White"> White </asp:ListItem> 
       <asp:ListItem Value="Silver"> Silver </asp:ListItem> 
       <asp:ListItem Value="DarkGray"> Dark Gray </asp:ListItem> 
       <asp:ListItem Value="Khaki"> Khaki </asp:ListItem> 
       <asp:ListItem Value="DarkKhaki"> Dark Khaki </asp:ListItem> 

      </asp:DropDownList> 
+0

Posso eseguire una normale query che restituisce un DataSet e creare un foreach sul set di dati e compilare il menu a discesa?con questo metodo mi hai mostrato? – Ghaleon

+0

@Ghaleon Il metodo 'grvGrid_RowBound' viene chiamato per ogni riga della griglia. Quindi il tuo set di dati _disponibile può essere un DataTable o DataView, se ti capisco correttamente .. e puoi leggere http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowdatabound. aspx per ulteriori informazioni – ajp

+0

No @Ghaleon, dovrai quindi usare ddlList.Items.Add() per aggiungere gli elementi in quel caso. – StingyJack

1

ddlList.DataTextField = "Text"; Se questa riga indica un errore, assicurarsi che nell'origine dati o nel set di dati si abbia lo stesso nome di colonna. se il suo nome di testo, quindi si dovrebbe assegnare ddlList.DataTextField = "textname";

Solo un pensiero!

+0

Ho controllato anche quello. Pensavo lo stesso che hai fatto! Ma va bene, quel metodo mi restituisce due colonne, chiamate: 'prioridade' e' id', ma ancora l'errore = \\ – Ghaleon

+0

Ma l'errore ora è nella riga che ho impostato DataSource: ddlist.DataSource = ds; – Ghaleon

+0

Hai qualche valore in ds ?? usa il punto di interruzione e controlla ciò che effettivamente restituisce. Hai SQLDATASOURCE nella tua pagina aspx? – rach

1

Si prega di seguire questo codice per assegnare un DataSource a discesa

DataTable dt = ds.tables[0]; 
    DropdownId.DataSource = dt; 
    DropdownId.DataTextField = "Text Column"; 
    DropdownId.DataValueField = "Value Column"; 
    DropdownId.DataBind(); 
    DropdownId.Items.Insert(0, new ListItem("-- Select --", "0")); 
Problemi correlati