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();
}
}
}
「TemplateField」の代わりに「Image」に等しいTypeで「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