我正在从查询中填充datagridview。呈现后,网格应允许编辑单个单元格,但不允许。
我正在从查询中填充datagridview。呈现后,网格应该允许编辑单个单元格,但是即使我将单个列设置为readonly = false,也不允许这样做。
public partial class Form1 : Form
{
myEntityData_testEntities ctx;
BindingSource bindingSource1;
public Form1()
{
InitializeComponent();
ctx = new testEntities();
bindingSource1 = new BindingSource();
bindingSource1.DataSource = (from s in ctx.Surveys
from u in ctx.Users
from st in ctx.SurveyTemplates
where (s.UserID.Equals(u.ID) && s.SurveyTemplateID.Equals(st.ID))
select new
{
s.ID,
s.InvitationText,
s.Status,
s.UserID,
u.FirstName,
u.LastName,
st.Name
}).ToList();
foreach (DataGridViewColumn dc in dataGridView1.Columns)
{
dc.ReadOnly = false;
}
dataGridView1.ReadOnly = false;
dataGridView1.DataSource = bindingSource1;
}
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)`enter code here`
{
dataGridView1.Update();
}
答案 0 :(得分:0)
BindingSource.DataSource
属性设置为List<AnonymousType>
。
在C#中,匿名类型的属性为只读(不可变)。因此,DGV单元也是只读的。
发件人:Anonymous Types (C# Programming Guide)
匿名类型提供了一种方便的方法来封装一组 将只读属性放入单个对象,而无需显式 首先定义类型。
只需定义一个具有必需属性的类,然后select
对该类的新实例进行设置即可。
编辑:示例(基于原始查询)
bindingSource1.DataSource = (from s in ctx.Surveys
from u in ctx.Users
from st in ctx.SurveyTemplates
where (s.UserID.Equals(u.ID) && s.SurveyTemplateID.Equals(st.ID))
select new NotAnonymousType
{
ID = s.ID,
InvitationText = s.InvitationText,
Status = s.Status,
UserID = s.UserID,
FirstName = u.FirstName,
LastName = u.LastName,
Name = st.Name
}).ToList();
...
internal class NotAnonymousType
{
public Int32 ID { get; set; }
public string InvitationText { get; set; }
public string Status { get; set; }
public string UserID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Name { get; set; }
}