SelectedIndexChanging не срабатывает

У меня есть раскрывающийся список, который я заполняю из кода, и у меня есть элемент управления Gridview под раскрывающимся списком, который я также заполняю из кода. Моя цель - выбрать отдел из раскрывающегося списка и заполнить элемент управления Gridview всеми сотрудниками этого отдела.

Это мой код для заполнения моего элемента управления Gridview:


Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load

        If Not Me.IsPostBack Then      

            LoadDataGrid()
            FillWithDepartments()

        End If

    End Sub


 Private Sub LoadDataGrid()

        Try
            Using conn As New SqlConnection(ConfigurationManager.ConnectionStrings("###").ConnectionString)

                Using cmd As New SqlCommand("SELECT Departments.ShortDescription AS [Department] ,  CostCentre AS [Cost Centre] , FirstName AS [Name] , LastName AS [Surname] , MedicalResults.EmployeeID AS [ID No]  , EmployeeCodes.Code AS [Clock No] ,MedicalResults.[DateTested] AS [Date Tested]  , MedicalResults.[NextDueDate] AS [Next Due Date] , MedicalResults.ECGDate AS [ECG] , MedicalResults.LungFunctionDate AS [Lungfunction] , MedicalResults.AudioGramDate AS [Hearing Test] , MedicalResults.EyeTestDate AS [Eye Test] , OtherProblems AS [Other Problems] , Notes FROM MedicalResults, EmployeeCodes , EmployeevsPositionLink , PositionCodes , Departments WHERE MedicalResults.ID = EmployeeCodes.ID AND EmployeevsPositionLink.EmployeeID = EmployeeCodes.ID AND EmployeevsPositionLink.PositionID = PositionCodes.ID AND PositionCodes.DepartmentCode = Departments.Code AND  EmployeeCodes.TerminationDate Is Null AND EmployeevsPositionLink.PositionNumber = '1' AND   MedicalResults.EmployeeID = EmployeeCodes.EmployeeID Order By DateTested DESC", conn)
                    Dim sda As New SqlDataAdapter(cmd)
                    Dim dt As New DataTable()

                    sda.Fill(dt)
                    GridView1.DataSource = dt
                    GridView1.DataBind()

                End Using

            End Using

        Catch ex As Exception

        End Try

    End Sub


Это код для заполнения моего раскрывающегося списка из кода позади:

    Protected Sub FillWithDepartments()

        Using conn As New SqlConnection(ConfigurationManager.ConnectionStrings("###").ConnectionString)
            'conn.Open()

            Dim cmd As New SqlCommand("SELECT Code , ShortDescription  FROM Departments", conn)
            Dim adapter As New SqlDataAdapter(cmd)
            Dim tbl As New DataTable()
            adapter.Fill(tbl)
            drplstDepartment.DataSource = tbl
            drplstDepartment.DataTextField = "ShortDescription"
            drplstDepartment.DataValueField = "Code"
            drplstDepartment.DataBind()

            ' conn.Close()

        End Using
    End Sub

Интерфейсный код для раскрывающегося списка


<asp:DropDownList ID = "drplstDepartment" OnSelectedIndexChanged = "drplstDepartment_SelectedIndexChanged"  CssClass = "form-control mb-2 mr-sm-2" runat = "server" AutoPostBack = "true">       
    </asp:DropDownList>

Интерфейсный код для представления сетки


     <asp:GridView  RowStyle-CssClass = "text-center" OnPageIndexChanging = "GridView1_PageIndexChanging" OnSelectedIndexChanging = "GridView1_SelectedIndexChanging"   AllowPaging = "true" class = "table table-default table-striped table-bordered table-condensed table-responsive table-hover" border = "1" ID = "GridView1" runat = "server" HeaderStyle-HorizontalAlign = "Center" HeaderStyle-VerticalAlign = "Middle" HeaderStyle-BackColor = "#6C6C6C" HeaderStyle-ForeColor = "White"  RowStyle-BackColor = "#eeeeee" AlternatingRowStyle-BackColor = "White" AlternatingRowStyle-ForeColor = "#000" RowStyle-ForeColor = "#000"  AutoGenerateColumns = "false" >
                 <Columns>
                     <asp:ButtonField ItemStyle-Width = "150px"                                         DataTextField= "Department"     HeaderText = "Department"/>
                     <asp:ButtonField ItemStyle-Width = "150px"                                         DataTextField= "Cost Centre"    HeaderText = "Cost Centre"/>
                     <asp:ButtonField ItemStyle-Width = "150px"                                         DataTextField= "Name"           HeaderText = "Name" />
                     <asp:ButtonField ItemStyle-Width = "150px"                                         DataTextField= "Surname"        HeaderText = "Surname"/>                     
                     <asp:ButtonField ItemStyle-Width = "150px"                                         DataTextField= "ID No"          HeaderText = "ID No"/>
                     <asp:ButtonField ItemStyle-Width = "150px"                                         DataTextField= "Clock No"       HeaderText = "Clock No"/>
                     <asp:ButtonField ItemStyle-Width = "150px"   DataTextFormatString = "{0:dd/MM/yyyy}"  DataTextField= "Date Tested"    HeaderText = "Date Tested"/>
                     <asp:ButtonField ItemStyle-Width = "150px"   DataTextFormatString = "{0:dd/MM/yyyy}"  DataTextField= "Next Due Date"  HeaderText = "Next Due Date"/>
                     <asp:ButtonField ItemStyle-Width = "150px"   DataTextFormatString = "{0:dd/MM/yyyy}"  DataTextField= "ECG"            HeaderText = "ECG"/>
                     <asp:ButtonField ItemStyle-Width = "150px"   DataTextFormatString = "{0:dd/MM/yyyy}"  DataTextField= "Lungfunction"   HeaderText = "Lungfunction"/>
                     <asp:ButtonField ItemStyle-Width = "150px"   DataTextFormatString = "{0:dd/MM/yyyy}"  DataTextField= "Hearing Test"   HeaderText = "Hearing Test"/>
                     <asp:ButtonField ItemStyle-Width = "150px"   DataTextFormatString = "{0:dd/MM/yyyy}"  DataTextField= "Eye Test"       HeaderText = "Eye Test"/>
                     <asp:ButtonField ItemStyle-Width = "150px"                                         DataTextField= "Other Problems" HeaderText = "Other Problems"/>
                     <asp:ButtonField ItemStyle-Width = "150px"                                         DataTextField= "Notes"          HeaderText = "Notes"/>  


                 </Columns>

                </asp:GridView>

