2012-04-16 19 views
0

私はasp.netアプリケーションでgridviewを持っています。私はそれをクリックすることで、ユーザーの有効/無効を切り替えるか、dbのステータスフィールドを変更したり、イメージのボタンイメージをユーザーの状態に応じて変更したりすることができます。グリッドビューと画像ボタンの有効化と無効化

意味:無効になっているユーザーと有効になっているユーザーに異なる画像を表示したいとします。

これをC#で行い、データを画像ボタンにバインドするにはどうすればよいですか?

誰でも手伝ってください。前もって感謝します。

答えて

1

ItemDataBoundイベントを使用します。ここでは、グリッドの各行を確認し、変更を適用することができます。そして、あなたは/非表示を非表示にしたり、ボタンを変更することができます。

VB.netの下にいますが、簡単にC#2に変換することができます:

  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(); 
      } 
    } 
} 

あなたは代わりに「TemplateField」の「画像」に等しいタイプで「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"のベースでは、それぞれのアクティブ/非アクティブイメージが設定されます。

関連する問題