2011-02-28 36 views
-1

我有一個名爲gvLineItems在asp.net頁面的gridView ..我想扔在一些jquery允許雙擊gridview的行和讓它重定向到另一頁:Datagrid查看雙擊使用jQuery與asp.net

<script src="include/jquery-1.5.1.min.js" type="text/javascript"></script> 
<script type="text/javascript"> 

var selected = null; 

$(document).ready(function(){ 
    $("#divGridView table tbody tr").find("tr").dblclick(function(){ 
     window.location = "<%#ResolveUrl("~/Default2.aspx")%>?record=" + $(this).find("td:first").text(); 
    }); 
}); 

</script> 

有沒有人在這裏看到任何奇怪的東西?

這裏是真正的醜陋asp.net Ajax和股利等...

<div id="divGridView" style="width:100%"> 
           <asp:UpdatePanel ID="myPanel" runat="server" > 
              <ContentTemplate> 
             <asp:GridView GridLines="Horizontal" CellPadding="4" Font-Size="Small" DataKeyNames="ID" Width="100%" AlternatingRowStyle-BackColor="#F0F8FF" BackColor="#E8E8E8" HeaderStyle-BackColor="#377CB1" ID="gvLineItems" runat="server" AllowSorting="True" AutoGenerateColumns="False" ShowFooter="True" > 
              <Columns> 

                <asp:TemplateField HeaderText="ID" SortExpression="ID" Visible="False"> 
                <ItemTemplate> 
                 <asp:Label ID="lblExpenseReportLineItemID" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.ID") %>'></asp:Label> 
                </ItemTemplate> 
                </asp:TemplateField> 

                <asp:TemplateField> 
                <HeaderTemplate> 
                 <asp:CheckBox ID="HeaderLevelCheckBox" AutoPostBack="true" OnCheckedChanged="SelectAllRows" runat="server" /> 
                </HeaderTemplate> 
                <ItemTemplate> 
                 <asp:CheckBox ID="chkSelector" runat="server" onclick="ChangeRowColor(this)" /> 
                </ItemTemplate> 
                <ItemStyle HorizontalAlign="Center" Width="1%" /> 
                <HeaderStyle HorizontalAlign="Center" Width="1%" /> 
                </asp:TemplateField> 

                <asp:TemplateField> 
                 <ItemTemplate> 
                  <asp:ImageButton ID="ibAddLineItem" runat="server" ImageUrl="images/InsertRow.gif" CommandName="Insert" ToolTip="Insert line item" /> 
                 </ItemTemplate> 
                 <ItemStyle Width="1%" /> 
                </asp:TemplateField> 

                <asp:TemplateField> 
               <ItemTemplate> 

                 <asp:ImageButton ID="ibDelete" runat="server" CommandName="DeleteRow" ImageUrl="images/d.gif" 
                  ToolTip="Delete Line Item?" /> 

               </ItemTemplate> 
              </asp:TemplateField> 

                <asp:TemplateField HeaderText="Item Date" SortExpression="LineItemDate"> 
                 <ItemTemplate> 
                  <ajaxToolkit:CalendarExtender TargetControlID="txtLineItemDate" ID="CalendarExtender3" runat="server"> 
                  </ajaxToolkit:CalendarExtender> 
                  <asp:TextBox Width="60px" onchange='return isLessThanEndDate(this);' ID="txtLineItemDate" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.LineItemDate") %>'> 
                  </asp:TextBox> 
                 </ItemTemplate> 
                 <ItemStyle HorizontalAlign="Center" Width="10%" /> 
                 <HeaderStyle ForeColor="White" HorizontalAlign="Center" Width="12%" /> 
                </asp:TemplateField>    

                <asp:TemplateField HeaderText="Comm.CU" SortExpression="Comm"> 
                 <ItemTemplate> 
                  <table width="100%" cellpadding="2" cellspacing="0" style=" border-style:solid; border-width:thin; border-color:#DDD;"> 
                   <tr> 
                   <td ><asp:TextBox Enabled="False" ToolTip="Click Search...To find a commission" Width="40px" ID="txtComm" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.CommissionID") %>' /></td> 
                   </tr> 
                   <tr><td><asp:TextBox Enabled="False" ToolTip="Click Search...To find a cost unit" Width="40px" ID="txtWBS" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.WBSID") %>' /></td></tr> 
                   <tr><td align="center"><a href='FindCommCost.aspx?ExpenseReportID=<%#Eval("ERID")%>&ExpenseReportLineItemID=<%#Eval("ID")%>' style="color:Navy">Search...</a></td></tr> 
                  </table> 



                 </ItemTemplate> 
                 <ItemStyle Width="1%" /> 
                </asp:TemplateField> 


                <asp:TemplateField HeaderText="Type" SortExpression="Reason"> 
                 <ItemTemplate> 
                  <asp:DropDownList ID="ddlExpenseTypes" OnSelectedIndexChanged="ddlExpenseTypes_SelectedIndexChanged" DataSource='<%# GetExpenseTypes() %>' SelectedValue='<%# Bind("ExpenseReasonID") %>' DataTextField="ExpenseReasonID" DataValueField="ExpenseReasonID" AutoPostBack="true" runat="server" ></asp:DropDownList> 
                 </ItemTemplate> 
                 <ItemStyle HorizontalAlign="Center" Width="1%" /> 
                </asp:TemplateField> 

                <asp:TemplateField HeaderText="Receipt" SortExpression="Date"> 
                 <ItemTemplate> 
                  <asp:CheckBox ID="cbReceipt" runat="server" Checked='<%# DataBinder.Eval(Container, "DataItem.HasReceipt") %>' /> 
                 </ItemTemplate> 
                 <HeaderStyle ForeColor="White" /> 
                 <ItemStyle HorizontalAlign="Center" Width="1%" /> 
                </asp:TemplateField>    

                <asp:TemplateField HeaderText="Amount" SortExpression="Amount"> 
                 <ItemTemplate> 
                  <asp:TextBox Width="40px" AutoPostBack="true" OnTextChanged="ChangedAmount" ID="txtAmount" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.AmountSpent") %>' /> 
                 </ItemTemplate> 
                 <ItemStyle Width="1%" /> 
                </asp:TemplateField> 

                <asp:TemplateField HeaderText="Currency" SortExpression="Currency"> 
                 <ItemTemplate> 
                  <asp:DropDownList ID="ddlCurrency" OnSelectedIndexChanged="ddlCurrency_SelectedIndexChanged" runat="server" AutoPostBack="true" DataSource='<%# GetCurrency() %>' SelectedValue='<%# Bind("CountryID") %>' DataTextField="CountryID" DataValueField="CountryID"></asp:DropDownList> 
                 </ItemTemplate> 
                 <ItemStyle HorizontalAlign="Center" Width="1%" /> 
                </asp:TemplateField> 

                <asp:TemplateField HeaderText="Rate" SortExpression="Rate"> 
                 <ItemTemplate> 
                  <asp:TextBox Width="33px" AutoPostBack="true" ID="txtRate" OnTextChanged="ChangedAmount" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Rate") %>' /> 
                 </ItemTemplate> 
                 <ItemStyle Width="1%" /> 
                </asp:TemplateField> 

                <asp:TemplateField HeaderText="USD" SortExpression="USD"> 
                 <ItemTemplate> 
                  <asp:Label ID="lblUSD" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.AmountBackInUSD") %>' /> 
                 </ItemTemplate> 
                 <ItemStyle Width="1%" /> 
                </asp:TemplateField> 

                <asp:TemplateField HeaderText="Desc." SortExpression="Desc."> 
                 <ItemTemplate> 
                  <asp:TextBox Width="100px" Font-Names="Arial" ToolTip="If the expense type is Entertainment this field is required!" ID="txtExpenseReasonDescription" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.ExpenseReasonDescription") %>' /> 
                 </ItemTemplate> 
                 <ItemStyle Width="1%" HorizontalAlign="Left" /> 
                </asp:TemplateField> 


                <asp:HyperLinkField HeaderText="Link" SortExpression="Link" DataNavigateUrlFields="AttachmentLink" DataNavigateUrlFormatString="{0}" 
               DataTextField="AttachmentLink" DataTextFormatString="Link" Target="_blank" > 
                 <ControlStyle ForeColor="Navy" /> 
                 <HeaderStyle ForeColor="White" /> 
                </asp:HyperLinkField> 

                <asp:TemplateField HeaderText="Upload File?" SortExpression="ID" > 
                <ItemTemplate> 
                 <asp:FileUpload Width="90px" Font-Size="xx-small" ID="fuAttachment" runat="server" /> 
                 <asp:Button ID="btnUpload" font-size="xx-small" runat="server" Text="Upload" OnClick="UploadTheFile" /> 
                </ItemTemplate> 
                 <HeaderStyle ForeColor="White" /> 
                 <ItemStyle Width="50%" /> 
                </asp:TemplateField> 
              </Columns> 
              <HeaderStyle BackColor="#377CB1" /> 
              <AlternatingRowStyle BackColor="AliceBlue" /> 
              <FooterStyle CssClass="FooterStyle" /> 
             </asp:GridView> 
             <div style="width:100%"> 
              <br /> 
            <asp:UpdateProgress ID="udProgress" runat="server" DisplayAfter="100" Visible="True" DynamicLayout="True"><ProgressTemplate><img border="0" src="images/loading.gif" alt="loading" /></ProgressTemplate></asp:UpdateProgress> 
              <br /> 
              <asp:Label ID="lblMessage2" runat="server"></asp:Label> 
             </div> 
             <div style="width:100%; text-align:right;"> 
             <table width="100%" cellpadding="2" cellspacing="0"> 
             <tr> 
             <td class="tableFields" style="height: 68px"> 
              &nbsp;</td> 
             <td align="right"> 
             <asp:Panel ID="pGridControls" runat="server" Width="100%" Visible="False"> 
              <asp:Label ID="Label2" runat="server" Text="Click Update to <u>save</u> any changes" Font-Bold="True" ForeColor="#377CB1"></asp:Label> 
             <asp:ImageButton ID="ibSaveGrid" runat="server" ImageUrl="images/smallSave.gif" ToolTip="Save/refresh changes?" CausesValidation="False" OnClick="ibSaveGrid_Click" /><asp:ImageButton ID="ibDeleteGrid" runat="server" ImageUrl="images/smallDelete.gif" ToolTip="Delete checked rows?" CausesValidation="False" OnClick="ibDeleteGrid_Click" /></asp:Panel> 
              <hr /> <h3> 
               <asp:Panel ID="Panel5" runat="server" Width="50%" HorizontalAlign="Right" BackColor= "#F0FFF0" CssClass="PadIt"> 
                <ajaxToolkit:RoundedCornersExtender ID="RoundedCornersExtender4" runat="server" TargetControlID="Panel5" Radius="6" Corners="All" BorderColor="#377CB1" Color="#F0FFF0"> 
                </ajaxToolkit:RoundedCornersExtender> 
               Employee Due (USD):<asp:Label ID="lblMessage3" runat="server"></asp:Label> 
               </asp:Panel> 
               </h3> </td> 
             </tr> 
             </table> 
             </div> 
            </ContentTemplate> 
            <Triggers> 
             <asp:AsyncPostBackTrigger ControlID="ibOk" /> 
             <asp:AsyncPostBackTrigger ControlID="rbSort" /> 
            </Triggers> 
           </asp:UpdatePanel> 
            <asp:Literal ID="CheckBoxIDsArray" runat="server"></asp:Literal></div> 
           </td> 
          </tr> 
         </table> 
          </asp:Panel> 
        </div> 

