none
請問 DataView 要如何取得資料索引? RRS feed

  • 問題

  • 各位前輩好~

    當我在使用DataView時候發現就算是做了排序Sort,或是條件搜尋RowFilter

    但是資料的索引似乎並不會跟著變動,造成每次要鎖定該筆資料的索引都很麻煩

    舉例來說,DataView內有三筆資料,"ID","金額"

    {1001,1000}

    {1002,3000}

    {1003,500}

    當我下DataView.RowFilter= "金額 > 1000"後資料庫會只剩下一筆資料

    {1002,3000}

    但是當我取出 DataView.Table.Row[0][0] 這筆資料得到的還是{1001,1000}

    而同樣當我下DataView.Sort = "金額" 後 得到的也是{1001,1000}

    所以可以肯定的是DataView的索引並沒有跑掉,那請問要如何取得原始的索引呢?

    再麻煩各位前輩解惑了,非常感謝

    2015年1月6日 上午 10:31

解答

  • DataView.ToTable()後再操作!

    DataTable dt = new DataTable();
                dt.Columns.Add("c1", typeof(string));
                dt.Columns.Add("c2", typeof(int));
                dt.Rows.Add("0001", 1);
                dt.Rows.Add("0002", 2);
                dt.Rows.Add("0003", 3);
                DataView dv = new DataView(dt);
                dv.RowFilter = "c2 > 2";
                DataTable dtNew = dv.ToTable();


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2015年1月6日 上午 11:03
  • 但是當我取出 DataView.Table.Row[0][0] 這筆資料得到的還是{1001,1000}

    而同樣當我下DataView.Sort = "金額" 後 得到的也是{1001,1000}

     DataView 並不是更動原始資料來源., 所以它的來源是不會變動的. 你可以想像有一張紙上有密密麻麻的字, 然後你拿另外一張紙剪個孔, 當你透過這張剪孔的紙的時候, 你只會看到孔內的字, 這個剪孔的紙就是 DataView, 原來有密密麻麻字的紙張則是 DataTable .


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


    2015年1月7日 下午 06:40
    版主

所有回覆

  • DataView.ToTable()後再操作!

    DataTable dt = new DataTable();
                dt.Columns.Add("c1", typeof(string));
                dt.Columns.Add("c2", typeof(int));
                dt.Rows.Add("0001", 1);
                dt.Rows.Add("0002", 2);
                dt.Rows.Add("0003", 3);
                DataView dv = new DataView(dt);
                dv.RowFilter = "c2 > 2";
                DataTable dtNew = dv.ToTable();


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2015年1月6日 上午 11:03
  • 但是當我取出 DataView.Table.Row[0][0] 這筆資料得到的還是{1001,1000}

    而同樣當我下DataView.Sort = "金額" 後 得到的也是{1001,1000}

     DataView 並不是更動原始資料來源., 所以它的來源是不會變動的. 你可以想像有一張紙上有密密麻麻的字, 然後你拿另外一張紙剪個孔, 當你透過這張剪孔的紙的時候, 你只會看到孔內的字, 這個剪孔的紙就是 DataView, 原來有密密麻麻字的紙張則是 DataTable .


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


    2015年1月7日 下午 06:40
    版主
  • 如果你是要在Filter DataView 後的結果,做資料存取,你要把Filter的結果放進另一個新的DataView 或DataTable。

    DataView.ToTable() 是內建Method

    http://msdn.microsoft.com/en-us/library/a8ycds2f(v=vs.110).aspx


    大家一齊探討、學習和研究,謝謝!
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD,
    MCT, Microsoft Community Star(TW & HK),
    Microsoft MVP for VB.NET since 2003
    My MSMVP Blog

    請記得將對您有幫助的回覆標示為解答以幫助其他尋找解答及參與社群討論的朋友們。
    Please remember to clickMark as Answer on the post that helps you. This can be beneficial to other community members reading the thread.

    2015年1月8日 上午 02:23
  • 感謝解答,剛剛才注意到自己的邏輯錯誤了。條件塞選過後是因為轉出到其它DataView,所以才能看到塞選結果

    而不是塞選後在原本的DataView上看到的結果。

    所以我重新思考了一下我想知道的因該是以下兩個問題:

    1、有沒有辦法在將DataView轉出到其它的DataView或是DataTable或DataRow[]的時候連同原本DataView

    的index也轉出來?

    2、或是我可以利用原本的DataView裡某一欄資料去定位,然後修改資料,例如

    ID   品名      金額

    1     筆

    2     紙

    我只要下條件  ID = 1  然後 金額 = 100 ,這樣就可以把金額 100 寫入了呢?

    再麻煩前輩解惑,非常感謝

    2015年1月9日 上午 07:17
  • 您好,
    如果只是要找某筆資料的話,可以使用 DataTable.Select 來Search到資料,
    然後再針那些資料操作,如Update or Delete。

    您可以參考以下的link,希望對您有幫助,謝謝!

    http://blog.csdn.net/hbu_dcf/article/details/5655891


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2015年1月12日 上午 03:07