0

ドロップダウン ボックスで奇妙な動作が発生しています。誰かが何が起こっているのか説明してくれることを願っています。行のテーブルを構築する datarepeater があります。各行には、セル内にドロップダウンリスト (非表示) とリンクボタン (非表示ではない) があります。予期される動作は、ユーザーが特定のセルのリンク ボタンをクリックすると、サーバー コマンドが起動されることです。このコマンドはいくつかのことを行いますが、DDL の選択された値を設定し、それを可視に設定し、それ自体 (リンクボタン) を非表示に設定します。問題は、選択したインデックスが変更されるたびにドロップダウンリストのイベントが発生することです。しかし、最終的には、ユーザーが DDL 値を初めて変更したときにのみ起動します。その後、イベントは発火を停止します。また、これはすべてユーザーコントロールにあり、すべてのコードは updatepanel 内にあります。コード例で述べたように、linkbutton イベントで ddl 値を変更しないと、この動作は停止しますが、DDL には正しい値が設定されません。これが私のコードです:

リンクボタン イベント:

Protected Sub edit_click(ByVal sender As Object, ByVal e As EventArgs)
    Dim btn As LinkButton = CType(sender, LinkButton)
    Dim userId As String = btn.CommandArgument
    Dim ds As New List(Of myObject)
    Dim currentChoice As New myObject
    Dim parent As RepeaterItem = CType(btn.Parent, RepeaterItem)

    Dim lbl As Label = CType(parent.FindControl("userId"), Label)
    Dim ma As DropDownList = CType(parent.FindControl("ddlMustApprove"), DropDownList)
    Dim maLbl As Label = CType(parent.FindControl("mustApprove"), Label)

     'just get a list of values to chose from
    ds = Session("userNotificationDS")
    currentChoice = ds.Find(Function(p As myObject) p.User.NetworkID = userId)

    With maLbl
        .Width = 100
        .BorderColor = Drawing.Color.DarkBlue

    End With

    'if I disable this next line, everything works fine (but then the correct selection wont be chosen)
    ma.Text = currentChoice.MustApprove
    ma.CssClass = ""
    maLbl.Visible = False
End Sub

DDL 変更イベント:

Protected Sub selection_Change(ByVal sender As Object, ByVal e As EventArgs) 
    Dim cnt As DropDownList = CType(sender, DropDownList)
    Dim parent As RepeaterItem = CType(cnt.Parent, RepeaterItem)
    Dim maLbl As Label = CType(parent.FindControl("mustApprove"), Label)
    Dim userId As Label = CType(parent.FindControl("userId"), Label)
    Dim ds As New List(Of myObject)

    'just gets the value to set the DDL to
    ds = Session("userNotificationDS")

    For Each i As myObjectIn ds
        If (i.User.NetworkID = userId.Text) Then
            i.MustApprove = cnt.SelectedValue
        End If
    Next

    maLbl.Visible = True
    cnt.CssClass = "hidden"
    Session("userNotificationDS") = ds
    bindData(ds)
End Sub

フロント エンド コードの Datarepeater は次のとおりです。

<asp:Repeater ID="dataRepeateUsers" runat="server"  EnableViewState="false" OnItemCreated="RepeaterItemCreated" >
<HeaderTemplate> 
          .... column headers
</HeaderTemplate>  
     <ItemTemplate>  
        <tr  class="listcolor">
          <td style="border:0px; border-right:1px solid  #808080  ; border-bottom:0px solid #808080;">
            <asp:DropDownList runat="server" ID="ddlMustApprove" CssClass="hidden"  OnTextChanged="selection_Change" EnableViewState="true" AutoPostBack="true" >
                <asp:ListItem Text="True" Value="True"></asp:ListItem>
                <asp:ListItem Text="False" Value="False"></asp:ListItem>
           </asp:DropDownList>
          <asp:label ID="mustApprove" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "MustApprove") %>'></asp:label>
         </td>
       </tr>
     </ItemTemplate>
     <AlternatingItemTemplate>
        <tr  class="listcolor">
          <td style="border:0px; border-right:1px solid  #808080  ; border-bottom:0px solid #808080;">
            <asp:DropDownList runat="server" ID="ddlMustApprove" CssClass="hidden"  OnTextChanged="selection_Change" EnableViewState="true" AutoPostBack="true" >
                <asp:ListItem Text="True" Value="True"></asp:ListItem>
                <asp:ListItem Text="False" Value="False"></asp:ListItem>
           </asp:DropDownList>
          <asp:label ID="mustApprove" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "MustApprove") %>'></asp:label>
         </td>
       </tr>             
     </AlternatingItemTemplate> 
 <FooterTemplate>  
</FooterTemplate>  
    </asp:Repeater>  

私のコードは、.Net 4.0 と AjaxControlToolkit 4.1.60919 を使用して VS 2010 で記述されています。

ありがとうジェイソン

4

1 に答える 1

0
ma.Text = currentChoice.MustApprove

この行を次の行に置き換えます。

if(ma.items.FindByText(currentChoice.MustApprove) != null)
{
ma.SelectedIndex = -1;
ma.items.FindByText(currentChoice.MustApprove).selected = true;
 }

上記のように、ドロップダウンの selectedindex を -1 に設定するだけです。

于 2013-01-31T12:32:48.150 に答える