0

ツールとアクセスの値をリストするグリッドビューがあります。編集するには、各行に画像編集ボタンがあります。OnRowBound メソッドを使用して各ボタンに OnClick 属性を割り当て、編集する必要があるレコードを認識できるようにします。コードは

    Protected Sub ChangeFirstRowIcon(ByVal Sender As Object, ByVal e As GridViewRowEventArgs) Handles gv_AccessRights.RowDataBound

    'This sub fires on each gridview row created...
    'It first checks that the row is a data row (as opposed to Header, Footer etc.)
    'If ib_Edit is true then change add an attribut to button with aid, tid and ac values attached.

    If e.Row.RowType = DataControlRowType.DataRow Then

        Dim ib_Edit As ImageButton = e.Row.FindControl("ib_Edit")
        Dim lb_AccessID As Label = e.Row.FindControl("lb_AccessID")
        Dim hd_ToolID As HiddenField = e.Row.FindControl("hd_ToolID")
        Dim hd_AccessCode As HiddenField = e.Row.FindControl("hd_AccessCode")

        If ib_Edit IsNot Nothing Then
            ib_Edit.Attributes.Add("onClick", "proxyClick('" & lb_AccessID.Text & "', '" & hd_ToolID.Value & "', '" & hd_AccessCode.Value & "')")
        End If

    End If

End Sub

非表示のプロキシ ボタンを使用して、ユーザーがレコードを編集するために使用するモーダル ポップアップを表示しています (同じポップアップを使用して新しいアクセス レコードを追加しますが、後で説明します)。私の詳細をproxyClickに渡したので、モーダルポップアップ内のコントロールに値を設定しました。ジャバスクリプトは……

    <script type="text/javascript">
    function proxyClick(aid, tid, ac) {
        document.getElementById('hd_AccessID').value = aid;
        document.getElementById('hd_ToolIDMod').value = tid;
        document.getElementById('hd_AccessCodeMod').value = ac;
        document.getElementById('but_SetModalDetails').click();
    }
    </script>

参考までに、マークアップの主なビットは....

<table class="border">
    <tr>
        <td>
            <asp:Button ID="but_SetModalDetails" runat="server" Style="display: none" Text="Set modal details" ClientIDMode="Static" UseSubmitBehavior="true" />
            <asp:Button ID="but_HiddenProxy" runat="server" Style="display: none" Text="Hidden Proxy Button for Modal Popup" ClientIDMode="Static" />
        </td>
        <td class="rt">
        <asp:Button ID="but_AddTool" runat="server" AccessKey="A" CssClass="butGreen" Text="Add Tool" ToolTip="Add Tool - Alt A" />
        </td>
    </tr>
</table>

<asp:ModalPopupExtender ID="mpx_AddEditAccess" runat="server" CancelControlID="but_Cancel"
    BehaviorID="pn_AddEditAccess" PopupControlID="pn_AddEditAccess" TargetControlID="but_HiddenProxy"
    BackgroundCssClass="modalBackground" />
