как показать список внутри шаблона элемента управления gridview.

how to show a listview inside a gridview control's item template.
the gridview will list all bill_id from table_bill and list view will bind all the item_id and quantity having a specific item_bill_id from table_bill_details.
table_bill schema

  • bill_id (первичный ключ)
  • bill_date
  • bill_customer_id (внешний ключ этой таблицы, исходная таблица — table_customer)
  • table_bill_details schema

  • item_id (первичный ключ)
  • количество
  • item_bill_id (внешний ключ этой таблицы, исходная таблица — table_bill)

  • I needed in user interface as shown in the following image

    Это то, что мне нужно в пользовательском интерфейсе


    person Krishanu Dey    schedule 07.04.2012    source источник
    comment
    Почему вы хотите поместить ListView внутри GridView? Это как свинью помадой покрасить :/   -  person IrishChieftain    schedule 08.04.2012
    comment
    @IrishChieftain :: Мне это нужно, потому что между table_bill и table_bill_details существует отношение 1 ко многим. И этот метод поможет сгруппировать записи table_bill_details вместе с table_bill в соответствии с отношениями. В любом случае, я реализовал свой ответ. Я опубликую ответ очень скоро.   -  person Krishanu Dey    schedule 08.04.2012
    comment
    Схема базы данных не имеет ничего общего с тем, как вы отображаете свои данные. Используйте шаблоны ListView.   -  person IrishChieftain    schedule 08.04.2012


    Ответы (1)


    наконец-то я получил свой ответ. Просто сделайте это следующим образом...

    В файле .aspx


    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowDataBound="GridView1_RowDataBound">
            <Columns> 
                <asp:TemplateField>
                    <ItemStyle BackColor="#C2D88B" Width="250px" />
                    <ItemTemplate>
                        <div class="id">
                            <asp:Label ID="Label3" runat="server" Text='<%# Eval("bill_id") %>' ></asp:Label>
                        </div>
                        <div class="ex">
                            <p>
                                <asp:ListView ID="ListView1" runat="server">
                                    <ItemTemplate>
                                        <asp:Label ID="Label1" runat="server" Text='<%# Eval("item_id") %>'></asp:Label>
                                        <asp:Label ID="Label2" runat="server" Text='<%# Eval("quantity") %>'></asp:Label>
                                    </ItemTemplate>
                                    <ItemSeparatorTemplate>
                                    <br />                                        
                                    </ItemSeparatorTemplate>
                                </asp:ListView>
                            </p>
                        </div>
                    </ItemTemplate>
                </asp:TemplateField>                 
            </Columns>
        </asp:GridView>
    

    В файле aspx.cs


    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            DataSet ds = new DataSet();
            DataTable bill = new DataTable();
            bill.TableName = "cc";
    
            DataTable details = new DataTable();
            details.TableName = "ii";
    
            //Run necesserry commands to fill cc with values from table_bill & ii with values from table_bill_details
    
            ds.Tables.Add(catogory);
            ds.Tables.Add(item);
            DataRelation rel = new DataRelation("test", ds.Tables["cc"].Columns["bill_id"], ds.Tables["ii"].Columns["bill_id"]);
            ds.Relations.Add(rel);
            this.GridView1.DataSource = ds.Tables["cc"];
            GridView1.DataBind();
        }
    }
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            ListView inner = e.Row.FindControl("ListView1") as ListView;
            DataRowView drv = e.Row.DataItem as DataRowView;
            DataRow[] rows = drv.Row.GetChildRows("test");
            ArrayList lst = new ArrayList();
            for (int i = 0; i < rows.Length; i++)
            {
                Item ii = new Item(rows[i][2].ToString(), rows[i][1].ToString(), rows[i][0].ToString());
                lst.Add(ii);
            }
    
            inner.DataSource = lst;
            inner.DataBind();
    
            //drv.Row.
    
        }
    }
    
    class Item
    {
        string quantity;
    
        public string Quantity
        {
            get { return quantity;}
            set { quantity = value; }
        }
        string item_id;
    
        public string Bill_id
        {
            get { return item_id;}
            set { item_id = value; }
        }
        string bill_id;
    
        public string Bill_id
        {
            get { return bill_id;}
            set { bill_id = value; }
        }
    
        public Item(string quantity, string bill_id)
        {
            this.quantity = quantity;
            this.item_id = item_id;
            this.bill_id = bill_id;
        }
    
    }
    

    Это все, что я хотел. Всем спасибо.

    person Krishanu Dey    schedule 08.04.2012