如何在GridView控件的项模板中显示ListView列表。

5
如何在GridView控件的项模板中显示ListView。
GridView将列出来自table_bill的所有bill_id,而ListView将绑定所有具有特定item_bill_id的item_id和quantity,这些item_bill_id来自于table_bill_details。
table_bill架构
  • bill_id(主键)
  • bill_date
  • bill_customer_id(此表的外键,原始表是table_customer)
  • table_bill_details架构
  • item_id(主键)
  • quantity
  • item_bill_id(此表的外键,原始表是table_bill)

  • 我需要的用户界面如下图所示:
    This is what i needed in user interface

    为什么要在GridView中放置ListView?这就像给猪涂口红一样:/ - IrishChieftain
    1
    @IrishChieftain :: 我需要这个是因为table_bill和table_bill_details之间存在“一对多”的关系。这种技术将有助于根据关系将table_bill_details的记录与table_bill分组。无论如何,我已经实现了我的答案。我很快就会发布答案。 - Krishanu Dey
    数据库模式与数据展示方式无关。请使用ListView模板。 - IrishChieftain
    1个回答

    5

    最终我得到了答案。 只需按如下方式操作...

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

    这就是我想要的。谢谢大家。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接