Answered DataGridView亂跳行問題?

  • 2012年1月14日 上午 03:13
     
     

    請求各位大大的幫忙

    我有二台Database..
    第一台利用預存程式取後資料放入DataSet中的第一個DataTable
    第二台利用Linq To Sql取得第二個DataTable並放入DataSet中
    最後使用DataSet的DataRelation將二個DataTable全併起來
    再放入DataGridView的DataSource...
    最後指定資料欄的順序並建立一個空資料行(如:imageColumn..)

    但問題來了,我重覆reland時,第二個DataTable會亂路行
    完全無法造我所指定的排序..

     



所有回覆

  • 2012年1月14日 上午 03:52
    版主
     
     

    請參閱 [DataTable 該如何排序呢??]


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

    有關DataGridView排序或許可以參考這篇文章。

    http://msdn.microsoft.com/en-us/library/ms171607.aspx


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
  • 2012年1月16日 上午 01:18
     
     

    感謝各位大大的協助..
    可能小弟寫的不是很清楚..
    重新整理一下,問題在於資料欄位的排序..

    當我在放入DataGridView時狀況如下

               |DataTable1       |  DataTable2 |
    欄位0  ,欄位1,欄位2,欄位3,欄位4 ,欄位5      ,欄位6    ,欄位7
    1          aaa   BBB  CCC   DDD   EEE        Image1  Image2
    2          bbb   CCC  DDD   EEE   DDD       Image1  Image2

    按下"Search"
    欄位0  ,欄位1,欄位2,欄位3  ,欄位6     ,欄位5  ,欄位4 ,欄位7
    1           aaa   BBB  CCC   Image1   EEE   DDD   Image2
    2           bbb   CCC  DDD  Image1   DDD   EEE   Image2

    按下"Search"
    欄位0  ,欄位1,欄位2  ,欄位3  ,欄位6     ,欄位7   ,欄位4 ,欄位5
    1          aaa   BBB  CCC    Image1   Image2  DDD   EEE  
    2          bbb   CCC  DDD   Image1   Image2  EEE   DDD  
    以此類推,在第二個DataTable2的資料欄位會亂跳...

  • 2012年1月16日 上午 02:44
     
     
    請問可以把你實作的程式碼貼上來嗎?大家或許會比較容易一起找到問題點,謝謝。
    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
  • 2012年1月16日 上午 04:51
     
     

                DataSet ds = new DataSet();
                DataTable dt1 = new DataTable();
                DataTable dt2 = new DataTable();
                DataTable dtJoin = new DataTable();         

                ds = SP.SP_XXXX();
                dt1 = ds.Tables[0];

                int cnt = dt1.Rows.Count;

                List<int> list = new List<int>();
                for (int a = 0; a < cnt; a++)
                {
                    list.Add(Convert.ToInt32(dt1.Rows[a]["AAA"]));
                }
                dt2 = LinQSelect.Search(list);
                ds.Tables.Add(dt2);
                DataRelation dr = new DataRelation("EquiJoin", dt2.Columns["AAA"], dt1.Columns["AAA"]);
                ds.Relations.Add(dr);
                dtJoin.Columns.Add("BBB", typeof(string));
                dtJoin.Columns.Add("AAA", typeof(Int32));
                dtJoin.Columns.Add("CCC", typeof(string));
                dtJoin.Columns.Add("DDD", typeof(string));
                dtJoin.Columns.Add("EEE", typeof(string));
                dtJoin.Columns.Add("FFF", typeof(string));
                dtJoin.Columns.Add("GGG", typeof(string));

                ds.Tables.Add(dtJoin);
                foreach (DataRow drow in ds.Tables[0].Rows)
                {
                    DataRow parent = drow.GetParentRow("EquiJoin");
                    DataRow current = dtJoin.NewRow();
                    for (int i = 0; i < dt1.Columns.Count; i++)
                        current[i] = drow[i];

                    current["EEE"] = parent["EEE"];
                    current["FFF"] = parent["FFF"];
                    current["GGG"] = parent["GGG"];
                    dtJoin.Rows.Add(current);
                }
                return dtJoin;

    ------------------------------------------------------------------------------------

                DataGridViewColumn DGVC;
                DGVC = new DataGridViewTextBoxColumn();
                DGVC.HeaderText = "Col1";
                DGVC.Name = "Col1";
                DGV.Columns.Add(DGVC);


                DGVC = new DataGridViewTextBoxColumn();
                DGVC.HeaderText = "Col2";
                DGVC.Name = "Col2";
                DGVC.DataPropertyName = "EEE";
                DGV_AuthorityMgt.Columns.Add(DGVC);

                DGVC = new DataGridViewTextBoxColumn();
                DGVC.HeaderText = "Col3";
                DGVC.Name = "Col3";
                DGVC.DataPropertyName = "FFF";
                DGV_AuthorityMgt.Columns.Add(DGVC);

                DGVC = new DataGridViewTextBoxColumn();
                DGVC.HeaderText = "Col4";
                DGVC.Name = "Col4";
                DGVC.DataPropertyName = "GGG";
                DGV_AuthorityMgt.Columns.Add(DGVC);

                DGVC = new DataGridViewTextBoxColumn();
                DGVC.HeaderText = "Col5";
                DGVC.Name = "Col5";
                DGVC.DataPropertyName = "CCC";
                 DGV_AuthorityMgt.Columns.Add(DGVC);

                DGVC = new DataGridViewImageColumn();
                DGVC.HeaderText = "Modify";
                DGVC.Name = "Col6";
              
                DGV_AuthorityMgt.Columns.Add(DGVC);

                DGVC = new DataGridViewImageColumn();
                DGVC.HeaderText = "Status";
                DGVC.Name = "Col7";       

                DGV_AuthorityMgt.Columns.Add(DGVC);

                DGVC = new DataGridViewCheckBoxColumn();
                DGVC.Name = "Col8";
                DGVC.DataPropertyName = "BBB";
                DGVC.Visible = false;
                DGV_AuthorityMgt.Columns.Add(DGVC);

                DGVC = new DataGridViewTextBoxColumn();
                DGVC.Name = "Col9";
                DGVC.DataPropertyName = "AAA";
                DGVC.Visible = false;
                DGV_AuthorityMgt.Columns.Add(DGVC);

  • 2012年1月28日 下午 07:17
    版主
     
     

    幾個我不明白的地方

    (1) 你在按下Search後是否有再度呼叫 DataGridViewColumn DGVC; 以下的程式 ? 如果有再度呼叫, 你有先清除嗎 ?

    (2) 為何第一個是 DGV.Columns.Add(DGVC); 而第二個以後卻是  DGV_AuthorityMgt.Columns.Add(DGVC);


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

    感謝Bill大大的協助

    (1)當按下Search時,程式會先清除,再從建欄位,最後再傳入資料.

    (2)第二個問題是我的筆誤.

    目前小弟改成每次ReLoad時,就先清除,再重建欄位,最後再放入資料
    這樣子,讓欄位已不再亂跳了,
    但是在欄位中,放入二個圖片欄位並指定在最後面
    可是在顯示時,一個圖片欄位會跑到二個表格的中間
    以致於無法造我所指定的方式陳列了..@@

    目前只有遇到使用Dataset的DataRelation才會出現這種問題 = =||

    ----------------------------------------------------------------------------------------------------

    private void RemoveDGV()
            {
                if (DGV.DataSource != null)
                {
                    for (int a = 0; a < DGV.Rows.Count; a++)
                    {
                        DGV.Rows.RemoveAt(a);
                    }
                    DGV.DataSource = null;
                }
            }

    -----------------------------------------------------------------------------------------------------

    private void BulidingDGV()
            {DataGridViewColumn DGVC;
                 DGVC = new DataGridViewTextBoxColumn();
                 DGVC.HeaderText = "Col1";
                 DGVC.Name = "Col1";
                 DGV.Columns.Add(DGVC);

                DGVC = new DataGridViewTextBoxColumn();
                DGVC.HeaderText = "Col2";
                DGVC.Name = "Col2";
                DGVC.DataPropertyName = "EEE";
                DGV.Columns.Add(DGVC);
     
                DGVC = new DataGridViewTextBoxColumn();
                DGVC.HeaderText = "Col3";
                DGVC.Name = "Col3";
                DGVC.DataPropertyName = "FFF";
                DGV.Columns.Add(DGVC);
     
                DGVC = new DataGridViewTextBoxColumn();
                DGVC.HeaderText = "Col4";
                DGVC.Name = "Col4";
                DGVC.DataPropertyName = "GGG";
                DGV.Columns.Add(DGVC);
     
                DGVC = new DataGridViewTextBoxColumn();
                DGVC.HeaderText = "Col5";
                DGVC.Name = "Col5";
                DGVC.DataPropertyName = "CCC";
                DGV.Columns.Add(DGVC);
     
                DataGridViewImageColumn DGVI ;
                DGVI = new DataGridViewImageColumn();
                DGVI.HeaderText = "Modify";
                DGVI.Name = "Col6";
                DGVI.Image = RCBooking.Properties.Resources.Modify;            
                DGV.Columns.Add(DGVI );
     
                DGVC = new DataGridViewImageColumn();
                DGVI.HeaderText = "Status";
                DGVI.Name = "Col7";
                DGVI.Image = RCBooking.Properties.Resources.Active;       
                DGV.Columns.Add(DGVI);
     
                DGVC = new DataGridViewCheckBoxColumn();
                DGVC.Name = "Col8";
                DGVC.DataPropertyName = "BBB";
                DGVC.Visible = false;
                DGV.Columns.Add(DGVC);
     
                DGVC = new DataGridViewTextBoxColumn();
                DGVC.Name = "Col9";
                DGVC.DataPropertyName = "AAA";
                DGVC.Visible = false;
                DGV.Columns.Add(DGVC);

  • 2012年3月2日 上午 07:04
     
     已答覆

    經過小弟的一直研究,最後終於解決了~
    只要將組好的資料放入另一個新的DataTable
    最後將之前的使用的DataSet ,DataRelation,DataTable全部清空
    這樣子就能解決此問題了~

    • 已標示為解答 Miles_T 2012年3月2日 上午 07:04
    •