【问题标题】:DataBinding: 'System.Data.DataRowView' does not contain a property with the name but all setting seems properDataBinding:“System.Data.DataRowView”不包含具有名称的属性,但所有设置似乎都正确
【发布时间】:2016-07-08 04:39:41
【问题描述】:

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

例如在this page 上显示此错误

DataBinding: 'System.Data.DataRowView' does not contain a property with the name 'chemistID'. 

我检查了我的表列名称,它是相同的。另外在代码中我检查了列名是否正确。我签入了 Listview 代码,它是正确的。仍然显示错误。以下是我的 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

【问题讨论】:

  • 请不要在代码 sn-ps 之前发布大量空白。它只是让我们难以阅读。选择时使用 Alt 键可让您在任意位置选择代码块,从而排除所有行前的空格。
  • 确保在“chemists”表中有一个名为“chemistID”的列。此外,您可以尝试保留 DataKeyNames 但去掉 DataKey 属性,看看是否有帮助。

标签: asp.net vb.net listview data-binding


【解决方案1】:

我创建了一个新项目来尝试重现您的问题。我创建了一个名为“chemists”的数据库表,主键为“chemistID”,其他字段在您的 Select 语句中可见。我使用 MS SQL 数据库而不是 MySQL,并从 ListView 中删除了 DataKey 属性,我认为该属性是 DataKeys?

我将数据库中的表名改为“chemists2”,执行SQL命令时收到SQL错误,但这个错误与你发布的不同。

然后我更改了 ListView 的 DataKeyNames 属性,然后我确实收到了与您相同的错误。我将 DataKeyNames 更改为“chemistID3”,如下所示:&lt;asp:ListView ID="chemists" runat="server" DataKeyNames="chemistID3"&gt;,然后运行代码,出现错误“DataBinding:'System.Data.DataRowView' 不包含名为 'chemistID3' 的属性。”

我通过将Eval("chemistID") 行(ListView 中有两个)更改为Eval("chemistID3") 解决了这个错误。此时我没有收到您的错误,但再次收到 SQL 错误。然后我将 chemistID 的每个实例都更改为 chemistID3,一切又开始工作了。

总结一下:数据库表中的 chemistID 列必须与 SELECT 语句中的列完全匹配,并且必须匹配 DataKeyNames 属性,并且必须匹配 Eval() 表达式正在查找的内容。我建议刷新您的数据库并确保列是您所期望的。我还建议重建项目。我希望这会有所帮助!

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-10-07
      • 1970-01-01
      • 2012-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多