如題﹕
C#怎樣知道改了dataset的哪些字段
環境﹕
一個datagridview,dataset,
現在用datagridview.datasource=dataset.tables[0].
然后用戶可以在程序中修改datagridview中的字段值或是直接新增記錄﹐都可以。
此時用datagridview2.datasource=dataset.GetChanges().Tables[0];就可以看到當前用戶改的哪些記錄﹐但光看datagridview2是看不出用戶改了哪些字段的﹐只知道用戶改了這個記錄或是新增了這個記錄。
我現在想問問﹕怎樣判斷用戶改了哪些具體的字段﹐ ﹖
明白我說的嗎﹖
舉個例子吧﹕
如﹕表1
name,code,unit
張三﹐a001,人資部
李四﹐a002,電腦部
好了﹐
 我現在將第一條中的a001改成a009,則用datagridview2.datasource=dataset.GetChanges().Tables[0];就可以在datagridveiw2中看到如下的記錄﹕name,code,unit
張三﹐a009,人資部
但我怎么知道他是改的第二個字段呢》﹖
所以望大家多指點﹗﹗﹗﹗
萬分感謝﹗﹗﹗﹗
70分

解决方案 »

  1.   

    先 sf每次都因为打字被人抢sf
      

  2.   

    ds.Tables[0].ColumnChanged += new DataColumnChangeEventHandler(Form1_ColumnChanged);
    ……
    void Form1_ColumnChanged(object sender, DataColumnChangeEventArgs e)
            {
                MessageBox.Show(e.Column.ToString());
            }
      

  3.   

    先定义一个datatable = dataset
    但是不要做数据绑定
    当值改变时激发
    private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    事件在事件里面做循环,比较table 与datagridview就行了
      

  4.   

    忘了说了e的属性里面好象就有column值这样直接去对应就行了就不用循环比较了
      

  5.   

    DataTable.ColumnChanged  在 DataRow 中指定的 DataColumn 的值被更改后发生。 
    DataTable.ColumnChanging  在 DataRow 中指定的 DataColumn 的值发生更改时发生。 
    // MSDN's DEMO for DataTable.ColumnChanged eventprivate static void DataTableColumnChanged()
    {
        DataTable custTable = new DataTable("Customers");
        // add columns
        custTable.Columns.Add("id", typeof(int));
        custTable.Columns.Add("name", typeof(string));
        custTable.Columns.Add("address", typeof(string));    // set PrimaryKey
        custTable.Columns["id"].Unique = true;
        custTable.PrimaryKey = new DataColumn[] { custTable.Columns["id"] };    // add a ColumnChanged event handler for the table.
        custTable.ColumnChanged += new 
            DataColumnChangeEventHandler(Column_Changed );
        // add ten rows
        for(int id=1; id<=10; id++)
        {
            custTable.Rows.Add(
                new object[] { id, string.Format("customer{0}", id), 
                string.Format("address{0}", id) });
        }    custTable.AcceptChanges();    // change the name column in all the rows
        foreach(DataRow row in custTable.Rows )
        {
            row["name"] = string.Format("vip{0}", row["id"]);
        }}private static void Column_Changed(object sender, DataColumnChangeEventArgs e )
    {
        Console.WriteLine("Column_Changed Event: name={0}; Column={1}; original name={2}", 
            e.Row["name"], e.Column.ColumnName, e.Row["name", DataRowVersion.Original]);
    }
      

  6.   

    // MSDN's DEMO for DataTable.ColumnChanging eventprivate static void DataTableColumnChanging()
    {
        DataTable custTable = new DataTable("Customers");
        // add columns
        custTable.Columns.Add("id", typeof(int));
        custTable.Columns.Add("name", typeof(string));
        custTable.Columns.Add("address", typeof(string));    // set PrimaryKey
        custTable.Columns[ "id" ].Unique = true;
        custTable.PrimaryKey = new DataColumn[] { custTable.Columns["id"] };    // add a ColumnChanging event handler for the table.
        custTable.ColumnChanging += new 
            DataColumnChangeEventHandler(Column_Changing );
        // add ten rows
        for(int id=1; id<=10; id++)
        {
            custTable.Rows.Add(
                new object[] { id, string.Format(
                "customer{0}", id), string.Format("address{0}", id) });
        }    custTable.AcceptChanges();    // change the name column in all the rows
        foreach(DataRow row in custTable.Rows )
        {
            row["name"] = string.Format("vip{0}", row["id"]);
        }}private static void Column_Changing(object sender, 
        DataColumnChangeEventArgs e )
    {
        Console.WriteLine(
            "Column_Changing Event: name={0}; Column={1}; proposed name={2}", 
            e.Row["name"], e.Column.ColumnName, e.ProposedValue );
    }
      

  7.   

    Jinglecat(晓风残月 >> 问题需简洁,错误要详细,需求得明确)好详细哦