我有2个DataTable,Table1和Table2,
我想实现当我改变Table1里面的一个数据的时候,
通知Table2,Table2会自动根据Table1里面的变化而变化Table2里面的数据的一个数据,
注意:是改变一个数据,而不是成批的更新。
大家有什么办法吗?我想实现的其实就像Excel一样的功能,当Sheet1里面的一个数值改变的时候,
我可以让Sheet2里面的对应的某个数值发生改变,在Excel里面是通过设置公式来实现的,DataTable是否能大致实现这种思路,望高手支招。

解决方案 »

  1.   

    使用事件就好了
    using System;
    using System.Data;
    public class test
    {
             DataTable dt1, dt2;
            public test()
            {
                dt1 = new DataTable();
                dt2 = new DataTable();
                dt1.Columns.Add("ID");
                dt1.Columns.Add("AA");
                dt1.Columns.Add("BB");
                dt2.Columns.Add("ID");
                dt2.Columns.Add("AA");
                dt2.Columns.Add("BB");
                dt1.Rows.Add(new object[] { "1", "Row1_1", "Row1_2" });
                dt1.Rows.Add(new object[] { "2", "Row2_1", "Row2_2" });
                dt2.Rows.Add(new object[] { "1", "Row1_1", "Row1_2" });
                dt2.Rows.Add(new object[] { "2", "Row2_1", "Row2_2" });
                dt1.RowChanged += new DataRowChangeEventHandler(dt1_RowChanged);//绑定事件,
                MessageBox.Show("dt2行1列AA的值:" + dt2.Rows[0]["AA"].ToString());
                dt1.Rows[0]["AA"] = "ChangeValue";//更改值后会触发dt1_RowChanged,同时更新数据相同的行
            }        void dt1_RowChanged(object sender, DataRowChangeEventArgs e)
            {
                DataRow dr1 = e.Row;
                DataRow dr2 = null;
                foreach (DataRow d in dt2.Rows)
                {
                    if (d["ID"].ToString() == dr1["ID"].ToString())//通过ID找到同一行
                    {
                        dr2 = d;
                        break;
                    }
                }
                if (dr2 == null) return;//找不到行
                //更新行
                for (int i = 1; i<dt2.Columns.Count; i++)
                    dr2[i] = dr1[i];
                MessageBox.Show("dt2行1列AA的值:" + dt2.Rows[0]["AA"].ToString());
            }
    public static void Main(string []Args)
    {
       test t=new test();
    }
    }
      

  2.   

    可不可以在Table1改变的时候将变更的数据放入ViewState中,
    然后进行判断来更新Table2
      

  3.   

    应该是可以的,本来excel和table是相通的.
      

  4.   

    我的情况要比“iloveC#”的情况复杂,我可能是Table1里面2行的数据,引起Table2里面一行数据的变化,
    并且他们ID的是不同的,我说一下我的场景吧,
    Table1里面记录了原始的货币对,比如
    Symbol  Mid
    USDHKD  10
    USDJPY  2
    NZDCNY  0.5而Table2里面那是这样的,
    HKDJPY  5     //我来解释一下5是怎么来的,是USDHKD/USDJPY=10/2 而来
    CNYNZD  2     //我来解释一下2是怎么来的,是1/NZDCNY=1/0.5而来。每当Table里面的数据发生变化,我要导致Table里面相应的有关系的数据发生变化。
    请大家继续。
    谢谢“iloveC#”的代码,很有启发。
    能否像Excel一样实现定义公式那
      

  5.   

    谢谢大家的回复。
    24K纯爷们,纯的!!!!!!说明一下详细的步骤。
    成长说明一下如何可以像Excel一样,我能够设置DataCoulume公式,但是DataRow怎么设置那。
    再次谢谢大家。请继续。
      

  6.   

    我觉得公式绑定有点困难啊,你拿.net的一个类和一个应用软件比,这个.......
      

  7.   

    .Net,C#之人生无悔DataTable有触发器吗?
    iloveC#.net类无法和Excel无法比,我就是想知道有没有办法(小技巧也可以)能够大致的实现这个功能,
    如果不能,那我只能是If判断了。加上改变Tabel1和Table2的结构,加各种标识来判断出来。然后用的你方法来更新Tabel2的数据。