【问题标题】:How to pass an ID from a repeater row to a nested gridview?如何将 ID 从中继器行传递到嵌套的网格视图?
【发布时间】:2013-10-02 10:01:12
【问题描述】:

问题

如果中继器中有一个gridview,如何将主键ID 传递给主键与中继器项模板行相关的gridview?

我目前正在尝试通过使用包含 PK 和控制参数的隐藏字段来检测它并将其绑定到网格视图。

当前错误

在 ControlParameter 'PK' 中找不到控件 'hidPK'。

缩写代码

<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

【问题讨论】:

    标签: asp.net vb.net gridview repeater controlparameter


    【解决方案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>
    

    【讨论】:

    • 谢谢汉斯,我确实认为这是错误的一个原因,但是将其移动到转发器会导致数据源被视为未声明。 “错误:'sqlSource' 未声明”。我怀疑是因为它无法再在中继器中找到 sqldatasource。有什么想法吗?
    • 您是如何在 ItemTemplate 中添加它的?我用 testdata 试过了,它似乎有效
    • 是的,如上。在页面加载后的代码中声明了 sqlSource。你同意这是获得独特价值的方式吗? PKID不能直接绑定repeater control吗?
    • 您需要代码隐藏中的 sqlSource 吗?现在有多个 sqlSource,如果您需要 sqlSource,您必须在 ItemDataBound 事件中使用 FindControl。类似于: GridView x= e.Item.FindControl("gridviewid") as GridView; SqlDataSource y= x.DataSource as SqlDataSource;
    • 感谢您对汉斯的帮助。这就是我目前正在尝试做的事情。请参阅我上面的编辑。我无法获得正确的语法。
    猜你喜欢
    • 2016-10-16
    • 2017-04-05
    • 1970-01-01
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多