2013-02-15 3 views
5

У меня есть контроль над HTML selectКак заполнить «выбрать» из базы данных в asp.net

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

Как я могу заполнить его данными из моей базы данных SQL Server с помощью C# или JavaScript/jQuery/JSON?

Пожалуйста, не публикуйте ответы на вопрос о том, как заполнить asp:DropDownList, потому что я уже знаю, как это сделать, я должен использовать элемент управления select.

+0

Предпочитаете ли вы JSON или найти C# решение не очень хорошо? – MikroDel

+1

@ enb081 смотрите здесь json через wcf http://stackoverflow.com/questions/2086666/wcf-how-do-i-return-clean-json –

ответ

16

ASPX:

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

    </select> 

код позади:

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

Что такое '' au_fname'' и зачем его использовать? –

+0

в этом конкретном случае это будет столбец в таблице авторов из строки QueryString. Поэтому, если бы у нас были Стивен Кинг, Джон Гришам и Эмили Бронте в виде строк в таблице, у этого списка были бы варианты для Стивена, Джона и Эмили. Текст - это то, что видно, значение - отправленный элемент. Поэтому я, вероятно, фактически установил DataValueField эквивалентом author_id. Вероятно, также добавит результат First Name + Last Name в запрос DataTextField, потому что, что происходит, когда у вас есть Tom Clancy и Tom Brokaw? Могли бы рассмотреть вопрос о добавлении дат для фильтрации, где тоже одно и то же имя. – Robert

2

Вы можете использовать json в AJAX, но вы должны вернуться в формате JSON от сервера, используя некоторые веб-сервиса.

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

}; 

Вы можете использовать asp.net WebAPI для JSON, это очень легко и быстро

+0

Как создать метод, который возвращает данные из базы данных как json? – enb081

+0

Вы используете mvc или webforms? –

+0

Я использую webforms. – enb081

3

В коде позади:

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

, а затем вы можете использовать JQuery:

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

Вы можете использовать повторитель

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