2016-09-01 2 views
1

Мой список удаленных ссылок не заполняется, я смотрел на другие темы здесь, и они, похоже, не помогают. Я не получаю никаких ошибок или чего-то еще, и мои загрузки в веб-форме просто находят. Другая реализация базы данных работает правильно. Это должно быть что-то простое, что мне не хватает. Я также внедрил if(!IsPostBack){ddlBatchCodeBind(); с загрузкой страницы и ничего не сделал.Databound DropDownList Not Population (Нет ошибок)

public void ddlBatchCodeDelBind() 
{ 
    using (SqlConnection conn = new SqlConnection(GetConnectionString())) 
    { 
     try 
     { 
      SqlDataAdapter ada = new SqlDataAdapter("SELECT BatchCode, BatchCodeDesc FROM BatchTable", conn); 
      DataTable batch_codes = new DataTable(); 
      ada.Fill(batch_codes); 
      ddlBatchCodeDel.DataSource = batch_codes; 
      ddlBatchCodeDel.DataTextField = "BatchCodeDesc"; 
      ddlBatchCodeDel.DataValueField = "BatchCode"; 
      ddlBatchCodeDel.DataBind(); 
     } 
     catch(SqlException ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
     finally 
     { 
       conn.Close(); 
     } 
    } 

} 


<asp:DropDownList ID="ddlBatchCodeDe" runat="server" AppendDataBoundItems="true"><asp:ListItem Text=Select item to Delete" Value="0"> </asp:ListItem></asp:DropDownList> 
+2

Вы помеченный 'ASP.NET', но я думаю, что нет' 'MessageBox.Show' в ASP.NET', я прав? –

+0

Для внутренних целей я использую 'System.Windows.Forms;' просто для того, чтобы выбросить ошибки, но они будут изменены. – walangala

+1

Вы упомянули событие Databound, но я не вижу никакого события 'Databound 'в' DropDownList ', можете ли вы предоставить все соответствующие коды? –

ответ

0

Вот альтернативный способ, который можно связать с DataTable без использования SqlDataAdapter

using (SqlConnection conn = new SqlConnection(GetConnectionString())) 
using (SqlCommand cmd = new SqlCommand("SELECT BatchCode, BatchCodeDesc FROM BatchTable", conn)) 
{ 
    try 
    { 
     conn.Open(); 
     DataTable batch_codes = new DataTable(); 
     batch_codes.Load(cmd.ExecuteReader()); 
     ddlBatchCodeDel.DataSource = batch_codes; 
     ddlBatchCodeDel.DataTextField = "BatchCodeDesc"; 
     ddlBatchCodeDel.DataValueField = "BatchCode"; 
     ddlBatchCodeDel.DataBind(); 
    } 
    catch (Exception ex) 
    { 
     Response.Write(ex.Message); 
    } 
} 
+0

Я ценю помощь, но на самом деле я так похож на этот пример, и это пробовал, такую ​​же проблему, никаких ошибок или чего-то еще, но это не сработало, это так странно, потому что у меня было это раньше, и это сработало. Я удалил его, чтобы проверить что-то еще, и мне это не понравилось, когда я снова реализовал код, этот вопрос возник. – walangala

+0

вы можете показать код 'Page_Load', тогда ... возможно, что-то происходит в Post_Back, и вы должны иметь в этом коде код else 'if (!IsPostBack) {ddlBatchCodeBind();} 'использовать отладчик и убедиться, что у datatable действительно есть значения. – MethodMan

+0

Я довольно новичок в этом, у меня нет ничего, что делает что-либо в этом блоке кода, это просто страница загрузить с помощью if. – walangala

0

Это происходит, когда я проверяю его. Если предположить, что выпадающий список правильно отформатированные

<asp:DropDownList ID="ddlBatchCodeDel" runat="server" AppendDataBoundItems="true"></asp:DropDownList> 

И вам не нужно finally при использовании using. Он закроет и удалит соединение для вас. Но лучше обернуть SqlDataAdapter в using, так как он использует интерфейс IDisposable.

  using (SqlConnection conn = new SqlConnection(GetConnectionString())) 
      using (SqlDataAdapter ada = new SqlDataAdapter("SELECT BatchCode, BatchCodeDesc FROM BatchTable", conn)) 
      { 
       try 
       { 
        DataTable batch_codes = new DataTable(); 
        ada.Fill(batch_codes); 
        ddlBatchCodeDel.DataSource = batch_codes; 
        ddlBatchCodeDel.DataTextField = "BatchCodeDesc"; 
        ddlBatchCodeDel.DataValueField = "BatchCode"; 
        ddlBatchCodeDel.DataBind(); 
       } 
       catch (Exception ex) 
       { 
        //MessageBox.Show(ex.Message); 
       } 
      } 

И я уверен, что MessageBox.Show это WinForms вещь, а не asp.net один.

+0

Что вы имеете в виду, отформатированный правильно? Он отображается на странице, но мое начальное значение является единственным, если я нажму на него, он ничего не отобразит. – walangala

+0

В вашем фрагменте отсутствует L 'ddlBatchCodeDe'. И« Text = Select item to Delete »' отсутствует »после знака = – VDWWD

+0

это опечатки, но в моем фактический код не пропал. Я исправлю его здесь, но я не знаю, что не так, и для messagebox.show, это только для тестирования, которое будет изменено. Я использую пространство имен форм Windows, чтобы показать любые ошибки – walangala

0

Это не ответ, но я не мог сказать, что это в комментариях, так вот она:

Пожалуйста, попробуйте ввести код и сообщить о результатах. (Пожалуйста, ничего не изменится в Page_Load или где-нибудь еще)

public void ddlBatchCodeDelBind() 
{ 
    var x = new Dictionary<int, string>(); 
    x.Add(1, "Data 1"); 
    x.Add(2, "Data 2"); 
    x.Add(3, "Data 3"); 

    ddlBatchCodeDel.DataSource = X; 
    ddlBatchCodeDel.DataTextField = "Value"; 
    ddlBatchCodeDel.DataValueField = "Key"; 
    ddlBatchCodeDel.DataBind(); 
} 
Смежные вопросы