1

オブジェクトのリストを gridview にバインドしたいと思います。オブジェクトには、ボタンの列が含まれている必要があります。リスト内のデータによっては、これらのボタンの一部を無効にする必要があります。

有効または無効なボタンを含むオブジェクトのリストを生成し、単純に にバインドすることはできgridviewますか?

4

2 に答える 2

1

フラグを持つことは良いアプローチですが、フラグの状態を実際に保存し、データが変更されるたびに再バインドする必要があることに注意してください。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; }
}
于 2013-01-14T16:53:36.417 に答える
1

次のようにボタンを追加できます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はボタンが有効になり、それ以外の場合は無効になります

于 2013-01-14T15:03:16.443 に答える