2012-04-16 57 views
0

我有一個asp.net應用程序中的gridview。我想插入一個帶圖像按鈕的列,點擊它可以啓用或禁用用戶或更改數據庫中的狀態字段,並相應地更改圖像按鈕圖像的用戶狀態。Gridview中啓用和禁用圖像按鈕

含義:我想爲禁用和啓用的用戶顯示不同的圖像。

如何在C#中執行此操作並將數據綁定到圖像按鈕?

任何人都請幫忙。提前致謝。

回答

1

使用ItemDataBound事件。這是您可以檢查網格的每一行並對其應用更改的位置。然後,你可以隱藏/取消隱藏或更改按鈕:

VB.net以下,但你可以很容易地轉換爲C#:

  Dim ib As ImageButton = CType(e.Item.FindControl("ibFav"), ImageButton) 
      ib.Visible = False 
      Dim ib2 As ImageButton = CType(e.Item.FindControl("ibRemFav"), ImageButton) 
      ib2.Visible = True 
1

樣品用戶型號:

public class UserModel {  
     public string Name { get; set; } 
     public bool IsEnabled { get; set; } 
} 

這裏是GridView的代碼:

<asp:GridView ID="GridView" runat="server" AutoGenerateColumns="false" 
    onrowcommand="GridView_RowCommand" onrowdatabound="GridView_RowDataBound"> 
    <Columns> 
     <asp:TemplateField> 
      <ItemStyle HorizontalAlign="Center" /> 
      <ItemTemplate> 
       <asp:ImageButton ID="EnabledImgBtn" runat="server" 
        CommandArgument='<%# Eval("Name") %>' 
        CommandName="ResetUserState" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:BoundField DataField="Name" HeaderText="Name" /> 
     //Other columns.... 
    </Columns> 
</asp:GridView> 

根據您的需要設置'CommandArgument'。例如用戶的ID。 示例代碼,後面爲GridView:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack){ 
     LoadGridView(); 
    } 
} 

private void LoadGridView() 
{ 
    this.GridView.DataSource = GetUsersFromDatabase(); 
    this.GridView.DataBind(); 
} 

protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     var user = e.Row.DataItem as UserModel; 
     var enabledImgBtn = e.Row.FindControl("EnabledImgBtn") as ImageButton; 
     if (enabledImgBtn != null) 
      enabledImgBtn.ImageUrl = user.IsEnabled ? "~/YourImagePath/enabled.png" 
                : "~/YourImagePath/disalbed.png"; 
    } 
} 

protected void GridView_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    if (e.CommandName == "ResetUserState") 
    { 
     if (e.CommandArgument!= null) 
      { 
      var userName = e.CommandArgument.ToString();    
      //Change user enabled state and Update database 
      //Sample code: 
      var user = FindUserByName("userName"); 
      user.IsEnabled = !user.IsEnabled; 
      //SaveInDatabase(user); 
      LoadGridView(); 
      } 
    } 
} 

您可以考慮使用「CommandField中」與類型等於「形象」而不是「模板列」,但這種方法,read more的問題。

希望這會有所幫助。

0
<asp:GridView ID="GridView" runat="server" AutoGenerateColumns="false" 
    onrowcommand="GridView_RowCommand" onrowdatabound="GridView_RowDataBound"> 

    <Columns> 
     <asp:TemplateField HeaderText="Change Status" ItemStyle-CssClass="GrdItemImg"> 
          <ItemTemplate> 
           <asp:ImageButton ID="ibtnChangeActiveStatus" CommandArgument='<%#Eval("RecordID")%>' 
            CommandName='GRDSTATUS' runat="server" ImageUrl='<%# getStatusImage(Convert.ToInt32(DataBinder.Eval(Container.DataItem,"IsApproved"))) %>' /> 
          </ItemTemplate> 
         </asp:TemplateField> 

     <asp:BoundField DataField="Col2" HeaderText="Col2" /> 
     //Other Respective columns.... 
       ........... 
       .......... 
    </Columns> 

</asp:GridView> 

並在CS文件中添加以下功能。

public string getStatusImage(int intStatus) 
    { 
     string strStatus = string.Empty; 

     if (intStatus == 1) 
     {    
      strStatus = "~/images/active.png"; 
     } 
     else 
     { 
      strStatus = "~/images/inactive.png"; 
     } 

     return strStatus; 
    } 

因此,在「intStatus」的基礎上,將設置相應的主動/主動圖像。