2012-04-09 50 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