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);
}
}
从这里开始,所有复选框都显示为未选中...
请伙计们帮助我..提前感谢...
以这种方式进行。 仅在此处检查列在 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);
}
}