1

2 つのカスケード ドロップダウン リストと、ネストされたグリッドビューを含む更新パネルを使用する Web ページを開発しています。

カスケード ドロップダウン リストを正しく機能させることができました。また、ネストされたグリッドビューを機能させることもできました。

次のステップは、2 番目のカスケード ドロップダウン リストの選択に基づいて、グリッドビューを設定することです。ここで、更新パネルが機能します。2 番目のドロップダウン リストを選択したら、更新パネルを更新して、ネストされたグリッドビューを読み込むことができると考えました。ドキュメントを調べたところ、更新パネルを強制的にリロードするには何らかのトリガーが必要であることがわかりましたが、何かを正しく行っていないはずです...

更新パネル内で、trigger パラメーターを使用します。ここで、cddMachineは 2 番目のドロップダウン リストの名前です。

<Triggers>
    <asp:AsyncPortBackTrigger ControlID="cddMachine" EventName="SelectedIndexChanged" />
</Triggers>

コードを実行すると、次のエラーがスローされます。

Control with ID 'cddMachine' being registered through 
RegisterAsyncPostBackControl or RegisterPostBackControl must implement either
INamingContainer, IPostBackDataHandler, or IPostBackEventHandler

しばらく検索した後、カスケード ドロップダウン リストを使用して更新パネルを更新する方法について明確な情報を見つけることができませんでした。単純なものを見落としていると確信していますが、何を探す必要があるのか​​ わかりません。

編集- 含まれるコード

ロックアウト.aspx

<%@ Page Title="" Language="vb" AutoEventWireup="true" MasterPageFile="~/Site.Master" CodeBehind="Lockout.aspx.vb" Inherits="LockoutTagout.Lockout" %>

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>


<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<asp:ScriptManager ID="asm" runat="server" />
<div>
    Complex:
    <asp:DropDownList ID="ComplexList" runat="server" />
    &nbsp;&nbsp; Machine:
    <asp:DropDownList ID="MachineList" runat="server" AutoPostBack="true" />

    <asp:CascadingDropDown ID="cddComplex" runat="server"
        ServicePath="~/lockoutService.asmx" ServiceMethod="GetComplex"
        TargetControlID="ComplexList" Category="Complex"
        PromptText="Select Complex" />

    <asp:CascadingDropDown ID="cddMachine" runat="server"
        ServicePath="~/lockoutService.asmx" ServiceMethod="GetMachine"
        TargetControlID="MachineList" ParentControlID="ComplexList"
        Category="Machine" PromptText="Select Machine" />
</div>

<div>
    <asp:UpdatePanel runat="server">
        <ContentTemplate>
            <asp:SqlDataSource ID="SqlDataSource1" runat="server"
                ConnectionString="<%$ ConnectionStrings:LOTOConnectionString %>"
                SelectCommand="SELECT * FROM [DEVICES] WHERE machine_id = @machine_id">
                <SelectParameters>
                    <asp:ControlParameter Name="machine_id" ControlID="cddMachine" PropertyName="SelectedValue" />
                </SelectParameters>
            </asp:SqlDataSource>
            <asp:GridView ID="GridView1" GridLines="None" runat="server" AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="devices_id" DataSourceID="SqlDataSource1" AlternatingRowStyle-BackColor="White">
                <Columns>
                    <asp:BoundField DataField="devices_id" HeaderText="ID" InsertVisible="False" ReadOnly="True" SortExpression="devices_id" />
                    <asp:BoundField ItemStyle-HorizontalAlign="Center" DataField="description" HeaderText="Description" SortExpression="description" />
                    <asp:BoundField ItemStyle-HorizontalAlign="Center" DataField="location" HeaderText="Location" SortExpression="location" />
                    <asp:BoundField ItemStyle-HorizontalAlign="Center" DataField="verification" HeaderText="Verification" SortExpression="verification" />
                    <asp:BoundField ItemStyle-HorizontalAlign="Center" DataField="rack_num" HeaderText="Rack_#" SortExpression="rack_num" />
                    <asp:BoundField ItemStyle-HorizontalAlign="Center" DataField="section_num" HeaderText="Section_#" SortExpression="section_num" />
                    <asp:BoundField ItemStyle-HorizontalAlign="Center" DataField="color_or_number" HeaderText="Key_Identifier" SortExpression="color_or_number" />
                    <asp:BoundField ItemStyle-HorizontalAlign="Center" DataField="normal_position" HeaderText="Normal_Position" SortExpression="normal_position" />
                    <asp:TemplateField HeaderText="P&amp;P Numbers" ControlStyle-Width="100px">
                        <ItemTemplate>
                            <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:LOTOConnectionString %>" SelectCommand="SELECT * FROM [PNP] WHERE ([devices_id] = @devices_id)">
                                <SelectParameters>
                                    <asp:Parameter Name="devices_id" Type="Int32" />
                                </SelectParameters>
                            </asp:SqlDataSource>
                            <asp:GridView ID="GridView2" ShowHeader="false" GridLines="None" runat="server" AutoGenerateColumns="False" DataKeyNames="pnp_id" DataSourceID="SqlDataSource2">
                                <Columns>
                                    <asp:BoundField ItemStyle-HorizontalAlign="Center" DataField="pnp_num" HeaderText="pnp_num" SortExpression="pnp_num" />
                                </Columns>
                            </asp:GridView>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
                <HeaderStyle BackColor="#a52138" ForeColor="White" Font-Size="Medium" />
            </asp:GridView>
        </ContentTemplate>
    </asp:UpdatePanel>
