2013-10-02 40 views
1

問題如何將中繼行的ID傳遞給嵌套的gridview?

如果你有一個轉發器內一個gridview,你怎麼通過一個主鍵ID到主鍵涉及中繼器項目模板排在GridView?

我目前正在嘗試通過使用包含PK和控件參數來檢測它並將其綁定到gridview的hiddenfield來實現此目的。

電流誤差

找不到在ControlParameter 'PK' 控制 'hidPK'。

簡稱CODE

<asp:Repeater ID="rpt" RunAt="Server"> 
    <ItemTemplate> 
    <asp:HiddenField ID="hidPK" runat="server" Value='<%# DataBinder.Eval(Container.DataItem, "PK") %>'/> 

    <asp:GridView ID="GV" DataSourceID="sqlSource"></asp:GridView> 

    </ItemTemplate> 
</asp:Repeater> 

<asp:SqlDataSource ID="sqlSource" RunAt="Server" SelectCommand="spPopulateGridview" SelectCommandType="StoredProcedure"> 
    <SelectParameters> 
    <asp:ControlParameter Type="Int32" Name="PK" DefaultValue="0" ControlID="hidPK"/> 
    </SelectParameters> 
</asp:SqlDataSource> 

編輯

Protected Sub rpt_ItemDataBound(Sender As Object, e As RepeaterItemEventArgs) Handles rpt.ItemDataBound 
    If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then 
     Dim gv As GridView = TryCast(e.Item.FindControl("GV"), GridView)  
     gv.DataSource = ds 
     gv.DataBind() 
    End If 
End Sub 

回答

1

什麼,你可以嘗試在移動的SqlDataSource在轉發

<asp:Repeater ID="rpt" RunAt="Server"> 
    <ItemTemplate> 
    <asp:HiddenField ID="hidPK" runat="server" Value='<%# DataBinder.Eval(Container.DataItem, "PK") %>'/> 

    <asp:GridView DataSourceID="sqlSource"></asp:GridView> 
    <asp:SqlDataSource ID="sqlSource" RunAt="Server" SelectCommand="spPopulateGridview" SelectCommandType="StoredProcedure"> 
     <SelectParameters> 
     <asp:ControlParameter Type="Int32" Name="PK" DefaultValue="0" ControlID="hidPK"/> 
     </SelectParameters> 
    </asp:SqlDataSource> 
    </ItemTemplate> 
</asp:Repeater> 
+0

感謝漢斯,我也認爲這是犯錯的原因或者將其移入中繼器會導致數據源被視爲未聲明。 「錯誤:'sqlSource'沒有聲明」。我懷疑是因爲它不能再在中繼器中找到sqldatasource。有任何想法嗎? – Obsidian

+0

你是怎麼在ItemTemplate中添加它的?我用testdata試過它,它似乎能工作 –

+0

是的,如上所述。在頁面加載時,在代碼後面聲明sqlSource。你會同意這是獲得獨特價值的方式嗎? PKID不能直接綁定到中繼控制器嗎? – Obsidian

相關問題