потеря первого результата извлеченных данных при привязке их к элементу управления repeater

#asp.net #repeater #sqldatareader

#asp.net #повторитель #sqldatareader

Вопрос:

Я разрабатываю социальную сеть, в которой я должен показывать список друзей текущему пользователю.

я использую SqlDataReader для извлечения данных из базы данных, а затем привязываю их к повторителю, проблема в том, что повторитель всегда пропускает первый результат, поэтому он показывает только n-1 результат из n. кто-нибудь может объяснить мне это поведение?

мой код:

 string cmdstr2 = "SELECT students.fname, students.lname,students.username FROM students INNER JOIN friends ON students.username = friends.tostudent WHERE (friends.fromstudent ='"   cuser   "')";

SqlCommand cmd2 = new SqlCommand(cmdstr2, sc);
SqlDataReader rd = cmd2.ExecuteReader();

if (rd.Read())
        {

            Repeater1.DataSource = rd;
            Repeater1.DataBind();
        }
  

в режиме конструктора я написал этот код, чтобы включить repeater на страницу:

 <asp:Repeater ID="Repeater1" runat="server">
                        <HeaderTemplate>
                                    <div style="font-size:xx-large;">
                                        الأصدقاء</div>

                        </HeaderTemplate>
                        <ItemTemplate>
                          <div style="font-size:x-large; color:Black; margin-right:0px; margin-top:0px;">
                                        <asp:HyperLink ID="HyperLink1" runat="server" 

                                        NavigateUrl='<%# "student.aspx?user=" DataBinder.Eval(Container.DataItem,"username")%>' >

                <%#DataBinder.Eval(Container.DataItem, "fname")%>amp;nbsp;<%#DataBinder.Eval(Container.DataItem, "lname")%>
                </asp:HyperLink>
                                    </div>

                        </ItemTemplate>
                        <FooterTemplate>
                        </FooterTemplate>
                    </asp:Repeater>
  

Ответ №1:

Ваш rd.Read() в вашем операторе if продвигает его на 1 запись

Попробуйте использовать:

 if (rd.HasRows)