ASP.Net 加载网页时,在 HTML 列表视图项模板上传递来自 VBA 的变量

ASP.Net Passing a Variable from VBA on HTML Listview Item template when loading a web page

我的 aspx 页面上有以下代码,其中在 HTML

上形成了一个列表视图
´´´

 <asp:ListView runat="server"
                ID="VistaVehiculos"
                DataSourceID="ADSParticipantes"
                DataKeyNames="IDInscrito" ItemPlaceholderID="itemPlaceHolder"
                OnItemDataBound="VistaVehiculos_ItemDataBound">
                <ItemTemplate>
                    <td>
                        <asp:Label ID="lNum" runat="server" Height="80px" Width="83px" BackColor="Red"
                            Style="text-align:center; margin-left:5px; font-size:40px; padding-top:3px; font-family:'Doppio One', sans-serif; font-style:italic"
                            Text='<%# Eval("Num")%>'/>                          
                        <asp:Label ID="lTS" runat="server" Height="80px" BorderStyle="None"
                            Style="font-size:11px; display:block; margin-top:-80px; margin-left:8px"
                            text='<%# If(Eval("SEO1") Is DBNull.Value, "", "Correct"))%>'/>  
                    </td>
                </ItemTemplate>
                <GroupTemplate>
                    <tr>
                        <asp:PlaceHolder runat="server" ID="itemPlaceholder" />
                    </tr>
                </GroupTemplate>
                <GroupSeparatorTemplate>
                    <tr id="Tr1" runat="server">
                        <td style="height:15px"></td>
                    </tr>
                </GroupSeparatorTemplate>
                <LayoutTemplate>
                    <table border="0">
                        <asp:PlaceHolder runat="server" ID="groupPlaceHolder" />
                    </table>
                </LayoutTemplate>
            </asp:ListView>
´´´

在标签 id=lTS 中,我评估了一个数据字段“SEO1”

我需要做的是根据不同的需求设置这样的数据字段不同的值,使用这个页面作为模板,使用加载vba过程。

这个案例是指Safety Engine O1 - SEO1,如果我需要通过Safety Engine O2改变,我会评估SEO2数据字段。

我找不到更改文本值的控件。

对此有任何帮助吗?

好的,首先。您的标签 VBA 不正确 VBA 是 Visual Basic for Applications(Word、Excel 和 ms-access 中使用的代码系统。

您正在使用 vb.net - 您应该更改标签。

至于摆弄那个表情?您没有提到 if() 现在是否有效?

然而,除了任何简单的 Eval() 表达式之外,我发现它变得比去看牙医试图将一壶咖啡烧成 inject/use/have 复杂表达式更糟糕。扩展、编写和更改它们也相当痛苦。

所以,我建议您考虑设置值,并在代码隐藏中编写您的代码逻辑。

因此,我会将此控件更改为:

   <asp:Label ID="lTS" runat="server" Height="80px" BorderStyle="None"
      Style="font-size:11px; display:block; margin-top:-80px; margin-left:8px"
      text = "" />

注意它现在什么都没有了。因为我们想对该控件应用“更”复杂的逻辑,所以将我们的代码移动到项目数据绑定事件就是合适的地方!

所以,我们现在将拥有这个:

Protected Sub VistaVehiculos_ItemDataBound(sender As Object, e As ListViewItemEventArgs) Handles VistaVehiculos.ItemDataBound

    If e.Item.ItemType = ListViewItemType.DataItem Then

        ' get the control we are to format

        Dim SEOlbl As Label = e.Item.FindControl("ITS")

        Dim dRow As DataRowView = e.Item.DataItem
        ' NOTE IN ABOVE - NOT list view item!!! - but DataRowItem!!!!!!!!!


        Dim strResult As String = ""
        If dRow("SafteyCase") = "Safety Engine O1" Then
            strResult = dRow("SE1").ToString
        Else
            strResult = dRow("SE2").ToString
        End If
        If strResult = "" Then
            strResult = "NO VALUE"
        End If

        SEOlbl.Text = strResult

    End If

End Sub

请注意我们如何在这里自由获取任何数据列,包括不在 lv 布局中的数据列,但当然它们必须在数据源中。

因此,您可以有条件地测试任何您想要的东西,然后将代码的结果推入标签 - 该代码可以是您想要的任何东西。

所以,把你的表情从标签中去掉,在lv.

的数据绑定事件中使用代码

不用说,你也可以使用这个事件来设置行的颜色,甚至文本框,所以对于条件格式技巧,你可以使用上面的。