2013-02-15 9 views
5

Mam kontroli HTML selectJak wypełnić „wybrać” z bazy danych w ASP.NET

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

Jak mogę wypełnić go z danymi z mojej bazy danych SQL Server wykorzystaniem C# lub JavaScript/jQuery/JSON?

Proszę nie zamieszczać odpowiedzi na temat wypełniania asp:DropDownList, ponieważ już wiem, jak to zrobić, muszę użyć kontrolki select.

+0

Wolisz JSON lub C# nie znaleźć rozwiązanie bardzo dobre? – MikroDel

+1

@ enb081 poszukaj tutaj json przez wcf http://stackoverflow.com/questions/2086666/wcf-how-do-i-return-clean-json –

Odpowiedz

16

aspx:

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

    </select> 

za:

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

Co to jest "au_fname" i dlaczego go używać? –

+0

w tym konkretnym przypadku byłaby to kolumna w tabeli autorów z wiersza QueryString. Gdybyśmy mieli Stephena Kinga, Johna Grishama i Emily Bronte w rzędach w tabeli, lista miałaby opcje dla Stephena, Johna i Emily. Tekst jest tym, co widać, a wartość jest przesyłanym przesyłką. Więc prawdopodobnie ustawiłbym DataValueField na odpowiednik author_id. Czy w wynikach zapytania DataTextField prawdopodobnie pojawiłoby się również pytanie "Imię i nazwisko", bo co się dzieje, gdy Tom Clancy i Tom Brokaw? Można rozważyć dodanie dat filtrowania, jeśli nazwa jest taka sama. – Robert

2

Można użyć json w Ajax, ale trzeba wrócić jak JSON z serwera przy użyciu niektórych usługa.

$.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); 
    }); 

}; 

Można użyć asp.net WebAPI dla JSON, to jest bardzo proste i szybkie

+0

Jak utworzyć metodę zwracającą dane z bazy danych jako json? – enb081

+0

używasz mvc lub formularzy internetowych? –

+0

Korzystam z formularzy internetowych. – enb081

3

W kodzie za:

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; 
     } 

a następnie można użyć jQuery:

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

Można użyć repeater

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