2016年11月28日 星期一

製作row與column非固定的GridView

基本上原本的Gridview不能完成此項功能,因為如果是用動態新增column會抓不到ID
所以我這邊的做法是,使用雙重的ListVew做到動態新增row與column

外層是 row的 ListView 製作,然後裡面層是在外層的DataItem裡面多放一層ListView
然後裡面層的資料可以用外面層的物件,寫法如下


<asp:ListView ID="lvRoom" runat="server" ItemPlaceholderID="itemPlaceHolderRoom">
                        <LayoutTemplate>
                            <asp:PlaceHolder ID="itemPlaceHolderRoom" runat="server"></asp:PlaceHolder>
                             </LayoutTemplate>
                        <ItemTemplate>
                            <tr>
                                <td style="width:10%">
                                    <asp:HiddenField ID="HF_ROOM_ID" runat="server" Value='<%# Eval("ROOM_ID")%>' />
                                    <%# Eval("ROOM_NAME")%>
                                </td>
                                <asp:ListView ID="lvPrice" runat="server"  ItemPlaceholderID="itemPlaceHolderPrice" DataSource='<%# Eval("Price")%>'>
                                    <LayoutTemplate>
                                        <asp:PlaceHolder ID="itemPlaceHolderPrice" runat="server"></asp:PlaceHolder>
                                    </LayoutTemplate>
                                    <ItemTemplate>
                                        <asp:HiddenField ID="HF_PRICE_ID" runat="server" Value='<%# Eval("PRICE_ID")%>' />
                                    </ItemTemplate>
                                </asp:ListView>
                                <td></td>
                            </tr>
                        </ItemTemplate>
                    </asp:ListView>


{
<asp:listview id="lvRoom" itemplaceholderid="itemPlaceHolderRoom" runat="server">
 <layouttemplate>
  <asp:placeholder id="itemPlaceHolderRoom" runat="server"></asp:placeholder>
 </layouttemplate>
 <itemtemplate>
  
   <asp:hiddenfield id="HF_ROOM_ID" runat="server" value="&lt;%# Eval(&quot;ROOM_ID&quot;)%&gt;">
   </asp:hiddenfield><br />

   <asp:listview datasource="&lt;%# Eval(&quot;Price&quot;)%&gt;" id="lvPrice" itemplaceholderid="itemPlaceHolderPrice" runat="server">
    <layouttemplate>
     <asp:placeholder id="itemPlaceHolderPrice" runat="server"></asp:placeholder>
    </layouttemplate>
    <itemtemplate>
     <asp:hiddenfield id="HF_PRICE_ID" runat="server" value="&lt;%# Eval(&quot;PRICE_ID&quot;)%&gt;">  
    </asp:hiddenfield></itemtemplate>
   </asp:listview>
  
 </itemtemplate>
</asp:listview>
}
重點是裡面那層的ListView中的Price物件
    public class Price
    {
        public string PRICE_ID { get; set; }
        public string PRICE_NAME { get; set; }
        public int PRICE { get; set; }
        public int ADDPRICE_MAN { get; set; }
        public int ADDPRICE_BED { get; set; }
    }

    public class Room
    {
        public string ROOM_ID { get; set; }
        public string ROOM_NAME { get; set; }

        public List Price { get; set; }

        public Room()
        { 
            Price = new List();
        }
    }