1

这段代码表面上看起来很简单,但我试图在 datalist 中没有记录时显示一条消息。

我有这个标记:

<asp:DataList ID="DataList1" runat="server" CellPadding="4"
   DataSourceID="SqlDataSource1"
   Font-Bold="False" OnSelected="SqlDataSource1_Selected" Font-Names="Verdana"
   Font-Size="Small" RepeatColumns="2"
   RepeatDirection="Horizontal" Width="100%" ForeColor="#333333">
   <AlternatingItemStyle BackColor="White" ForeColor="#284775" />
...
...
</asp:DataList>
<asp:label CssClass="Treb10Blue" ID="lblMsg" runat="server"></asp:Label> 

然后在代码隐藏上,我有这个:

Protected Sub SqlDataSource1_Selected(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceStatusEventArgs) Handles SqlDataSource1.Selected

  If e.AffectedRows = 0 Then
      lblMsg.Visible = True
      lblMsg.Text = "No records found"
  Else
      lblMsg.Text = ""
  End If

End Sub

我没有收到任何错误,但没有显示消息。

有什么想法可能是错的吗?

4

3 回答 3

2

此问题已得到解决。一个比我想象的更容易的解决方案。

   <FooterTemplate>
     <asp:Label forecolor="#9ACD32" Visible='<%# IIF(DataList1.Items.Count=0 And ddlLocation.SelectedItem.Value<>"0", "True", "False")%>' runat="server" ID="lblMsg" Text="No records found"></asp:Label>
    </FooterTemplate>
于 2013-10-11T14:01:10.567 回答
0

这是MSDN的摘录,也许这就是您所看到的:

所有操作都返回受操作影响的行数。AffectedRows 属性的值与 Update、Insert 和 Delete 方法的返回值相同。

当调用Select方法并将数据源设置为 DataReader 模式时,所有情况下的返回值都是 0

如果是这种情况,那么也许您可以颠倒您的逻辑:

  • 默认情况下,显示带有“未找到记录”的标签
  • 为 DataList 的 ItemDataBound 事件创建一个处理程序,并在那里隐藏标签(因为在这种情况下您至少有一条记录)
于 2013-10-09T20:57:56.693 回答
0

您可能想要检查 DataList 中的项目数。试试这个:

Protected Sub SqlDataSource1_Selected(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceStatusEventArgs) Handles SqlDataSource1.Selected

  If DataList1.Items.Count = 0 Then
      lblMsg.Visible = True
      lblMsg.Text = "No records found"
  Else
      lblMsg.Text = ""
  End If

End Sub
于 2013-10-09T21:04:02.570 回答