我在 asp.net 应用程序中有 gridview。我想插入一个带有图像按钮的列,单击它将启用或禁用用户或更改数据库中的状态字段,并相应地更改图像按钮图像用户状态。
含义:我想为禁用和启用的用户显示不同的图像。
如何在 C# 中执行此操作并将数据绑定到图像按钮?
任何人请帮忙。提前致谢。
我在 asp.net 应用程序中有 gridview。我想插入一个带有图像按钮的列,单击它将启用或禁用用户或更改数据库中的状态字段,并相应地更改图像按钮图像用户状态。
含义:我想为禁用和启用的用户显示不同的图像。
如何在 C# 中执行此操作并将数据绑定到图像按钮?
任何人请帮忙。提前致谢。
示例用户模型:
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”,但这种方法存在问题,请阅读更多。
希望这可以帮助。
利用 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
<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”的基础上,将设置相应的活动/非活动图像。