2012-04-09 1 views
0

Я пытаюсь создать опцию для выбора конкретной записи в таблице SQL, если существуют множественные числа. Sub, приведенный ниже, предназначен для текстового поля (MOTxt) и кнопки (GotMO) для проверки MO # для вывода из SQL. На основе введенного числа будут заполнены другие текстовые поля на странице данными этой строки. Существуют исключения из этого, где MONumber будет вводиться несколько раз с разными данными, связанными с каждой записью. Итак, вот моя ситуация. Если у нас есть дубликат MONumber, указанный в таблице, он заполнит текстовые поля первой записью, которую он найдет для обновления. Я хотел бы создать динамический выпадающий список (который отображается только в том случае, если будут найдены множественные числа), отображая записи поля «Имя» для каждого найденного MONumber, а затем, как только правильное имя выбрано из этого списка, чтобы затем заполнить текстовые поля выбранным 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

+0

все это запрограммировано с использованием .net 4.0 – user988265

ответ

0

Если бы я делал это, я хотел бы изменить код так, чтобы содержимое в вашей функции мыши находится в отдельных функциях, так что вы можете вспомнить его легко из других функций , Я бы использовал строго типизированный объект вместо набора данных для добавленной симпликации. Также добавьте пару строковых аргументов в функцию «Загрузить данные», чтобы принять строки monum и name.

Чтобы найти кратные, просто проверить счет того, что база данных возвращается (datatable.rows.count или StronglyTypedObject.count)

Далее создайте невидимый контроль DROPDOWNLIST и установить его видимым, если ваш счетчик строка> 0.

Использование Linq, привязка выпадающего списка довольно прямолинейно. Затем вызовите новое событие «load data» в событии 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

+0

Спасибо за помощь :) Я получил функциональность – user988265

 Смежные вопросы

  • Нет связанных вопросов^_^