我的网站有这个主要问题。因此,我多次检查了我的所有代码,但似乎一切都很好。
例如,在此页面上显示此错误
DataBinding: 'System.Data.DataRowView' does not contain a property with the name 'chemistID'.
我检查了我的表列名称是否相同。同样在代码中,我检查了列名是否正确。我检查了侧列表视图代码,它是正确的。它仍然显示错误。以下是我的ListView和数据绑定代码。
<asp:ListView ID="chemists" runat="server" DataKeyNames="chemistID" DataKey="chemistID">
<ItemTemplate>
<!--list-content-blocks-starts--><div class="list-content-blocks">
<!--list-data-starts--><div class="list-data">
<!--head-title-starts--><div class="head-title">
<h3><asp:HyperLink ID="name" runat="server" NavigateUrl='<%# "chemist-details?chemistID=" + Eval("chemistID").ToString() %>' Text='<%# Eval("name") %>'>HyperLink</asp:HyperLink></h3>
<div class="list-address">
<asp:Label ID="address" runat="server" Text='<%# Eval("address") %>'></asp:Label>
<%--<asp:Label ID="street" runat="server" Text= '<%# Eval("streetName") %>'></asp:Label>,
<asp:Label ID="area" runat="server" Text= '<%# Eval("areaName") %>'></asp:Label>,
<asp:Label ID="city" runat="server" Text= '<%# Eval("city") %>'></asp:Label>,
<asp:Label ID="zip" runat="server" Text= '<%# Eval("zipCode") %>'></asp:Label>.--%>
</div>
</div><!--head-title-ends-->
<div class="clear"></div>
<!--content-in-starts--><div class="content-in">
<!--contenr-dp-starts--><div class="content-dp">
<img id="thumbnail" runat="server" src='<%# Eval("thumbnail") %>' />
</div><!--content-dp-ends-->
<!--content-other-details-starts--><div class="content-other-details">
<section class="known-for">
<ul class="bestFor">
<asp:Label ID="knownFor" runat="server" Text='<%# Eval("products")%>'></asp:Label>
<li class="showMore"><asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# "chemist-details?chemistID=" + Eval("chemistID").ToString() %>' Text="More"></asp:HyperLink></li>
</ul>
</section>
<!--list-time-starts--><div class="list-time">
<div class="list-time-inner">WORKING HOURS |
<asp:Label ID="opdFrom" runat="server" Text='<%# Eval("slot1From") %>'></asp:Label> To
<asp:Label ID="opdTo" runat="server" Text='<%# Eval("slot1To") %>'></asp:Label></div>
</div><!--list-time-ends-->
<%-- <!--list-time-starts--><div class="feesC">
<div class="fees-inner"><asp:Label ID="consulting" runat="server" Text='<%# Eval("consultancyFees") %>'></asp:Label> / Doctor</div>
</div><!--list-time-ends-->--%>
<!--sms-button-starts--><div class="sms-button">
<asp:Button ID="getSMS" CssClass="get-sms" runat="server" Text="Get SMS" />
</div><!--sms-button-ends-->
</div><!--content-other-details-ends-->
</div><!--content-in-ends-->
</div><!--list-data-ends-->
<!--rating-show-starts--><div class="rating-show">
<div class="rating-show-inner">
<div class="show-rating vote1"><asp:Label ID="lblRating" runat="server"></asp:Label></div>
<div class="show-votes"><asp:label ID="totalVotes" runat="server"></asp:label> <asp:Label ID="seeVote" runat="server" Text="Vote"></asp:Label></div>
</div>
<%--<div class="rating-show-inner">
<div class="show-rating rank1"><span>8</span></div>
<div class="show-votes">in Pune</div>
</div>--%>
</div><!--rating-show-ends-->
<div class="clear"></div>
</div><!--list-content-blocks-ends-->
</ItemTemplate>
<EmptyDataTemplate>
<div class="not-found">
<p>Sorry! Selected Query Not Found</p>
<center><img src="images/not-found.jpg"</center>
</div>
</EmptyDataTemplate>
<LayoutTemplate>
<ul id="itemPlaceholderContainer" runat="server" style="">
<li runat="server" id="itemPlaceholder" />
</ul>
</LayoutTemplate>
</asp:ListView>
<div class="datapager" style="padding-bottom: 10px;">
<asp:DataPager ID="DataPager1" runat="server" PageSize="10" PagedControlID="chemists" ViewStateMode="Enabled">
<Fields>
<asp:NextPreviousPagerField ButtonType="Link" ShowFirstPageButton="false" ShowPreviousPageButton="true"
ShowNextPageButton="false" />
<asp:NumericPagerField ButtonType="Link" />
<asp:NextPreviousPagerField ButtonType="Link" ShowNextPageButton="true" ShowLastPageButton="false" ShowPreviousPageButton="false" />
</Fields>
</asp:DataPager>
</div>
数据绑定代码
Private Sub chemists_PreRender(sender As Object, e As EventArgs) Handles Me.PreRender
chemists.DataSource = GetData()
chemists.DataBind()
End Sub
Private Function GetData() As Data.DataTable
Try
If Session("Data") IsNot Nothing Then
Return Session("Data")
Else
DataPager1.SetPageProperties(0, DataPager1.PageSize, False) 'reinit
Dim citySelector As Label = Page.Master.FindControl("locationPopupActivator")
Using con As New MySql.Data.MySqlClient.MySqlConnection(ConfigurationManager.ConnectionStrings("conio").ConnectionString)
Dim cmd As New MySql.Data.MySqlClient.MySqlCommand("SELECT chemistID, name, address, thumbnail, slot1From, slot1To, products FROM chemists where city like @city and status = 'active'", con)
cmd.CommandType = Data.CommandType.Text
cmd.Parameters.Add("@city", MySqlDbType.VarChar, 50).Value = citySelector.Text & "%" 'same as Session("masterLocation")
Dim table As New Data.DataTable()
Dim da As New MySql.Data.MySqlClient.MySqlDataAdapter(cmd)
da.Fill(table)
countItems.Text = table.Rows.Count().ToString
da.Dispose()
cmd.Dispose()
Session("Data") = table
Return table
End Using
End If
Catch ex As Exception
Response.Write(ex) 'for debug purpose
Return Nothing
End Try
End Function
我创建了一个新项目来尝试重现您的问题。我创建了一个名为"chemists"的数据库表,主键为"chemistID",以及 Select 语句中看到的其他字段。我使用了MS SQL数据库而不是MySQL,并从ListView中删除了DataKey
属性,我认为这是DataKeys
?
我将数据库中表的名称更改为"chemists2",并在执行SQL命令时收到SQL错误,但这与您发布的错误不同。
然后,我更改了列表视图的 DataKeyNames 属性,然后我确实收到了与您相同的错误。我将 DataKeyNames 更改为"chemistID3",如下所示:<asp:ListView ID="chemists" runat="server" DataKeyNames="chemistID3">
,并运行了代码,这导致了错误,"DataBinding: 'System.Data.DataRowView' 不包含名为 'chemistID3' 的属性。
我通过将Eval("chemistID")
行(ListView 中有两个行)更改为 Eval("chemistID3")
来解决此错误。此时我没有收到您的错误,但再次收到SQL错误。然后,我将chemistID的每个实例都更改为chemistID3,一切又开始工作。
总而言之:数据库表中的 chemistID 列必须与 SELECT 语句中的列完全匹配,并且必须与 DataKeyNames 属性匹配,并且必须与 Eval() 表达式要查找的内容匹配。我建议刷新您的数据库并确保列是您所期望的。我还建议重建项目。我希望这有帮助!
好吧,我找到了解决方案。我的代码没有任何问题。我有与会话(数据)同名的页面数。事情是在每个页面上产生问题会话(数据)存储不同的信息。我只是更改了每个页面上的会话名称,因此它不会相互覆盖。