2013-02-15 16 views
5

Ho un controllo html selectCome popolare 'selezionare' dal database in asp.net

<select id="Select1" runat="server" name="D1"> 
    <option></option> 
</select> 

Come posso compilarlo con i dati dal mio SQL Server database utilizzando C# o JavaScript/jQuery/JSON?

Per favore, non pubblicare le risposte su come popolare uno asp:DropDownList perché so già come farlo, devo usare un controllo select.

+0

Preferisci JSON o trovare C# soluzione non molto buona? – MikroDel

+1

@ enb081 guarda qui per json via wcf http://stackoverflow.com/questions/2086666/wcf-how-do-i-return-clean-json –

risposta

16

aspx:

codice
<select id="Select1" runat="server" name="D1"> 

    </select> 

dietro:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     string ConnectString = "server=localhost;database=pubs;integrated security=SSPI"; 
     string QueryString = "select * from authors"; 

     SqlConnection myConnection = new SqlConnection(ConnectString); 
     SqlDataAdapter myCommand = new SqlDataAdapter(QueryString, myConnection); 
     DataSet ds = new DataSet(); 
     myCommand.Fill(ds, "Authors"); 

     Select1.DataSource = ds; 
     Select1.DataTextField = "au_fname"; 
     Select1.DataValueField = "au_fname"; 
     Select1.DataBind(); 
    } 
} 
+0

Che cos'è "" au_fname "' e perché usarlo? –

+0

in questo caso particolare, sarebbe una colonna nella tabella authors della riga QueryString. Quindi se avessimo Stephen King, John Grisham ed Emily Bronte come file nel tavolo, l'elenco avrebbe quindi opzioni per Stephen, John ed Emily. Il testo è ciò che è visto, il valore è l'oggetto inviato. Quindi probabilmente avrei impostato DataValueField sull'equivalente di author_id. Probabilmente aggiungerebbe anche un risultato Nome + Cognome nella query per DataTextField perché cosa succede quando hai Tom Clancy e Tom Brokaw? Potresti prendere in considerazione l'aggiunta di date per il filtraggio, dove il nome è lo stesso. – Robert

2

È possibile utilizzare json in ajax, ma è necessario ritorno, JSON dal server utilizzando alcuni webservice.

$.ajax({ 
    url:'/path/to/webservice/method', 
    type:'POST', 
    dataType: 'json', 
    success: function(data){ 
     $.each(data, function(i, item){ 
      $('<option value="'+item.val+'">'+item.text+'</option>').appendTo('#Select1'); 
     }); 
    }, 
    error: function(){ 
     console.log('err') 
    } 
}); 
5
function GetItems() { 

var items; 

    $.getJSON("/api/MethodName/" + id(Optional), function (data) { 
     $.each(data, function (key, val) { 
      items += "<option value='" + val.id+ "'>" + val.value+ "</option>";  
     }); 

     var header = '<option value=\'\'>Select...</option>'; 
     $('#Select1').html(header + items); 
    }); 

}; 

È possibile utilizzare asp.net WebAPI per JSON, è molto facile e veloce

+0

Come posso creare il metodo che restituisce i dati dal database come json? – enb081

+0

stai usando mvc o webform? –

+0

Im utilizzando webforms. – enb081

3

Nel codice dietro:

string options = string.Empty; 
using (SqlConnection sql_conn = new SqlConnection(ConfigurationManager.ConnectionStrings["connstr"].ToString())) 
     { 
      SqlDataAdapter sql_adapter = new SqlDataAdapter("select Value, Name from YourTable", sql_conn); 
      DataSet ds = new DataSet(); 
      sql_adapter.Fill(ds, "TempTable"); 

      foreach (DataRow row in ds.Tables["TempTable"].Rows) 
      { 
       options = "<option value='" + row["Value"] + "'>" + row["Name"] + "</option>"; 
      } 
      sql_conn.Close(); 
      return options; 
     } 

e quindi è possibile utilizzare jQuery:

$.get(url, function (data) {   
     $('#Select1').html(data); 
    }); 
2

è possibile utilizzare un ripetitore

<select> 
<asp:Repeater ID="Repeater1" runat ="server" DataSourceID="SqlDataSource1"> 
    <ItemTemplate> 
     <option value='<%# Eval("ID")%>'> <%# Eval("ITEMNAME")%></option> 
    </ItemTemplate> 
</asp:Repeater> 
</select> 
Problemi correlati