【问题标题】:Editing datagridview that is populated by a complex query编辑由复杂查询填充的 datagridview
【发布时间】:2019-08-28 23:55:49
【问题描述】:

我正在从查询中填充数据网格视图。一旦呈现,网格应该允许编辑单个单元格,但它不允许。

我正在从查询中填充数据网格视图。呈现后,网格应该允许编辑单个单元格,但即使我已将单个列设置为 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();


  }

【问题讨论】:

  • DataGridView 是视图控件,它的职责是显示数据并提供 UI 组件进行编辑。您需要编写当DataGridView 中的值更改时更新数据库的代码。
  • dataGridView1.Update(); 只会在屏幕上重绘组件。

标签: winforms entity-framework datagridview


【解决方案1】:

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

【讨论】:

  • 你能举个例子吗?
  • 无法使用集合初始化程序初始化类型 'Form1.NotAnonymousType,因为它没有实现 'System.Collections.IEnumerable'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-19
  • 2021-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多