2014-07-09 34 views
0

我會認爲這段代碼應該是非常簡單和直接,但我有問題。下面的子頁面在頁面加載時被調用。它位於加載其他下拉列表的類似函數之間。所有其他的下拉菜單都在填充,但這些都不是。其他下拉式子集使用相同的With子句,但綁定到DataSet(一個表),該DataSet使用對數據庫的存儲過程調用進行填充,而不是綁定到靜態DataTable。DataTable不綁定到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作爲DataTable **到** Dim dtMain作爲_New_ DataTable **。 Dim DimGypsum與新數據表**相同** – HengChin

回答

1

你應該聲明你的數據表作爲對象

嘗試以下:

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實際上會將新添加的DataRow的DataRowState從已添加更改爲未更改。檢查this了。