我創建了一個DataGridView,如下所示
。 private void private void IniciarGV()
{
using (var db = new Entities()
{
var ListaPantallas = (from a in db.PANTALLAS
select a).ToList()。
if (ListaPantallas != null)
{
gvPermisos.DataSource = ListaPantallas;
gvPermisos.Columns["idPantalla"].Visible = false;
gvPermisos.Columns["nombrepantalla"].HeaderText = "Nombre"。
//gvPermisos.Columns.Add(new DataGridViewCheckBoxColumn());
DataGridViewCheckBoxColumn checkBoxColumn = new DataGridViewCheckBoxColumn()。
checkBoxColumn.HeaderText = "Seleccione";
checkBoxColumn.Width = 50;
checkBoxColumn.Name = "checkBoxColumn";
gvPermisos.Columns.Insert(0, checkBoxColumn)。
//gvPermisos.EndEdit();。
}
db.Dispose()。
}
在這之后,我用同樣的方法linq來檢索權限
。var TraerPermisos = (from a in db.PERMISOS
where a.IDUSUARIO == UsuarioEditar.idUsuario
select a).ToList()。
在我通過gridview將權限與我想檢查的id相匹配,以便用戶可以編輯它們,但由于某些原因,它們總是出現未標記的情況
。到目前為止,這是我在每個論壇或谷歌上遇到的情況,但它似乎并不奏效
foreach (PERMISOS item in TraerPermisos)
{
foreach (DataGridViewRow row in gvPermisos.Rows)
{
var ValorPermisoEnGV = Convert.ToBoolean(row.Cells["checkBoxColumn"/span>].Value)。
var ValorPantalla = decimal.Parse(row.Cells["idPantalla"].Value.ToString() )。
if (ValorPantalla == item.IDPANTALLA)
{
row.Cells["checkBoxColumn"].Value = true。
}
}
我在開始時加載特權
public ManejarUsuario()
{
InitializeComponent()。
IniciarComboBox()。
IniciarGV();
if (UsuarioEditar.idUsuario != 0)
{
CargarDatos();
btnCrearUsuario.Text = "Editar"/span>;
CargarPrivilegios();
}
很抱歉發了這么長的帖子,我已經嘗試了很多選項,但似乎都沒有用
。uj5u.com熱心網友回復:
如果你只是在驅動網格的資料中放一個布林值,生活就會輕松很多。 首先,讓我們為你的資訊制作一個持有者類
class Perms{
public int IdPantalla { get; set; }
public string NombrePantalla { get; set; }
public bool HasPermission { get; set; }
那么,讓我們讓查詢產生一個這樣的串列來代替:
//get all the IDPANTALLA this user has and put in a hash set。
var TraerPermisos = (from a in db.PERMISOS
where a.IDUSUARIO == UsuarioEditar.idUsuario
select a.IDPANTALLA).ToHashSet()。
//make a list of objects that includes a bool of whether the user has that permission .
//注意你應該讓它成為一個類級別的變數,以方便以后/其他地方使用。
ListaPantallas = (from a in db.PANTALLAS
select new Perms {
IdPantalla a.IdPantalla,
HasPermission = TraerPermisos.Contains(a.idPantalla) ,
NombrePantalla = a.nombrepantalla
}).ToList()。
然后設定網格:
gvPermisos.DataSource = ListaPantallas;
gvPermisos.Columns["IdPantalla"].Visible = false;
gvPermisos.Columns[ "NombrePantalla"].HeaderText = "Nombre";
gvPermisos.Columns[ "HadPermission"].HeaderText = "Seleccione";
網格會在串列中找到bool屬性,并為你把它連接成一個檢查列。它不需要你為它制作一個列。任何你勾選的東西都會以真/假的形式存盤在底層串列中,你可以例如 foreach(var x in ListaPantallas) if(x.HasPermission...
當操作資料時,網格會找到串列中的bool屬性,并將其作為檢查列。
當操作系結到資料源的DGV中的資料時,請操作源。還可以考慮讓Perms實作INotifyPropertyChanged(并考慮改用系結串列)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/309053.html
標籤:
上一篇:logback配置詳解
下一篇:<p>我正在創建一個社交網站,我試圖在一個帖子下添加一個評論。 <p>當我嘗試從comment_frame.php(所有的評論代碼都在這里)添加評論時,評論可以正常上傳。但是當

