2012-04-09 3 views
0

Ich versuche eine Option zu erstellen, um einen bestimmten Eintrag in einer SQL-Tabelle auszuwählen, wenn mehrere vorhanden sind. Der Sub, der unten aufgeführt wird, ist für ein Textfeld (MOTxt) und eine Schaltfläche (GotMO) für das Überprüfen eines MO #, um aus SQL zu ziehen. Basierend auf der eingegebenen Nummer werden andere Textfelder auf der Seite mit den Daten dieser Zeile ausgefüllt. Es gibt Ausnahmen, bei denen die Monatsnummer mehrmals mit verschiedenen Daten für jeden Eintrag eingegeben wird. Also, hier ist meine Situation. Wenn wir eine doppelte MONumber in der Tabelle aufgelistet haben, füllt es die Textfelder mit dem ersten Eintrag, der für ein Update gefunden wird. Ich möchte eine dynamische Dropdownliste erstellen (die nur angezeigt wird, wenn Vielfache gefunden werden), die Feldeinträge "Name" für jede gefundene MONumber anzeigen und dann den richtigen Namen aus dieser Liste auswählen, um dann die Textfelder mit diesem ausgewählten Datenfeld zu füllen .DropDownList dynamisch angezeigt, wenn mehrere Einträge in der Tabelle vorhanden sind

mein Code hier hinter:

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

Welche Version von .net sind Sie? – mutek

+0

das ist alles mit .net 4.0 programmiert – user988265

Antwort

0

Wenn ich dies tun würde, würde ich den Code ändern, so dass der Inhalt in Ihrer Klick-Funktion in einer separaten Funktionen ist so, dass man es leicht von anderen Funktionen aufrufen kann . Ich würde ein stark typisiertes Objekt anstelle eines Datensatzes für zusätzliche Symplizität verwenden. Fügen Sie der Funktion "Load Data" auch einige Zeichenfolgenargumente hinzu, um Monum- und Namenszeichenfolgen zu akzeptieren.

Multiples zu finden, überprüfen Sie einfach die Anzahl der, was die Datenbank zurückkehrt (datatable.rows.count oder StronglyTypedObject.count)

nächste eine unsichtbare Steuerelement Dropdownlist erstellen und auf sichtbar gesetzt, wenn Ihre Zeilenanzahl> 0.

mit Linq, Bindung der Dropdown-Liste ist ziemlich geradlinig. Rufen Sie dann das neue Ereignis "Daten laden" für das Ereignis onselectedindexchanged auf und übergeben Sie den ausgewählten Namen zusammen mit der Monumber.

Ich werde nicht in ein stark typisiertes Objekt füllen, da diese Frage bereits viel verlangt, aber um Sie zu beginnen ... Das folgende Codebeispiel ist genau das und sollte nicht als der eigentliche Code genommen werden .

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 

Hoffentlich bekommt man auf dem Weg ... - Mutek

+0

Danke für die Hilfe :) Ich habe die Funktionalität funktioniert – user988265

Verwandte Themen