none
Ado.net Entity 绑定DataGridView 的问题 RRS feed

  • 问题

  • 代码如下:
    private void Form1_Load(object sender, EventArgs e)
            {
                var result =  from o in northwindEntity.Orders
                              select new { o.OrderID,o.Customers.CompanyName,o.OrderDate,o.Freight,o.Employees.FirstName,o.Employees.LastName};
                this.dataGridView1.DataSource = result;
            }
    问题:
    绑定DataGridView后,发现DataGridView变为只读了。检查后发现,原来与DataGridView绑定的数据为只读的。
    我知道这是多表连接查询后造成的,不过我需要这样的连接数据用于显示。
    现在,我想编辑DataGridView,也就是说我不要DataGridView只读,怎么办呀?
    谢谢!
    2009年6月16日 2:46

答案

全部回复

  • 用一个BindingSource来捕获CRUD事件,然后编写处理代码。
    MSMVP VC++
    2009年6月16日 3:54
    版主
  • 还是不行呀,我使用后,代码如下:
    private void Form1_Load(object sender, EventArgs e)
            {
                var result =  from o in northwindEntity.Orders
                              select new { o.OrderID,o.Customers.CompanyName,o.OrderDate,o.Freight,o.Employees.FirstName,o.Employees.LastName};
                this.bindingSource1.DataSource = result;
                this.dataGridView1.DataSource = this.bindingSource1;
            }
    datagridview仍然为只读。
    请帮忙!
    2009年6月16日 4:24
  • 需要设置bindingsource的属性和捕获bindingsource的事件。
    如果你需要Windows表单类库中的数据绑定控件方面的帮助,可以去一般性问题讨论区提问。

    MSMVP VC++
    2009年6月16日 4:33
    版主
  • 那为什么用ado.net 的dataadapter填充dataset,然后绑定datagridview后,是可以编辑的?(同样是连接查询)
    而用linq to entity 查询出的确不能,如果要改什么地方,请帮我指明吧,不然一个问题反而会变成多个问题了。
    毕竟来问问题的都是不懂才来问的。~~
    多谢版主!
    2009年6月16日 4:40
  • private void btnUpdate_Click(object sender, EventArgs e)
            {
                var id = Convert.ToInt32(this.dataGridView1.Rows[this.dataGridView1.CurrentCell.RowIndex].Cells[0].Value.ToString().Trim());
                var freight = Convert.ToDecimal(32.3801);
                var order = northwindEntity.Orders.First(o => o.OrderID == id);
                order.CustomersReference.Load();
                order.EmployeesReference.Load();
                order.Freight = freight;
                order.Customers.ContactName = "Paul Henriot 2";
                order.Employees.FirstName = "Steven 2";

                northwindEntity.SaveChanges();
            }

    这样更新没问题,就是无法使datagridview可编辑。

    请版主帮帮忙,或者把上面你的方法说详细一点,不胜感激!

    2009年6月16日 6:51
  • 因为DataView和BindingSource都实现了IBindingListView。
    MSMVP VC++
    2009年6月16日 13:48
    版主
  • 实现了IBindingListView跟Datagridview不能编辑有什么关系呢?

    可否说得详细一点?
    2009年6月18日 1:43
  • Datagridview会查询数据源是否支持IBindingList来决定是否允许编辑。参考http://msdn.microsoft.com/en-us/library/ms993236.aspx


    MSMVP VC++
    • 已标记为答案 Chengli 2009年6月18日 6:22
    2009年6月18日 1:50
    版主
  •  

    我遇到和你同样的问题;你是怎么解决的啊?

     


    大其心,可容天下之物; 虚其心,可受天下之善;
    2010年10月13日 10:37