オブジェクトのリストを gridview にバインドしたいと思います。オブジェクトには、ボタンの列が含まれている必要があります。リスト内のデータによっては、これらのボタンの一部を無効にする必要があります。
有効または無効なボタンを含むオブジェクトのリストを生成し、単純に にバインドすることはできgridview
ますか?
フラグを持つことは良いアプローチですが、フラグの状態を実際に保存し、データが変更されるたびに再バインドする必要があることに注意してください。ViewState
このデモ用に選択しました。完全な例は次のとおりです。
ASPX:
<asp:GridView ID="gvEmployees" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Button runat="server" Text="Update" Enabled='<%# Eval("AllowUpdate") %>' OnClick="Update" CommandArgument='<%# Eval("Name") %>' />
<asp:Label runat="server" Text='<%# Eval("Name") %>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
コードビハインド:
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
BindData();
}
private void BindData()
{
if (ViewState["Employees"] == null)
{
List<Employee> employees = new List<Employee>
{
new Employee{Name="Employee 1", AllowUpdate = true},
new Employee{Name="Employee 2", AllowUpdate = true}
};
gvEmployees.DataSource = employees;
ViewState["Employees"] = employees;
}
else
{
List<Employee> employees = ViewState["Employees"] as List<Employee>;
gvEmployees.DataSource = employees;
}
gvEmployees.DataBind();
}
protected void Update(object sender, EventArgs e)
{
Button update = sender as Button;
if (update != null & !String.IsNullOrEmpty(update.CommandArgument))
{
string employeeName = update.CommandArgument;
List<Employee> employees = ViewState["Employees"] as List<Employee>;
Employee emp = employees.Where(em => em.Name == employeeName).FirstOrDefault();
emp.Name = "some new value...";
emp.AllowUpdate = false;
//Rebind the grid with the new values
ViewState["Employees"] = employees;
BindData();
}
}
}
[Serializable]
public class Employee
{
public string Name { get; set; }
public bool AllowUpdate { get; set; }
}
次のようにボタンを追加できますgridview
itemtemplate
:
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="btn" runat="server"
Text="click" Enabled="<%# Eval('IsButtonEnabled') %>"/>
</ItemTemplate>
</asp:TemplateField>
Flag
次に、データソースに変数として追加しbool
、目的の値を設定true
して有効にfalse
し、無効にすることができます
編集、たとえば、次のようなデータソースがあります。
class YourDataSource {
public string prop1 {get;set;}
public string prop2 {get;set;}
public bool IsButtonEnabled {get;set;}
}
true の場合IsButtonEnabled
はボタンが有効になり、それ以外の場合は無効になります