none
datagridview拖动列了,也就是datagridview变化了,能不能使跟它绑定的datatable也跟着变化 RRS feed

  • 问题

  • 我用 DataTable tmpdt = (DataTable)dataGridView1.DataSource;这句代码把datagrid和datatable绑定了,现在有问题是,我的datagridview经过拖动列后,datagridview已经变化了,而tmpdt没有变化,能使tmpdt也就随着datagridview的变化而变化吗,也就是datagridview的变化了,tmpdt也就跟着变化,多谢。
    dyx9010
    2010年2月28日 0:17

答案

全部回复

  • 你好!
         如果你改变了DataGridView中列的顺序,那绑定的DataTable不会自动改变的,需要你自己实现改动的功能!
    周雪峰
    2010年2月28日 3:02
    版主
  •  请问一下,如何实现,好实现不


    dyx9010
    2010年2月28日 3:19
  • 我对里面的原理不是很清楚,对datatable和datagridview的绑定关系还不是很清楚
    dyx9010
    2010年2月28日 3:29
  • 当你移动列以后,调整DataTable中的列顺序就可以了!
    周雪峰
    2010年2月28日 3:29
    版主
  • 问一下周版主,假设我调整列的列顺序是“第四列”,“第三列”,“第一列”,“第二列”,tmpdt.columns.add("第四列");tmpdt.columns.add("第三列");tmpdt.columns.add("第一列 ");tmpdt.columns.add("第二列");这样列顺序调整了,但是各列中的各行上的值没有相应的过来啊,现在datagridview的列调整了,datagridview中的数据是正确的,各列中的行中的数据如何调整,还有调整后tmpdt还需要不需要和datagridview再绑定一下啊,
    也就是对下面的代码进行修改
    DataGridViewRow  r = (DataGridViewRow )e.Data.GetData(typeof(DataGridViewRow ));

                        DataTable tmpdt = (DataTable)dataGridView1.DataSource;

                        DataRow r1 = tmpdt.NewRow ();

                        for (int i = 0; i < tmpdt.Columns.Count; i++)

                        {

                            r1[i] = r.Cells[i].Value;

                        }

                        tmpdt.Rows.RemoveAt(r.Index );

                        tmpdt.Rows.InsertAt(r1, Index);


    dyx9010
    2010年2月28日 6:19
  • 是不是想插入行的话用datatable行不通啊,因为即使调整了datatable的列顺序,datatable的内容还需要调整,调整完后,和datagridview的绑定关系是怎样啊,这样的话,tmpdt.rows.remove和tmpdt.rows.insert的导致的行的删除和插入还能不能反映到datagridview中


    dyx9010
    2010年2月28日 6:40
  • 你好!

    移动后,没有必要去调整 DataTable 列的物理顺序。数据源与 DataTable 绑定可以在 DataTable 中指定列的显示顺序。

    使用 BindingSource 绑定数据源后,数据源内容发生变化,界面会自动更新内容。

    知识改变命运,奋斗成就人生!
    2010年3月1日 1:27
    版主
  • 请教一下X.X.Y,我的datagridview和datatable是通过DataTable tmpdt = (DataTable)dataGridView1.DataSource;这句话关联起来的,如果用bindingsouce的话,如何用啊,而且我想插入新的一行,用了bindingsource,如何再定义新的一行啊,我原先用的datatable.NewRow(),比较急,多谢指点
    DataGridViewRow  r = (DataGridViewRow )e.Data.GetData(typeof(DataGridViewRow ));

                        DataTable tmpdt = (DataTable)dataGridView1.DataSource;

                        DataRow r1 = tmpdt.NewRow ();


    dyx9010
    2010年3月1日 12:09
  • 你好!
         你用BindingSource实例设置DataSource属性就可以了!
    周雪峰
    2010年3月1日 12:36
    版主
  • 周版主,我在datagridview用insert添加一行的时候,报当控件被数据绑定时,无法以编程方式向 DataGridView 的行集合中添加行,
    我在网上查了一下答案,说数据源bingdingsource可以,但bingsource没通过,在网上查了一下,也没有看明白,能给一个代码示例吗,比较急,谢谢周版主


    dyx9010
    2010年3月1日 13:08
  • 你好!    
            可以参考一下这个文档:
    http://msdn.microsoft.com/zh-cn/library/system.windows.forms.bindingsource.aspx
    周雪峰
    2010年3月1日 13:19
    版主
  • datagridview绑定了数据源后,用insert语句不行,报错
    dyx9010
    2010年3月1日 13:42
  • 添加一个 BindingSource所有的问题都解决了。首先是把数据源设给 BindingSource 的数据源。然后再把BindingSource设给 DataGridview 的数据源。需要使用BindingSource中转一下才可以,我试了,怎么不行啊
    dyx9010
    2010年3月1日 13:55
  • 各位大侠们,datagridview绑定datatabel后,再用insert和add插入一行的话会报错,有什么好的解决办法没有,不对datatble进行操作,多谢
    dyx9010
    2010年3月1日 15:40
  • 楼主你好,

    关于BindingSource的问题到底解决没,如果解决了就标价答案然后开新帖问其它的问题。

    ^_^一个帖子问太多的问题大侠们都回答的要喘气了。
    Microsoft Online Community Support
    2010年3月2日 2:27
  • 我是想bindingsouce1.datasource=dt;datagridview.datasoucr=bindingsource1,这样,即使datagridview绑定datatable,再使用直接insert和add也不会报错了,但是实验没成功
    dyx9010
    2010年3月2日 4:20
  • 你好!

    这里需要对数据源进行操作。

    我已在你的另外一个帖子中回复了你的问题,请看下面的地址:


    知识改变命运,奋斗成就人生!
    2010年3月2日 5:02
    版主