2014年5月21日 星期三

ASP.NET GridView EditItemTemplate變換不同物件

ASP.NET GridView EditItemTemplate變換不同物件

在RowEditing時依據資料來源顯示不同的物件,下列以TextBox程DropDownList為例:
hfGvnetobject=>存放來自資料庫記載的物件別(TextBox or DropDownList)
hfGvnetobject.Value 等於TextBox時,顯示TextBox隱藏DropDownList物件
hfGvnetobject.Value 等於DropDownList時,顯示DropDownList隱藏TextBox物件
以下範例:

HTML:
  1. <asp:TemplateField HeaderText="value">
  2. <ItemStyle HorizontalAlign="Center" Width="170" />
  3. <EditItemTemplate>
  4. <asp:HiddenField ID="hfGvnetobject" runat="server" Value='<%# Bind("netobject") %>' />
  5. <asp:TextBox ID="tbxGvvalue1" runat="server" Text='<%# Bind("value1") %>'></asp:TextBox>
  6. <asp:DropDownList ID="ddlGvvalue1" runat="server"></asp:DropDownList>
  7. </EditItemTemplate>
  8. <ItemTemplate>
  9. <asp:Label ID="lblGvvalue1" runat="server" Text='<%# Eval("value1") %>'></asp:Label>
  10. </ItemTemplate>
  11. </asp:TemplateField>

C#:
  1. protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
  2. {
  3. if (e.Row.RowType != DataControlRowType.DataRow) // 非資料行, 離開
  4. return;
  5. if (e.Row.RowState == DataControlRowState.Edit || ((int)e.Row.RowState) == 5) //判斷為Edit模式,因偶數列無法判斷故加入((int)e.Row.RowState)==5的條件
  6. {
  7. HiddenField hfGvnetobject = e.Row.FindControl("hfGvnetobject") as HiddenField; //取得EditItemTemplate下的hfGvnetobject Value存放物件型態
  8. TextBox tbxGvvalue1 = e.Row.FindControl("tbxGvvalue1") as TextBox; //取得EditItemTemplate下的TextBox物件
  9. DropDownList ddlGvvalue1 = (DropDownList)e.Row.FindControl("ddlGvvalue1"); //取得EditItemTemplate下的DropDownList物件
  10. if (hfGvnetobject.Value == "TextBox") //假設物件型態等於TextBox, 顯示TextBox物件, 隱藏DropDownList物件
  11. {
  12. tbxGvvalue1.Visible = true;
  13. ddlGvvalue1.Visible = false;
  14. }
  15. if (hfGvnetobject.Value == "DropDownList") //假設物件型態等於DropDownList, 顯示DropDownList物件, 隱藏TextBox物件
  16. {
  17. tbxGvvalue1.Visible = false;
  18. ddlGvvalue1.Visible = true;
  19. }
  20. }
  21. }

沒有留言:

張貼留言