2010-08-12 64 views
0

我有一個gridview顯示所有旅行 - 在該gridview中我有一箇中繼器,顯示在那次旅行期間訪問的國家(一對多)。我的轉發器假設要抓取tripID,然後填充填充轉發器的數據源。不幸的是,我的轉發器剛剛被填入最後一次指定的tripID。GridView中的中繼器 - 只從最後一個gridview ID拉動中繼器(導致每個中繼器是相同的)

<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(); 
    } 

回答

0

我決定不使用DataSource並使用我自己的,我給了我更多的靈活性,在轉移到下一行之前,在gridview中綁定repeater(不需要gridview)。

0

我的代碼項目數據綁定重新綁定看來我錯了。它會重新排列每一行,這可能解釋了爲什麼你只能得到第一行。我想你應該做的是去除產品總數和改變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(); 

    } 
} 

希望這有助於。

+1

試試看,似乎沒有工作:( – Spooks 2010-08-16 21:25:06