【问题标题】:Gridview with Enable and Disable image buttons带有启用和禁用图像按钮的 Gridview
【发布时间】:2012-04-16 15:52:41
【问题描述】:

我在 asp.net 应用程序中有 gridview。我想插入一个带有图像按钮的列,单击它将启用或禁用用户或更改数据库中的状态字段,并相应地更改图像按钮图像用户状态。

含义:我想为禁用和启用的用户显示不同的图像。

如何在 C# 中执行此操作并将数据绑定到图像按钮?

请大家帮忙。提前致谢。

【问题讨论】:

    标签: c# gridview asp.net-ajax


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      示例用户模型:

      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。 网格视图的示例代码隐藏:

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

      您可以考虑使用 Type 等于 'Image' 而不是 'TemplateField' 的 'CommandField',但这种方法存在一个问题,read more

      希望这会有所帮助。

      【讨论】:

        【解决方案3】:
        <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”的基础上,将设置相应的活动/非活动图像。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-17
          • 2010-12-28
          • 1970-01-01
          相关资源
          最近更新 更多