0

複数が存在する場合、SQLテーブルの特定のエントリを選択するオプションを作成しようとしています。以下にリストされているサブは、SQLからプルするMO#をチェックするためのテキストボックス(MOTxt)とボタン(GotMO)用です。入力した数値に基づいて、ページ上の他のテキストボックスにその行のデータを入力します。これには例外があり、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

これを行う場合、クリック関数の内容が別の関数になるようにコードを変更して、他の関数から簡単に呼び出せるようにします。シンプリシティを追加するために、データセットの代わりに厳密に型指定されたオブジェクトを使用します。また、"Load Data" 関数にいくつかの文字列引数を追加して、monum と名前の文字列を受け入れます。

複数を見つけるには、データベースが返すものの数を確認してください (datatable.rows.count または StronglyTypedObject.count)

次に、非表示のドロップダウン リスト コントロールを作成し、行数が > 0 の場合に表示に設定します。

Linq を使用すると、ドロップダウン リストをバインドするのはかなり簡単です。次に、選択した名前と monumber を渡して、onselectedindexchanged イベントで新しい「データのロード」イベントを呼び出します。

この質問はすでに多くのことを求めているため、強く型付けされたオブジェクトを埋めることはしませんが、始めるために... 次のコード例はまさにそれであり、使用する実際のコードとして解釈されるべきではありません。

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 に答える