Повторитель в Gridview - Повторитель извлекает данные только из последнего идентификатора вида сетки (в результате чего каждый повторитель будет одинаковым) - PullRequest
0 голосов
/ 12 августа 2010

У меня есть сетка, которая отображает все поездки - в пределах этой сетки у меня есть повторитель, который отображает страны, которые посетили во время этой поездки (одна ко многим).Предполагается, что мой ретранслятор захватывает tripID, а затем заполняет источник данных, который заполняет ретранслятор.К сожалению, мой ретранслятор просто заполняется последним указанным tripID.

  <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="pkiTripID"
                    DataSourceID="SqlDataSource2" PageSize="20" AllowPaging="True" 
                    Width="100%" AllowSorting="True"
                    GridLines="None" onrowdatabound="GridView1_RowDataBound1">                 
                    <Columns>
                        <asp:BoundField DataField="TripType1" HeaderText="Type" SortExpression="TripType1" />
                        <asp:BoundField DataField="RegionName" HeaderText="Region" SortExpression="RegionName" />
                        <asp:TemplateField HeaderText="Country" HeaderStyle-ForeColor="#FF7900">
                            <ItemTemplate>
                                <asp:Repeater ID="RepeatCountry" runat="server"  
                                    DataSourceID="dsCountryByTripID" onitemdatabound="RepeatCountry_ItemDataBound">
                                    <ItemTemplate>
                                        <%# DataBinder.Eval(Container.DataItem, "CountryName") %>
                                    </ItemTemplate>
                                </asp:Repeater>
                            </ItemTemplate>
                            <HeaderStyle ForeColor="#FF7900" />
                        </asp:TemplateField>
                        <asp:BoundField DataField="OverallRating" HeaderText="Trip Rating" 
                            SortExpression="OverallRating" />
                        <asp:BoundField DataField="DepartureDate" HeaderText="Date" SortExpression="DepartureDate"
                            DataFormatString="{0:MMM-dd-yyyy}" HtmlEncode="false" />
                    </Columns>
                </asp:GridView> 

 <asp:SqlDataSource ID="dsCountryByTripID" runat="server" 
        ConnectionString="<%$ ConnectionStrings:myDB %>" 
        SelectCommand="spSelectCountriesByTripID" SelectCommandType="StoredProcedure">
        <SelectParameters>
        <asp:Parameter Type="Int32" Name="tripID"  DefaultValue="96" />
        </SelectParameters>
    </asp:SqlDataSource>

И мой код

  protected void GridView1_RowDataBound1(object sender, GridViewRowEventArgs e)
    {
        Repeater rp = (Repeater)e.Row.FindControl("RepeatCountry");

        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            dsCountryByTripID.SelectParameters.Clear();
            DataRowView drv = (DataRowView)e.Row.DataItem;
            string tripID = (drv["pkiTripId"]).ToString();
            dsCountryByTripID.SelectParameters.Clear();
            dsCountryByTripID.SelectParameters.Add("tripID", DbType.Int32, tripID);
            ////gv2.DataBind();
            //e.Row.DataBind();

        }
    }
    protected void RepeatCountry_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        e.Item.DataBind();
    }

Ответы [ 2 ]

0 голосов
/ 17 августа 2010

Я решил не использовать DataSource и использовать свой собственный, я дал мне больше гибкости, чтобы связать повторитель (не нужно для gridview) внутри gridview, прежде чем перейти к следующей строке.

0 голосов
/ 13 августа 2010

Переплет данных привязки данных мне кажется неправильным.Это будет повторное связывание в каждом ряду, что, вероятно, объясняет, почему вы получаете только первый ряд.Я думаю, что вы должны сделать это полностью удалить и изменить RowDataBound1 на это:

protected void GridView1_RowDataBound1(object sender, GridViewRowEventArgs e)
{
    Repeater rp = (Repeater)e.Row.FindControl("RepeatCountry");

    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        dsCountryByTripID.SelectParameters.Clear();
        DataRowView drv = (DataRowView)e.Row.DataItem;
        string tripID = (drv["pkiTripId"]).ToString();
        dsCountryByTripID.SelectParameters.Clear();
        dsCountryByTripID.SelectParameters.Add("tripID", DbType.Int32, tripID);

        rp.DataBind();

    }
}

Надеюсь, это поможет.

...