這裏是我的編輯:

<script type="text/javascript"> 

var selected = null; 

$(document).ready(function(){ 
    $("#divGridView table tbody tr").dblclick(function(){ 
     window.location = "<%#ResolveUrl("~/Default2.aspx")%>?ID=" + $(this).find("td:first").text(); 
    }); 
}); 

</script> 

我現在幾乎得到它的工作.. 。我可以看到正確的ID號碼,開始瞭解重定向不起作用的原因。

+0

你兩條線做兩件不同的事情。你想要哪一個? – SLaks 2011-02-28 19:01:55

+0

只需尋找重定向位置。 – JonH 2011-02-28 19:02:54

+0

從技術上說,您並未發佈任何內容。您只是將瀏覽器重定向到一個新的URL。除此之外,它看起來很好。沒有更多的代碼很難說。你是否已經測試過這個並遇到問題? – Jeff 2011-02-28 19:07:21

回答

0

這裏是我落得這樣做:

<script type="text/javascript"> 

var selected = null; 

$(document).ready(function(){ 
    $("#divGridView table tbody tr").dblclick(function(){ 
     //window.location = "<%#ResolveUrl("~/Search.aspx")%>?ID=" + $(this).find("td:first").text(); 
     window.location = "myURL/Search.aspx?ID=" + $(this).find("td:first").text(); 
    }); 
}); 

</script> 
1

括在<div id="divGridView" /> GridView和嘗試這個

$(document).ready(function(){ 
    $("#divGridView table tbody tr").dblclick(function(){ 
    var id= $(this).find("td:first").text(); 
     window.location = "<%#ResolveUrl("~/Default2.aspx")%>?record=" + id; 
    }); 
}); 
+0

@StackOverflowException - 沒有像我的錯誤,但是當我雙擊網格視圖行它doesnt做任何事情。 – JonH 2011-02-28 19:15:15

+0

@JonH你可以發佈爲網格呈現的HTML,至少可以連接幾行嗎? – 2011-02-28 19:16:27

+0

如果您使用的是具有JS調試功能的瀏覽器,請執行以下操作:$(「#divGridView table tbody tr」)。length,它給您什麼值? – 2011-02-28 19:23:35

1

你正在尋找讓你的ID標籤,$(this).find("td:first").text()具有Visible=false這將導致它不會被渲染,所以jQuery將找不到它。 最簡單的解決方案可能是把ID的標記(如span),這只是渲染使用display:none無形的客戶端在第一顯示器列

+0

@jamietre - 我也想到了這一點,並將可見性更改爲true,但仍然是相同的問題 – JonH 2011-02-28 19:32:00

+0

也可能是您嘗試綁定的問題。它看起來像試圖將雙擊綁定到'tr'標籤 - 行不是可點擊的實體。在Chrome中使用它,並使用javascript調試器來設置一個斷點並測試你的jQuery,看看返回的是什麼。僅供參考 - 我不知道這是普遍的還是僅僅是我,但是在使用Chrome的腳本調試器時,$永遠不會工作,您必須在立即窗口中鍵入'jQuery'來進行播放。 – 2011-02-28 19:36:11

+0

其實我回來了,關於行不可點擊,whaddya知道,這是一個很好的簡單示例:http://www.electrictoolbox.com/jquey-make-entire-table-row-clickable/ ...我認爲在你的情況下,問題是選擇器中的最後一個'find'。那在子元素中尋找一個'tr' - 我想你只是想失去最後的發現。你也不需要在選擇器中確定heirarchy的每個部分,'(「#divGridView tr」)'會做你需要的。 – 2011-02-28 19:43:28