编辑由复杂查询填充的datagridview

时间:2019-04-07 20:03:29

标签: winforms entity-framework datagridview

我正在从查询中填充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();


  }

1 个答案:

答案 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; }
    }