0

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

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

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

任何人请帮忙。提前致谢。

4

3 回答 3

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

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

您可以考虑使用类型等于“Image”而不是“TemplateField”的“CommandField”,但这种方法存在问题,请阅读更多

希望这可以帮助。

于 2012-04-16T16:51:42.377 回答
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
于 2012-04-16T15:56:58.180 回答
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”的基础上,将设置相应的活动/非活动图像。

于 2013-05-28T10:40:46.740 回答