Это код, который не срабатывает

   Protected Sub drplstDepartment_SelectedIndexChanged(sender As Object, e As EventArgs)
        Dim dt As DataTable = New DataTable()
        Using conn As New SqlConnection(ConfigurationManager.ConnectionStrings("#").ToString())

            Dim cmd As New SqlCommand("SELECT Departments.ShortDescription AS [Department] ,  CostCentre AS [ Cost Centre] , FirstName AS [Name] , LastName AS [Surname] , MedicalResults.EmployeeID AS [ID No]  , EmployeeCodes.Code AS [Clock No] ,CONVERT(nvarchar(10), MedicalResults.[DateTested], 101) AS [Date Tested]  ,CONVERT(nvarchar(10), MedicalResults.[NextDueDate], 101)  AS [Next Due Date] , CONVERT(nvarchar(10), MedicalResults.ECGDate, 101) AS [ECG] , CONVERT(nvarchar(10), MedicalResults.LungFunctionDate, 101)  AS [Lungfunction] , CONVERT(nvarchar(10), MedicalResults.AudioGramDate, 101)   AS [Hearing Test] , CONVERT(nvarchar(10), MedicalResults.EyeTestDate, 101)  AS [Eye Test] , OtherProblems AS [Other Problems] , Notes FROM MedicalResults, EmployeeCodes , EmployeevsPositionLink , PositionCodes , Departments WHERE  MedicalResults.ID = EmployeeCodes.ID AND EmployeevsPositionLink.EmployeeID = EmployeeCodes.ID AND EmployeevsPositionLink.PositionID = PositionCodes.ID AND PositionCodes.DepartmentCode = Departments.Code AND  EmployeeCodes.TerminationDate Is Null AND EmployeevsPositionLink.PositionNumber = '1' AND   MedicalResults.EmployeeID = EmployeeCodes.EmployeeID AND (Departments.ShortDescription = @ShortDescription)", conn)

            cmd.Parameters.AddWithValue("@ShortDescription", drplstDepartment.SelectedValue)
            Dim da As New SqlDataAdapter(cmd)
            da.Fill(dt)
            GridView1.DataSource = dt
            GridView1.DataBind()
        End Using

    End Sub

Вы проверили, что drplstDepartment.SelectedValue имеет значение, которое вы ожидаете в этой точке кода? Также AddWithValue — зло, AddWithValue — это зло! и Можем ли мы уже отказаться от использования AddWithValue()?

Andrew Morton 30.05.2019 20:01
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте это вместо этого в своем мероприятии drplstDepartment_SelectedIndexChanged:

Dim cmd As New SqlCommand("SELECT 
... 
FROM
...
WHERE 
...
AND (Departments.Code = @Code)", conn)

cmd.Parameters.AddWithValue("@Code", drplstDepartment.SelectedItem.Value)

@Code соответствует drplstDepartment.SelectedItem.Value, @ShortDescription соответствует drplstDepartment.SelectedItem.Text.

Спасибо, ребята, за вашу помощь, мне удалось решить проблему. Мне пришлось изменить только одну строку, drplstDepartment.SelectedItem.Text, и это сработало.

Tevin 31.05.2019 07:15

Можно возразить, что лучше сверяться с кодом отдела или уникальным идентификатором, если он есть, чтобы предотвратить возможные проблемы с результатами.

dutchess 31.05.2019 14:40

Другие вопросы по теме