Asp.net 网格视图行数据为空且未选中

本文关键字:数据 net 网格 视图 Asp | 更新日期: 2023-09-27 18:32:10

我有一个要求,我需要动态添加列名和行数据绑定值。我已经设法动态获取列名.根据我的需要,我希望值以复选框的形式显示在网格的行中,无论是以选中的形式还是根据条件未选中的形式,但在这里,每件事都以未经检查的格式出现。

我正在使用 .net 成员身份角色表...

这是我的网格视图动态列分配代码。

protected void BindGridviewData()
{
    var role = from MembershipUser u in Membership.GetAllUsers()
               select new
               {
                   User = u.UserName,
                   Role = string.Join(",", Roles.GetRolesForUser(u.UserName))
               };

    DataTable dTable = new DataTable();
    string[] rolesarr = Roles.GetAllRoles();
    // add column for user name 
    dTable.Columns.Add("Username", typeof(string));
    // then add all the roles as columns 
    Array.ForEach(rolesarr, r => dTable.Columns.Add(r));
    List<string> tempfield = new List<string>();
    foreach (DataColumn column in dTable.Columns)
    {
       string ColName = column.ColumnName;
       tempfield.Add(ColName);
    }
    for (int i = 0; i < tempfield.Count; i++)
    {
    string tempfieldname = tempfield[i];
    TemplateField temp = new TemplateField();
    if (i == 0)
    {
        temp.HeaderText = tempfieldname;
        tempfieldname = string.Empty;
    }
    else {
        temp.ItemTemplate = new MyTemplate();
        temp.HeaderText = tempfieldname;
        tempfieldname = string.Empty;
    }
    GridView1.Columns.Add(temp);
    }

现在我在这里检查要检查或取消的值。.

foreach (MembershipUser u in Membership.GetAllUsers())
    {
        DataRow dRow = dTable.NewRow();
        dRow[0] = u.UserName;
        string[] roles = Roles.GetRolesForUser(u.UserName);
        dRow[1] = roles.Contains("Admin") ? true : false;
        dRow[2] = roles.Contains("DPAO User") ? true : false;
        dRow[3] = roles.Contains("GeneralUser") ? true : false;
        dTable.Rows.Add(dRow);
    }
    GridView1.DataSource = dTable;
    GridView1.DataBind();
}

到目前为止,dTable 中的值很好,但是一旦流转到行数据绑定事件

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
}

在行数据绑定事件流自动移动到自定义控件类,即...

public class MyTemplate : ITemplate
  {
public void InstantiateIn(Control container)
{
    CheckBox chk = new CheckBox();
    chk.ID = "chk";
    container.Controls.Add(chk);
}
}

从这里开始,所有复选框都显示为未选中...

请伙计们帮助我..提前感谢...

Asp.net 网格视图行数据为空且未选中

以这种方式进行。 仅在此处检查列在 rowDatabound 事件和 Add 控件中为 true 的位置。

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if(e.Row.RowType == DataControlRowType.DataRow)
    {
        CheckBox cb = new CheckBox();
        if(e.Row.Cells["Column Name"].toString == true ){
             cb.Checked = true; 
        }else{
             cb.Checked = false;   
        }
        e.Row.Cells["Column Name"].Controls.Add(cb);
    }
}