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.
的数据绑定事件中使用代码
不用说,你也可以使用这个事件来设置行的颜色,甚至文本框,所以对于条件格式技巧,你可以使用上面的。
我的 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.
的数据绑定事件中使用代码不用说,你也可以使用这个事件来设置行的颜色,甚至文本框,所以对于条件格式技巧,你可以使用上面的。