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

Я пытаюсь добавить представление сетки динамически (давайте назовем это gridview2) к существующему представлению сетки (давайте назовем это gridview1), добавленному через страницу .aspx.

То, что я пытаюсь сделать, это: в зависимости от содержимого строки (точнее, номера счета, отображаемого в ячейке-1 с индексированием на основе нуля), отображаемого в «gridview1», я фильтрую данные из списка и отображаю данные в "gridview2".

Я где-то совершаю ужасную ошибку, или мой подход должен быть в корне неверным.

Ниже приведен код для gridview1, добавленный на странице .aspx.

<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;

Это получение данных, как показано здесь: здесь

А потом я пытаюсь добавить другой вид сетки в зависимости от уникального номера счета, отображаемого в каждой строке, с помощью следующего кода:

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();
        }

Но, похоже, ничего не происходит. Что не так с этим?

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

Кстати, я использую asp.net/c# visualstudio 2010. И я не использую LINQ в моем проекте, а база данных - sql server 2005

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

1 Ответ

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

С вашим подходом довольно много проблем.

  1. Вы создаете новое представление сетки в своем коде на стороне сервера, но никогда не добавляете представление сетки на страницу или любой другой элемент управления настраница!Он фактически говорит .NET о создании вида сетки, связывает его с данными, но не говорит .NET «где» визуализировать вид сетки на странице.Следовательно, вы ничего не видите.

  2. Динамические элементы управления - извините, если я здесь самонадеян, но я думаю, что вы не особо разбирались в динамических элементах управления в ASP.NET.Весь мой искренний совет будет не использовать их так далеко, как вы можете.Динамически создаваемые элементы управления поставляются с ОГРОМНЫМ багажом в отношении их состояния, событий после их отправки и фактически должны добавляться к каждому сообщению обратно на страницу.Короче говоря, если вы добавляете кнопку динамически на странице как

    Button btn = new Button ();

    btn.Text = "hi";Page.Controls.Add (btn);

Затем вы должны запускать этот код при каждой обратной передаче страницы.Если во время какой-либо обратной передачи этот код не будет запущен, кнопка будет отсутствовать, когда клиент увидит страницу.

Я могу предложить несколько подходов для достижения того, что вы пытаетесь сделать, однако, чтобы иметь возможность сделатьчто я хотел бы знать

  1. Где вы хотите, чтобы второе представление сетки отображалось на странице (т. е. встроено в первое или вне его)
  2. Когда вы хотитезаполнить второй gridview?Это что-то вроде ситуации, когда пользователь щелкает одну строку в первом виде сетки, а затем видит соответствующую информацию во втором виде сетки?
...