嵌套gridview的问题

时间:2011-03-30 08:36:49

标签: c# asp.net gridview nested

我正在尝试动态添加gridview(让我们调用此gridview2)到通过.aspx页面添加的现有gridview(让我们调用此gridview1)。

我要做的是:根据显示在“gridview1”中的行的内容(更具体地说,在单元格1中显示的基于零的索引的发票编号),我将从列表中过滤数据并显示“gridview2”中的数据。

我在某个地方犯了一些可怕的错误,或者我的做法应该是根本错误的。

以下是.aspx页面中添加的gridview1的代码。

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="ClickingBtn_Click" />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    DataSourceID="SqlDataSource1">
    <Columns>
        <asp:BoundField DataField="Date Of Transaction" 
            HeaderText="Date Of Transaction" SortExpression="Date Of Transaction" />
        <asp:BoundField DataField="Invoice Number" HeaderText="Invoice Number" 
            SortExpression="Invoice Number" />
        <asp:BoundField DataField="totalAmount" HeaderText="totalAmount" 
            ReadOnly="True" SortExpression="totalAmount" />
    </Columns>

</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:ComponentDBConnectionString %>" 
    SelectCommand="SelectUserPreviousHistory" SelectCommandType="StoredProcedure">
    <SelectParameters>
        <asp:Parameter DefaultValue="duran" Name="userName" Type="String" />
    </SelectParameters>
</asp:SqlDataSource>
&nbsp;

这是获取数据,如下所示:here

然后我尝试添加另一个gridview,具体取决于每行中显示的唯一发票号码,代码如下:

foreach (GridViewRow gridviewrow in GridView1.Rows)
        {

            GridView gridView2 = new GridView();
            gridView2.AutoGenerateColumns = true;
            String x = gridviewrow.Cells[1].Text; //IT FETCHES THE INVOICE NUMBER FROM EACH ROW
            softwareTitlesList = SoftwareListRetrieve(); //lIST OF ALL THE SOFTWARE TITLES ADDED TO LIST
            ArrayList titles = new ArrayList();
            foreach (SoftwareTitles softwareTitle in softwareTitlesList)
            {
                if (softwareTitle.InvoiceNumber.Contains(x))
                    titles.Add(softwareTitle.SoftwareTitle); //ADDING ONLY THOSE TITLES THAT MATCH THAT PARTICULAR INVOICE NUMBER
            }
            gridView2.DataSource = titles;
            gridView2.DataBind();
        }

但似乎没有发生任何事情。这有什么问题?

请帮帮我

BTW我正在使用asp.net/c# visualstudio 2010.我在我的项目中没有使用LINQ而且数据库是sql server 2005

感谢您的期待

1 个答案:

答案 0 :(得分:1)

您的方法存在很多问题。

  1. 您确实在服务器端代码中创建了一个新的gridview,但您从未将gridview添加到页面或页面上的任何其他控件!它有效地告诉.NET创建一个gridview,将它绑定到数据但它没有告诉.NET“在哪里”在页面上呈现gridview。因此你没有看到任何东西。

  2. 动态控件 - 如果我在这里放肆,我很抱歉,但我认为你在ASP.NET中没有太多的动态控件。我全心全意的建议是尽量不要使用它们。动态创建的控件在其状态,回发事件方面带有巨大的包袱,实际上必须在每个帖子上添加回页面。简而言之,如果您在页面上动态添加按钮

    按钮btn = new Button();

    btn.Text =“hi”; Page.Controls.Add(BTN);

  3. 然后,您必须在页面的每个回发中触发此代码。如果在任何回发期间此代码未被触发,则当客户端看到该页面时,该按钮将丢失。

    我可以建议一些方法来实现你想要做的事情,但是能够做到这一点我想知道

    1. 您希望第二个网格视图出现在页面中(即嵌入在第一个网格视图中或在其外部)
    2. 您想何时填充第二个gridview?是否类似于用户在第一个gridview中单击一行然后在第二个gridview中查看相关信息的情况?