【问题标题】:Display rows based on column values asp repeater / gridview基于列值显示行 asp repeater / gridview
【发布时间】:2016-01-11 06:03:57
【问题描述】:

我正在使用 VB.NET

我得到一个包含以下列的数据表

ID   DESC  Hyperlink COUNT 

计数是01

如果计数是0 我需要做一个

NavigateUrl='<%#"~/Create.aspx?ID=" + Eval("ID")%>' Text="Create"

在超链接栏

我没有对数据绑定事件进行任何显式操作。 我填充中继器的方式是:

rptrTask.DataSource = PpltDefGrid(Trim(v))

函数现在只是获取一个 sql 表

rptrTask.DataBind()

有人可以给我有关如何执行此操作的内联代码吗?如果不知道如何通过后面的代码来做到这一点(请提供示例)?我尝试了一些 / Container.data 方法..但没有成功。非常感谢任何帮助。

【问题讨论】:

  • 它不显示超链接..只需要显示其余的col数据..
  • 什么是计数?您正在从数据库中获取它,或者它在数据表/数据集中
  • @Ansari,计数只是一个值,我不确定这将如何影响问题的答案.. 但希望您能提供反馈
  • 检查我的答案,如果有帮助请告诉我。

标签: asp.net vb.net gridview data-binding repeater


【解决方案1】:

我正在编辑我的答案,那么在这种情况下,RowDataBound 对你来说是个简单的选择。

像这样修改你的 GridView:-

 <asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound">

我已添加"OnRowDataBound="GridView1_RowDataBound"

在您的 .aspx 页面中,您可以这样写 hyperlink

<asp:TemplateField HeaderText="Count">
    <ItemTemplate>
      <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="#" Text='<%#Eval("ID") %>'></asp:HyperLink>
   </ItemTemplate>
</asp:TemplateField>

在你的 .aspx.vb 页面中这样写:-

Protected Sub GridView1_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
        If e.Row.RowType = DataControlRowType.DataRow Then
            Dim HyperLink1 As HyperLink = DirectCast(e.Row.FindControl("HyperLink1"), HyperLink)
            If DataBinder.Eval(e.Row.DataItem, "COUNT") = "0" Then
                HyperLink1.NavigateUrl = "~/Create.aspx?ID=" + DataBinder.Eval(e.Row.DataItem, "ID")
            End If
        End If
    End Sub

希望对您有所帮助。

【讨论】:

  • 嗨,我现在明白了您对计数提出问题的原因。计数是填充转发器的 sql 返回的值。因此,尽管您给出的内容是正确的,但它不满足我对这个实例的要求。计数保存在一列中,并基于该值(0/1)我需要显示该行的超链接。希望能解开疑惑。
【解决方案2】:

您可以在后面的代码中使用 gridview 的 RowDatBound() 事件。

 protected void rptrTask_RowDataBound(object sender, GridViewRowEventArgs e) {
        if (e.Row.RowType == DataControlRowType.DataRow) {
            HyperLink hl = (HyperLink)e.Row.FindControl("hyperlinkID");
            if(DataBinder.Eval(e.Row.DataItem, "COUNT") == "0")
            {
            hl.NavigateUrl = "~/Create.aspx?ID=" + DataBinder.Eval(e.Row.DataItem, "ID");
            }
        }
    }

【讨论】:

    【解决方案3】:

    我将逻辑提取到变量(bShowURl)中以增强可操作性。还进行了额外检查以确保超链接存在。

    Protected Sub yourGridview_RowDataBound(sender As Object, e As GridViewRowEventArgs)
    
            If e.Row.RowType = DataControlRowType.DataRow Then
                Dim currentDataItem As yourDataItemDataType = e.Row.DataItem
                Dim bShowUrl = IIF(currentDataItem.ID = 0, True, False)
    
                If bShowUrl Then
                    Dim hyperlink As HyperLink = CType(e.Row.FindControl("yourHyperlinkControlId"), HyperLink) 
                    If hyperlink IsNot Nothing Then
                        hyperlink.NavigateUrl = "~/Create.aspx?ID=" + currentDataItem.ID.ToString()
                    End If
                End If
            End If
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-14
      • 2011-06-19
      • 2012-11-16
      • 2018-04-02
      • 2013-04-25
      • 1970-01-01
      • 2013-07-17
      • 1970-01-01
      相关资源
      最近更新 更多