簡體   English   中英

ASP.NET Gridview rowdatabound Stackoverflow異常

[英]ASP.NET Gridview rowdatabound Stackoverflow exception

我有一個從SQL數據源填充的gridview。

每當我打開頁面時,我都會在gridview rowdatabound得到stackoverflow異常。

是什么導致了這個問題?

Search.aspx

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" CellPadding="4" DataSourceID="ConsultsSQLDataSource" ForeColor="#333333" GridLines="None" OnRowDataBound="GridView1_RowDataBound">
     <AlternatingRowStyle BackColor="White" />
     <Columns>
         <asp:BoundField DataField="DATA" HeaderText="Data" SortExpression="DATA" />
         <asp:BoundField DataField="LOCAL" HeaderText="Local" SortExpression="LOCAL" />
         <asp:BoundField DataField="URGENCIA" HeaderText="Urgencia" SortExpression="URGENCIA" />
         <asp:BoundField DataField="ESTADO" HeaderText="Estado" SortExpression="ESTADO" />
         <asp:HyperLinkField HeaderText="Pagamento" NavigateUrl="a" Text="Link" Visible="False" />
         <asp:BoundField DataField="IDPAGAMENTO" SortExpression="IDPAGAMENTO" Visible="False" />
     </Columns>
</asp:GridView>

代碼隱藏

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            string value = e.Row.Cells[2].Text;
 switch(value)
            {
                case "3":
                    e.Row.Cells[3].Text = "Waiting Payment";
                    HyperLinkField hp = (HyperLinkField)GridView1.Columns[4];
                    GridView1.Columns[4].Visible = true;
                    GridView1.Columns[5].Visible = true;
                    hp.NavigateUrl = "~/Account/Payments/Payment?PaymentID=" + e.Row.Cells[5].Text; //Exception occurs here
                    hp.Text = "Pay";
                    e.Row.Cells[4].Visible = true;
                    break;
            }
        }
    }

我注意到如果你通過像你一樣引用HyperLinkFiled(GridView1.Columns [4])將NavigateUrl和Text分配給超鏈接它沒有分配給當前行,而是分配給下一行,這似乎不是你所期望的。

像這樣重建你的RowDataBound方法:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            string value = e.Row.Cells[2].Text;
            switch (value)
            {
                case "3":
                    e.Row.Cells[3].Text = "Waiting Payment";
                    HyperLink hp = e.Row.Cells[4].Controls[0] as HyperLink;
                    hp.NavigateUrl = "~/Account/Payments/Payment?PaymentID=" + e.Row.Cells[5].Text;
                    hp.Text = "Pay";
                    break;
            }
        }
    }

並從HyperLinkField中刪除visible="false" ,並在網格標記中刪除最后一個BoundField。

您可以從HyperLinkField中刪除Text和NavigateUrl屬性,這樣只有在鏈接正確的情況下才能在單元格中顯示內容。

試一試,看看你是否還有錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM