none
在 datatable 的 ColumnChanging 使用 rowstate 問題 RRS feed

  • 一般討論

  • 在 這 event 內

    void YYMATMA_ColumnChanging(object sender, DataColumnChangeEventArgs e)
            {
                if (e.Row.RowState != DataRowState.Unchanged)
                    saveToolStripButton.Enabled = true;
            }

    已經修改欄位資料了,也觸發了這個 event,為何 RowState 的 狀態 還是 「Unchanged」呢?

    感謝回覆。

    2011年9月16日 上午 02:12

所有回覆

  • 依照 [DataRow.RowState 屬性]所說 RowState 的值由下列兩個因素決定:已經在資料列上執行的作業種類,以及是否已經在 DataRow 上呼叫 AcceptChanges

    而看起來你並沒有呼叫AcceptChanges之類的



    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2011年9月16日 上午 02:37
    版主
  • 將 textbox binding 至 datatable ,在 改了 textbox 的內容後 會到 ColumnChanging 的 event 但是 這時候

    還沒有要 acceptchanges 只是 為了判斷 如果 user 有改了資料

    會把 saveToolStripButton enable 以便讓 user 知道已經有 改了資料

    而從 範例來看 如果有 update 了欄位資料 rowstate 應該會變為 modifiled 才對

    不知 有哪個地方 沒注意到

    還請大家 幫忙

    感謝。

    2011年9月16日 上午 05:31
  • 你應該要在OnRowChanged事件去取得 RowState

     


    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度
    2011年9月16日 上午 05:32
  • 依你的例子 應從TextBox的OnTextChanged 去設定


    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度
    2011年9月16日 上午 05:37
  • 感謝 各位的回覆,知道問題點了

    先回覆 Alex_Lee 的 方法

    1.因為 資料表有多個欄位 會有多個 textbox ,所以 如果放在 TextBox的OnTextChanged  會太複雜

    2.放在 OnRowChanged 時,只有在 rowposition 移動時才會觸發,時間點太慢,因為 我希望欄位有變更時就可以將 saveToolStripButton enable

    解決方法:

    因為 在呼叫 acceptchanged 時 內含 endedit的方法,所以想到

    先 呼叫 endedit ,讓 row 結束編輯 ==>其 rowstate 就變為 modified

                e.Row.EndEdit();
                if (e.Row.RowState != DataRowState.Unchanged)
                    saveToolStripButton.Enabled = true;

    還是感謝 各位先進的幫忙。

     

    2011年9月16日 上午 06:11