2012-04-09 53 views
0

我試圖創建一個選項來選擇SQL表中的特定條目(如果存在倍數)。下面列出的Sub是用於檢查從SQL提取的MO#的文本框(MOTxt)和按鈕(GotMO)。根據輸入的數字,將使用該行的數據填充頁面上的其他文本框。也有例外情況,其中MONumber將以不同的數據與每個條目相關聯輸入多次。所以,這是我的情況。如果我們在表中列出了重複的MONumber,它將使用找到的更新的第一個條目填充文本框。 我想創建一個動態下拉列表(只顯示找到倍數時顯示)顯示每個找到的MONumber的'Name'字段條目,然後一旦從該列表中選擇了正確的名稱,然後用該選定的datarow填充文本框。動態顯示DropDownList如果表中存在多個條目

這裏是我的代碼背後:

Protected Sub GotMONum_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles GotMO.Click 
    Dim da As New SqlDataAdapter 
    Dim ds As New DataSet 
    Dim MOLength As String = MOTxt.Text 
    Dim TieOffTemp As Integer 
    Dim QTYTemp As Integer 
    Dim MySelectQuery As String = "SELECT Name,ProdLine,NoRods,TieOffs FROM z_md_Outwrap WHERE MONumber = @MONum" 
    Dim myConnection As New SqlConnection(ConfigurationManager.ConnectionStrings("GLoomisDBConnectionString").ConnectionString) 
    Dim myCommand As New SqlCommand(MySelectQuery, myConnection) 

    Message2.InnerHtml = "" 
    Message.InnerHtml = "" 
    If (Me.MOTxt.Text = "") Then 
     MsgBox("Please enter an MO Number to check") 
    Else 
     ' Fills fields based on MO Number 
     myCommand.Parameters.AddWithValue("@MONum", MOTxt.Text) 
     myConnection.Open() 
     da.SelectCommand = myCommand 
     da.Fill(ds, "tblData") 
     myConnection.Close() 

     If ds IsNot Nothing AndAlso ds.Tables.Count > 0 AndAlso ds.Tables(0).Rows.Count > 0 Then 
      NameTxt.Text = ds.Tables("tblData").Rows(0).Item("Name") 
      ProdLineTxt.Text = ds.Tables("tblData").Rows(0).Item("ProdLine") 
      NoRodsTxt.Text = ds.Tables("tblData").Rows(0).Item("NoRods") 
      TieOffsTxt.Text = ds.Tables("tblData").Rows(0).Item("TieOffs") 

      If Integer.TryParse(NoRodsTxt.Text, QTYTemp) Then 
       If Integer.TryParse(TieOffsTxt.Text, TieOffTemp) And TieOffTemp > 0.0 Then 
        AmountVal.Text = "$" & (QTYTemp * TieOffTemp * 0.18) 
       End If 
      End If 
     Else 
      Message.InnerHtml = "No MO# found as entered. Please check for errors." 
      Message.Style("color") = "red" 
     End If 
    End If 

End Sub 
+0

您運行的是什麼版本的.NET的? – mutek 2012-04-09 20:03:38

+0

這是所有編程使用.net 4.0 – user988265 2012-04-09 20:07:09

回答

0

如果我這樣做,我會改變代碼,以便在您點擊功能的內容是在一個單獨的功能,使您可以從其他功能輕鬆調出。我會使用強類型對象而不是數據集來增加合作性。還要添加一些字符串參數到「Load Data」函數來接受monum和name字符串。

要查找的倍數,只是檢查的算什麼數據庫返回(datatable.rows.count或StronglyTypedObject.count)

接下來,創建一個無形的下拉列表控件,並將其設置爲可見,如果你的行數> 0.

使用Linq,綁定下拉列表非常簡單。然後在onselectedindexchanged事件上調用新的「加載數據」事件,傳遞與monumber一起選擇的名稱。

我不會去填充一個強類型的對象,因爲這個問題已經要求很多,但爲了讓你開始...下面的代碼示例就是這樣,不應該被視爲您將使用的實際代碼。

Protected Sub GotMONum_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles GotMO.Click 

    loaddata(monum.text, "") 
end sub 

protected sub loaddata(byval monum as string, byval name as string) 
    'your code here along with the following lines after: 
    Dim MySelectQuery As String = "" 
    myCommand.Parameters.AddWithValue("@MONum", MOTxt.Text) 

    if not string.isnullorempty(name) 
    MySelectQuery = "SELECT Name,ProdLine,NoRods,TieOffs FROM z_md_Outwrap WHERE MONumber = @MONum and Name = @name" 
    mycommand.Parameters.AddWithValue("@Name", Name) 
    else 
    MySelectQuery = "SELECT Name,ProdLine,NoRods,TieOffs FROM z_md_Outwrap WHERE MONumber = @MONum " 
    End If 
    'again, instead using a dataset, convert it to a list(of StronglyTypedObject) 

    if StronglyTypedObject.count > 0 then 
    dropdownlist.visible = true 
    dim dropdownlistcontents = (from a in StronglyTypedObject.AsEnumerable _ 
           Select a.Name).Distinct 
    dropdownlist.datasource = dropdownlistcontents 
    dropdownlist.databind 
    end if 
end sub 

Protected Sub DDL_OnSelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) handles dropdownlist.selectedindexchanged 
    loaddata(monum.text, "dropdownlist.selectedvalue") 
end sub 

希望這可以讓你對你的方式... - MUTEK

+0

感謝您的幫助:) 我得到的功能工作 – user988265 2012-04-11 15:39:14