</div>

ロックアウト.aspx.vb

Public Class Lockout
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load, MachineList.SelectedIndexChanged

End Sub

Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
    If e.Row.RowType = DataControlRowType.DataRow Then
        Dim s As SqlDataSource = CType(e.Row.FindControl("SqlDataSource2"), SqlDataSource)
        s.SelectParameters(0).DefaultValue = e.Row.Cells(0).Text
    End If
End Sub
End Class

lockoutService.asmx.vb

Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.ComponentModel
Imports AjaxControlToolkit
Imports System.Data.SqlClient

' To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
<System.Web.Script.Services.ScriptService()> _
<System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
Public Class lockoutService
    Inherits System.Web.Services.WebService

    <WebMethod()> _
    Public Function GetComplex(ByVal knownCategoryValues As String, ByVal category As String) As CascadingDropDownNameValue()
    Dim conn As New SqlConnection("Data Source=WIWRMS-SQLD2\SQLD2;Initial Catalog=LOTO;Persist Security Info=True;User ID=LOTO_ADMIN;Password=lotoadmin")
    conn.Open()
    Dim comm As New SqlCommand( _
        "SELECT * FROM complex", conn)
    Dim dr As SqlDataReader = comm.ExecuteReader()
    Dim l As New List(Of CascadingDropDownNameValue)
    While (dr.Read())
        l.Add(New CascadingDropDownNameValue(dr("complex_name").ToString(), dr("complex_id").ToString()))
    End While
    conn.Close()
    Return l.ToArray()
End Function

<WebMethod()> _
Public Function GetMachine(ByVal knownCategoryValues As String, ByVal category As String) As CascadingDropDownNameValue()
    Dim complex_id As Integer
    Dim kv As StringDictionary = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues)

    If Not kv.ContainsKey("complex") Or Not Int32.TryParse(kv("complex"), complex_id) Then
        Throw New ArgumentException("Couldn't find complex.")
    End If

    Dim conn As New SqlConnection("Data Source=WIWRMS-SQLD2\SQLD2;Initial Catalog=LOTO;Persist Security Info=True;User ID=LOTO_ADMIN;Password=lotoadmin")
    conn.Open()
    Dim comm As New SqlCommand( _
        "SELECT * FROM machine WHERE complex_id = @complex_id", conn)
    comm.Parameters.AddWithValue("@complex_id", complex_id)
    Dim dr As SqlDataReader = comm.ExecuteReader()
    Dim l As New List(Of CascadingDropDownNameValue)
    While (dr.Read())
        l.Add(New CascadingDropDownNameValue(dr("machine_name").ToString(), dr("machine_id").ToString()))
    End While
    conn.Close()
    Return l.ToArray()
End Function
End Class
4

1 に答える 1