数据绑定:"System.Data.DataRowView"不包含具有名称的属性,但所有设置似乎都正确



我的网站有这个主要问题。因此,我多次检查了我的所有代码,但似乎一切都很好。

例如,在此页面上显示此错误

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 &nbsp;&nbsp;|&nbsp;&nbsp; 
                                                    <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() 表达式要查找的内容匹配。我建议刷新您的数据库并确保列是您所期望的。我还建议重建项目。我希望这有帮助!

好吧,我找到了解决方案。我的代码没有任何问题。我有与会话(数据)同名的页面数。事情是在每个页面上产生问题会话(数据)存储不同的信息。我只是更改了每个页面上的会话名称,因此它不会相互覆盖。

最新更新