【问题标题】:Referencing the HeaderText of a TemplateField by text value rather than by index通过文本值而不是索引引用 TemplateField 的 HeaderText
【发布时间】:2014-02-20 00:43:37
【问题描述】:

服务器端我想在一个字符串中使用来自 DetailsView 的 Templatefield 的 HeaderText,该字符串将作为一个标签的文本值返回,该标签是 Templatefield 的孙子。如何在代码后面按名称而不是使用索引显式引用 HeaderText“Care Plan Intent”,然后在字符串中使用它来替换标签的文本值,如果该值是 sql 数据源的 Eval不符合某些准则。 例如在下面的示例中,如果 Eval("CarePlanIntent") 的值正常,那么一切都很好,否则我想用类似“未输入护理计划意图或不符合设置”之类的内容替换它标准”。

<asp:DetailsView ID="dvTest">
<Fields>
<asp:TemplateField HeaderText="Care Plan Intent:">
    <ItemTemplate>
        <asp:Label skinid="tablabelblack" id="lblIntent" runat="server" Text='<%# Eval("CarePlanIntent") %>' />
    </ItemTemplate>
</asp:TemplateField>
</Fields>
</asp:DetailsView>

【问题讨论】:

    标签: asp.net vb.net .net-2.0


    【解决方案1】:

    您可以使用 LINQ 来执行此操作:

    var field = dvText.Fields.First(i => i.HeaderText == "Care Plan Intent:");
    var lbl = (Label)field.FindControl("lblIntent");
    
    if (lbl.Text == "Y")
      lbl.Text = "New Text";
    

    类似的东西....我可能有一些属性或方法错误;但应该是这样的。

    【讨论】:

    • 抱歉,我们的设置有点陈旧,而且我们没有 LINQ。有什么与.net 2.0兼容的东西可以做到这一点吗?谢谢
    【解决方案2】:

    根据您的示例,您可以在详细信息视图中获取标签,而不是通过标题文本查找正确的模板字段。

    Dim lblIntent As Label = CType(dvTest.FindControl("lblIntent"), Label)
    If lblIntent.Text <> "Your Condition" Then
        lblIntent.Text = "Some New Text"
    End If
    

    【讨论】:

    • 这不只是返回标签值而不是标签的Templatefield的HeaderText吗?
    • @PaulStevens 抱歉,我误读了您问题的某些部分。但是,按名称引用 TemplateField 的具体含义是什么?如标题文本所示?如果是这样,那将是多余的不是吗?您将使用相同的文本来获取标题文本。那时您已经知道标题文本。如果通过另一个标识符,那么我相信只有索引。对不起,如果我误解了什么。
    猜你喜欢
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    相关资源
    最近更新 更多