0

如果存在多个,我正在尝试创建一个选项来选择 SQL 表中的特定条目。下面列出的 Sub 用于文本框 (MOTxt) 和按钮 (GotMO),用于检查从 SQL 中提取的 MO#。根据输入的数字,将使用该行的数据填充页面上的其他文本框。也有例外情况,其中 MONumber 将被输入不止一次,并且每个条目关联的不同数据。所以,这是我的情况。如果我们在表中列出了重复的 MONumber,它将使用它找到的第一个更新条目填充文本框。我想创建一个动态下拉列表(仅在找到多个时才显示)显示找到的每个 MONumber 的“名称”字段条目,然后从该列表中选择正确的名称,然后用该选定的数据行填充文本框。

这是我背后的代码:

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
4

1 回答 1

0

如果我这样做,我会更改代码,以便单击函数中的内容位于单独的函数中,以便您可以轻松地从其他函数中调用它。我会使用强类型对象而不是数据集来增加简洁性。还要向“加载数据”函数添加几个字符串参数以接受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

于 2012-04-09T20:56:00.863 回答