2013-02-07 82 views
0

我有一個gridview列出工具和訪問值。編輯我在每一行都有一個編輯圖像按鈕。我有一個OnRowBound方法,它爲每個按鈕分配一個OnClick屬性,以便我知道我需要編輯哪個記錄。 代碼是做一個按鈕點擊代碼behide

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,我在模態彈出窗口中將值設置爲控件。 JavaScript的是....

<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> 

正如你可以看到我已經實現了兩個隱藏的按鈕but_SetModalDetails和but_HiddenProxy。 but_SetModalDetails有一些代碼隱藏其中規定一對夫婦的下拉列表中(從一個數據源填充,另一種是動態填充基於第一的值,代碼隱藏是...

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被顯示爲填充了正確的數據。

任何想法?謝謝

+0

我想我所需要的只是... mpx_AddEditAccess.Show()off to test ... – Mych

回答

0

畢竟那......我能在代碼隱藏做的一切......

我只需要一個隱藏的按鈕but_HiddenProxy。

在gridview中,而不是爲每個編輯圖像按鈕設置onClick屬性,我只需設置一個命令名'AccessEdit'(不要使用'編輯')。然後我有一個方法來處理gridview.RowCommand事件。這發現了我在選定的行上使用findControl所需的各種信息。然後使用這些值填充彈出窗口中的下拉列表,然後使用show命令使彈出窗口可見。

有一段時間讓我失望了,這是爲什麼當點擊一個圖像按鈕時我的RowCommand沒有被觸發。我忘了我已經在停止RowCommand被執行的模式中進行了驗證。我在圖像按鈕中插入了一個CausesValidation =「false」,一切正常。

談論使用錘子打破堅果!