2014-07-09 4 views
0

Я бы подумал, что этот код должен быть очень простым и прямым, но у меня проблемы. Нижняя часть ниже вызывается при загрузке страницы. Он расположен между аналогичными функциями, которые загружают другие выпадающие списки. Все остальные спускаются, но это не так. Другие выпадающие субтитры используют одно и то же предложение WITH, но привязываются к DataSet (из одной таблицы), который заполняется вызовом хранимой процедуры в базу данных, а не привязывается к статическому DataTable.DataTable Not Binding to ASP: DropDownList

VB код:

Private Sub LoadEquations() 
      Dim dtMain As DataTable 
      Dim dtGypsum As DataTable 
      Dim dr As DataRow 

      dtMain.Columns.Add("Text") 
      dtMain.Columns.Add("Value") 

      dr = dtMain.NewRow 
      dr.Item("Text") = " " 
      dr.Item("Value") = "0" 
      dtMain.Rows.Add(dr) 
      dtMain.AcceptChanges() 

      dr = dtMain.NewRow 
      dr.Item("Text") = "Build" 
      dr.Item("Value") = "B" 
      dtMain.Rows.Add(dr) 
      dtMain.AcceptChanges() 

      dr = dtMain.NewRow 
      dr.Item("Text") = "Maintain" 
      dr.Item("Value") = "M" 
      dtMain.Rows.Add(dr) 
      dtMain.AcceptChanges() 

      With Me.ddMainEquation 
       .DataSource = dtMain 
       .DataTextField = "Text" 
       .DataValueField = "Value" 
       .DataBind() 
      End With 


      dtGypsum.Columns.Add("Text") 
      dtGypsum.Columns.Add("Value") 

      dr = dtGypsum.NewRow 
      dr.Item("Text") = " " 
      dr.Item("Value") = "0" 
      dtGypsum.Rows.Add(dr) 
      dtGypsum.AcceptChanges() 

      dr = dtGypsum.NewRow 
      dr.Item("Text") = "pH Base" 
      dr.Item("Value") = "P" 
      dtGypsum.Rows.Add(dr) 
      dtGypsum.AcceptChanges() 

      dr = dtGypsum.NewRow 
      dr.Item("Text") = "% Sodium Base" 
      dr.Item("Value") = "S" 
      dtGypsum.Rows.Add(dr) 
      dtGypsum.AcceptChanges() 

      With Me.ddGypsumEquation 
       .DataSource = dtGypsum 
       .DataTextField = "Text" 
       .DataValueField = "Value" 
       .DataBind() 
      End With 
     End Sub 

DNN/ASP код:

<tr> 
    <td> 
     <asp:Label ID="lblMainEquation" runat="server" 
      CssClass="FormLabelLeft">Main Equation</asp:Label></td> 
    <td> 
     <asp:Label ID="lblGypsumEquation" runat="server" 
      CssClass="FormLabelLeft">Gypsum Equation</asp:Label></td> 
</tr> 
<tr> 
    <td> 
     <asp:DropDownList ID="ddMainEquation" TabIndex="34" 
      runat="server" CssClass="FormField"></asp:DropDownList></td> 
    <td> 
     <asp:DropDownList ID="ddGypsumEquation" TabIndex="34" 
      runat="server" CssClass="FormField"></asp:DropDownList></td> 
</tr> 

Что мне не хватает? Я использую более старую платформу DNN 2.0.

+0

Ваш код выглядит хорошо. Вам нужно установить точку останова внутри 'LoadEquations()' и убедиться, что вызывается 'LoadEquations()'. – Win

+0

Попробуйте изменить ** Dim dtMain As DataTable ** to ** Dim dtMain As _New_ DataTable **. То же самое для ** Dim dtGypsum As New DataTable ** – HengChin

ответ

1

Вы должны объявить DataTable как Новый объект

Попробуйте ниже:

Private Sub LoadEquations() 
    Dim dtMain As New DataTable 
    Dim dtGypsum As New DataTable 
    Dim dr As DataRow 

    dtMain.Columns.Add("Text") 
    dtMain.Columns.Add("Value") 

    dr = dtMain.NewRow 
    dr.Item("Text") = " " 
    dr.Item("Value") = "0" 
    dtMain.Rows.Add(dr) 

    dr = dtMain.NewRow 
    dr.Item("Text") = "Build" 
    dr.Item("Value") = "B" 
    dtMain.Rows.Add(dr) 

    dr = dtMain.NewRow 
    dr.Item("Text") = "Maintain" 
    dr.Item("Value") = "M" 
    dtMain.Rows.Add(dr) 

    With ddMainEquation 
     .DataSource = dtMain 
     .DataTextField = "Text" 
     .DataValueField = "Value" 
     .DataBind() 
    End With 

    dtGypsum.Columns.Add("Text") 
    dtGypsum.Columns.Add("Value") 

    dr = dtGypsum.NewRow 
    dr.Item("Text") = " " 
    dr.Item("Value") = "0" 
    dtGypsum.Rows.Add(dr) 

    dr = dtGypsum.NewRow 
    dr.Item("Text") = "pH Base" 
    dr.Item("Value") = "P" 
    dtGypsum.Rows.Add(dr) 

    dr = dtGypsum.NewRow 
    dr.Item("Text") = "% Sodium Base" 
    dr.Item("Value") = "S" 
    dtGypsum.Rows.Add(dr) 

    With ddGypsumEquation 
     .DataSource = dtGypsum 
     .DataTextField = "Text" 
     .DataValueField = "Value" 
     .DataBind() 
    End With 
End Sub 

Кстати, AcceptChanges() действительно не требуется каждый раз после добавления в новый ряд. Вызов AcceptChanges после добавления новой строки фактически превратит DataRowState из вашего недавно добавленного DataRow из добавленного в неизмененный. проверка this вне.