проблема с вложенным gridview asp.net/C# - PullRequest
0 голосов
/ 30 марта 2011

У меня есть gridview1, который является родительским gridview, и я хочу вставить другой gridview2, который является дочерним gridview, внутри каждой строки родительского gridview

Это код в .aspx

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<asp:GridView ID="GridView1" runat="server">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:GridView ID="gridView2" runat="server">
                </asp:GridView>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

Это код, который я добавил внутри события RowDataBound, и я просто связываю gridview2 с массивом данных, который фильтрует данные в зависимости от содержимого номера счета в каждой строке

 protected void GridView1_RowDataBound(Object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            foreach (GridViewRow gridviewrow in GridView1.Rows)
            {
                gridView2.AutoGenerateColumns = true;
                String x = gridviewrow.Cells[1].Text;
                softwareTitlesList = SoftwareListRetrieve();
                ArrayList titles = new ArrayList();
                foreach (SoftwareTitles softwareTitle in softwareTitlesList)
                {
                    if (softwareTitle.InvoiceNumber.Contains(x))
                        titles.Add(softwareTitle.SoftwareTitle);
                }
                gridView2.DataSource = titles;
                gridView2.DataBind();
            }
        }
    }

Но, похоже, ничего не происходит.

Пожалуйста, помогите мне

Спасибо в ожидании

Ответы [ 2 ]

1 голос
/ 30 марта 2011

Одна проблема заключается в том, что вы делаете это в RowDataBound Событии. Это будет запущено для каждой строки в GridView1, связанной с источником данных. По сути, вы каждый раз сбрасываете источник данных для GridView2. Попробуйте вместо этого использовать DataBound Событие вида сетки.

0 голосов
/ 30 марта 2011

Событие RowDataBound запускается, когда строки связывают данные. ты должен делать как ...

protected void GridView1_RowDataBound(Object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        System.Data.DataRowView dr = (System.Data.DataRowView)e.Row.DataItem;

            gridView2.AutoGenerateColumns = true;
            String x = dr["yourColumnName"].ToString();
            softwareTitlesList = SoftwareListRetrieve();
            ArrayList titles = new ArrayList();
            foreach (SoftwareTitles softwareTitle in softwareTitlesList)
            {
                if (softwareTitle.InvoiceNumber.Contains(x))
                    titles.Add(softwareTitle.SoftwareTitle);
            }
            GridView gridView2 = (GridView)e.Row.Findcontrol("gridView2");//add this
            gridView2.DataSource = titles;
            gridView2.DataBind();

    }
}

Редактировать для комментариев:

GridView gridView2 = (GridView)e.Row.Findcontrol("gridView2");// add this line 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...