<asp:Panel ID="pn_AddEditAccess" runat="server" Width="500px" CssClass="modalPopup"
    Style="display: block">
    <div class="box">
        <h2>
            <asp:Label ID="lb_ModTitle" runat="server"></asp:Label>
        </h2>
        <asp:HiddenField ID="hd_AccessID" runat="server" ClientIDMode="Static"></asp:HiddenField>
        <div class="block">
            <asp:UpdatePanel ID="up_Access" runat="server" UpdateMode="Always">
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="ddl_ToolName" EventName="SelectedIndexChanged" />
                </Triggers>
                <ContentTemplate>
                    <table>
                        <tr>
                            <th class="p66 rt">
                                Tool Name:&nbsp;
                            </th>
                            <td class="p66">
                                <asp:HiddenField ID="hd_ToolIDMod" runat="server" ClientIDMode="Static" />
                                <asp:DropDownList ID="ddl_ToolName" runat="server" AutoPostBack="true" AppendDataBoundItems="True"
                                    DataSourceID="SqlDS_Tools" DataTextField="ToolName" DataValueField="ToolID" OnSelectedIndexChanged="ddl_ToolName_SIC">
                                    <asp:ListItem Text="Please Select..." Value="0"></asp:ListItem>
                                </asp:DropDownList>
                                <asp:SqlDataSource ID="SqlDS_Tools" runat="server" ConnectionString="<%$ ConnectionStrings:ToolsConnString %>"
                                    SelectCommand="SELECT [ToolID], [ToolName] FROM [tbl_Tools] WHERE ([Redundant] = @Redundant)">
                                    <SelectParameters>
                                        <asp:Parameter DefaultValue="False" Name="Redundant" Type="Boolean" />
                                    </SelectParameters>
                                </asp:SqlDataSource>
                                <asp:RequiredFieldValidator ID="rfv_ddl_ToolName" runat="server" ControlToValidate="ddl_ToolName"
                                    CssClass="error" Display="Dynamic" ErrorMessage="Please Select Tool Name" InitialValue="0">
                                </asp:RequiredFieldValidator>
                            </td>
                        </tr>
                        <tr>
                            <th class="p66 rt">
                                Access Rights:&nbsp;
                            </th>
                            <td class="p66">
                                <asp:HiddenField ID="hd_AccessCodeMod" runat="server" ClientIDMode="Static" />
                                <asp:DropDownList ID="ddl_AccessCode" runat="server" Enabled="false">
                                    <asp:ListItem Text="No Access" Value="0"></asp:ListItem>
                                </asp:DropDownList>
                            </td>
                        </tr>
                        <tr>
                            <td class="p66">
                                <asp:Button ID="but_Cancel" runat="server" Text="Cancel" />
                            </td>
                            <td class="p66 rt">
                                <asp:Button ID="but_Save" runat="server" Text="Save" />
                            </td>
                        </tr>
                    </table>
                </ContentTemplate>
            </asp:UpdatePanel>
        </div>
    </div>
</asp:Panel>

ご覧のとおり、2 つの隠しボタン but_SetModalDetails と but_HiddenProxy を実装しました。but_SetModalDetails には、いくつかのドロップダウン リストを設定する分離コードがあります (1 つはデータソースから入力され、もう 1 つは最初の値に基づいて動的に入力されます。分離コードは...

    Protected Sub but_SetModalDetails_Click(ByVal sender As Object, ByVal e As EventArgs) Handles but_SetModalDetails.Click

    If hd_AccessID.Value = "0" Then
        lb_ModTitle.Text = "Assigning Access Rights to:"
        ddl_ToolName.SelectedIndex = 0
        ddl_AccessCode.SelectedIndex = 0
        ddl_AccessCode.Enabled = False
    Else
        lb_ModTitle.Text = "Edit Access Rights to:"
        ddl_ToolName.SelectedValue = hd_ToolIDMod.Value
        ddl_ToolName.Enabled = False
        SqlStr = "SELECT AccessID AS ddlValue, AccessText as ddlText FROM tbl_AccessCodes WHERE ToolID = " & hd_ToolIDMod.Value
        PopulateDDLvalue(ddl_AccessCode, SqlStr)
        ddl_AccessCode.SelectedValue = hd_AccessCodeMod.Value
        ddl_AccessCode.Enabled = True
    End If

    'NOW I NEED TO SIMULATE but_HiddenProxy Click

End Sub

最後にわかるように、but_HiddenProxy のクリックをシミュレートして、modalPopup に正しいデータが取り込まれて表示されるようにする必要があります。

何か案は?ありがとう

4

1 に答える 1

0

結局のところ...コードビハインドですべてを行うことができました...

隠しボタンが 1 つだけ必要でした。

グリッドビューでは、画像編集ボタンごとに onClick 属性を設定する代わりに、'AccessEdit' というコマンド名を設定しました ('Edit' は使用しないでください)。次に、gridview.RowCommand イベントを処理するメソッドを作成しました。これにより、選択した行でfindControlを使用して、必要なさまざまな情報が見つかりました。次に、これらの値を使用してポップアップのドロップダウンを設定し、show コマンドを使用してポップアップを表示します。

しばらく困惑したのは、画像ボタンがクリックされたときに RowCommand がトリガーされなかった理由です。RowCommand の実行を停止するモーダルで検証があったことを忘れていました。イメージボタンに CausesValidation="false" を貼り付けましたが、すべて問題ありませんでした。

ハンマーを使ってナッツを割ることについて話してください!

于 2013-02-07T16:32:27.450 に答える