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>


  1. {
  2. <asp:listview id="lvRoom" itemplaceholderid="itemPlaceHolderRoom" runat="server">
  3. <layouttemplate>
  4. <asp:placeholder id="itemPlaceHolderRoom" runat="server"></asp:placeholder>
  5. </layouttemplate>
  6. <itemtemplate>
  7. <asp:hiddenfield id="HF_ROOM_ID" runat="server" value="&lt;%# Eval(&quot;ROOM_ID&quot;)%&gt;">
  8. </asp:hiddenfield><br />
  9.  
  10. <asp:listview datasource="&lt;%# Eval(&quot;Price&quot;)%&gt;" id="lvPrice" itemplaceholderid="itemPlaceHolderPrice" runat="server">
  11. <layouttemplate>
  12. <asp:placeholder id="itemPlaceHolderPrice" runat="server"></asp:placeholder>
  13. </layouttemplate>
  14. <itemtemplate>
  15. <asp:hiddenfield id="HF_PRICE_ID" runat="server" value="&lt;%# Eval(&quot;PRICE_ID&quot;)%&gt;">
  16. </asp:hiddenfield></itemtemplate>
  17. </asp:listview>
  18. </itemtemplate>
  19. </asp:listview>
  20. }
重點是裡面那層的ListView中的Price物件
  1. public class Price
  2. {
  3. public string PRICE_ID { get; set; }
  4. public string PRICE_NAME { get; set; }
  5. public int PRICE { get; set; }
  6. public int ADDPRICE_MAN { get; set; }
  7. public int ADDPRICE_BED { get; set; }
  8. }
  9.  
  10. public class Room
  11. {
  12. public string ROOM_ID { get; set; }
  13. public string ROOM_NAME { get; set; }
  14.  
  15. public List Price { get; set; }
  16. public Room()
  17. {
  18. Price = new List();
  19. }
  20. }