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版主
-
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

