使用Repeater Control作为嵌套gridview的命令参数

时间:2010-02-05 01:26:07

标签: asp.net .net-2.0

我有一个包含嵌套网格视图的转发器。现在,我需要能够在转发器内部的标签中检索值数据绑定,并将其用作gridview的输入参数。

以下是一些代码,希望能让您更好地了解我正在尝试做的事情。

enter code here

  <asp:Repeater ID="Repeater1" runat="server" DataSourceID="RepeaterDS"  OnItemDataBound="Repeater1_SendRollNumber">
                <HeaderTemplate>
                </HeaderTemplate>
                <ItemTemplate>
                    <table style="width: 615px;" id="Table1">
                        <tr>
                            <td>
                                <b>Roll #:</b>
                                <asp:Label runat="server" ID="RollIDLabel" Text='<%# Eval("RollID") %>' />
                                <asp:Label runat="server" ID="RollIDLabelCode" Text='<%# Eval("RollID") %>' Visible="false" />
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <b>Address:</b>
                                <asp:Label runat="server" ID="AddressLabel" Text='<%# Eval("Address") %>' />
                    </table>
                    <asp:Label ID="Label1" runat="server"><b>Parties:</b></asp:Label>
                    <asp:GridView ID="GridView3" runat="server" BackColor="White" BorderColor="#DEDFDE"
                        BorderStyle="None" BorderWidth="1px" CellPadding="4" ForeColor="Black" GridLines="Vertical"
                        AllowPaging="True" Width="620px" DataSourceID="AssessmentDetailsFromRollIDDS"
                        EmptyDataText="None Associated" AutoGenerateColumns="False" ShowFooter="true">
                                                        <asp:TemplateField HeaderText="Property Assessment" HeaderStyle-Font-Bold="true"
                                FooterStyle-BackColor="White">
                                <ItemTemplate>
                                    <asp:Label ID="PropAssessType" runat="server" Width="90%" Text='<%# Eval("PropertyAssessmentType") %>'></asp:Label>
                                    <asp:Label ID="PropAssessDsc" runat="server" Text='<%# Eval("PropertyAssessmentDesc") %>'></asp:Label>
                                </ItemTemplate>
                                <FooterTemplate>
                                </FooterTemplate>
                            </asp:TemplateField>

                        <RowStyle BackColor="#F7F7DE" />
                        <FooterStyle BackColor="#CCCC99" />
                        <PagerStyle BackColor="#F7F7DE" ForeColor="Black" HorizontalAlign="Right" />
                        <SelectedRowStyle BackColor="#CE5D5A" Font-Bold="True" ForeColor="White" />
                        <HeaderStyle BackColor="#3E4E4E" Font-Bold="True" ForeColor="White" />
                        <AlternatingRowStyle BackColor="White" />
                    </asp:GridView>
                </ItemTemplate>
            </asp:Repeater>

    <asp:ObjectDataSource ID="RepeaterDS" runat="server" OldValuesParameterFormatString="original_{0}"
        SelectMethod="GetRollNumberbyAppealID" TypeName="BusinessLayer.BSO.Roll_AssessmentDetailsBSO">
        <SelectParameters>
            <asp:QueryStringParameter Name="AppealID" QueryStringField="appealID" Type="Int32" />
        </SelectParameters>
    </asp:ObjectDataSource>

    <asp:ObjectDataSource ID="AssessmentDetailsFromRollIDDS" runat="server" OldValuesParameterFormatString="original_{0}"
        SelectMethod="GetAssessDetailsFromRollID" OnSelecting="AssessmentDetailsFromRollIDDS_Selecting" TypeName="BusinessLayer.BSO.Assessment_DetailsBSO">
        <SelectParameters>
           <asp:ControlParameter Name="RollID" ControlID="RollIDLabelCode" Type="String" /> 
        </SelectParameters>
    </asp:ObjectDataSource>

我试图尽可能多地删除代码,同时留下问题的内容。所以我基本上希望位于转发器中的标签控件RollIDLabelCode也是我的gridview的输入。问题是我不断收到错误,例如无法找到控件RollIDLabelCode。我听说有一个错误,你需要指定所有命名容器。我试过没有运气。

我尝试过的另一条路线是在后面的代码中执行此操作。

enter code here


    public void Repeater1_OnItemDataBound(Object Sender, RepeaterItemEventArgs e)
    {
                  // Execute the following logic for Items and Alternating Items.
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            string  test = ((Label)e.Item.FindControl("RollIDLabel")).Text;
        }
    }

    public void AssessmentDetailsFromRollIDDS_OnSelecting(object sender, ObjectDataSourceSelectingEventArgs e)
    {

        e.InputParameters["RollID"] = "Need the Info here";
    }

在转发器上进行数据绑定和objectdatasource onselecting函数调用这些函数。这些工作分别很好。我只需要知道如何从Repeater1_OnItemDataBound函数中的字符串测试中获取信息到OnSelecting函数中的e.InputParameters [“RollID”]。

希望有人知道如何做到这一点。我是.net编程的新手。我感谢任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:0)

RollIDLabelCode标签设置为visible = false,这意味着它在渲染时将不存在,因此无法尝试访问该值。您需要使用隐藏但在渲染时存在的其他控件。例如,GridView具有控件中存在但未呈现的数据键。例如,它用于检索行的键值以检索更多数据。