how to show a listview inside a gridview control's item template.

asp.net, gridview, listview

Solution

finally I have got my answer. Just do it as follows...

In .aspx file

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

On aspx.cs file

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

}

That's all I wanted. Thanks everyone.

Problem

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 (Primary Key) - bill_date - bill_customer_id (Foreign Key of this table, Origin table is table_customer) table_bill_details schema - item_id (Primary Key) - quantity - item_bill_id (Foreign Key of this table, Origin table is table_bill) I needed in user interface as shown in the following image

Original source