Asp.net Gridview Rowdata is coming empty and Unchecked

≯℡__Kan透↙ 提交于 2019-12-12 00:27:51

问题


I have a requirement where i need to add column names and rowdatabound values dynamically .I has managed to get Column names dynamically .According to my need i want values to be displayed in the form of checkboxes in the rows of the grid either in checked form or unchecked based on condition but here every thing is coming in unchecked formate ..

I am using .net membership Role table...

Here is my code for gridview Dynamic column allocation..

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);
    }

Now Here i am checking values to be checked or uncked..

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();
}

Upto here values are coming fine in dTable but once flow goes to rowdatabound event

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{

}

On rowdatabound event flow automatically moves to custom control class which is ...

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

}

And from here all checkboxes are displaying as unchecked ...

Please guys help me .. Thanks in advance...


回答1:


Do it in this way. check where the column is true false in the rowDatabound event and the add control here only.

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);
    }
}


来源:https://stackoverflow.com/questions/18929061/asp-net-gridview-rowdata-is-coming-empty-and-unchecked

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!