# ประเด็นมีอยู่ว่าต้องการออกรายงานด้วย crystal report ซึ่งจะเอาข้อมูลใน datagridview ที่เลือก
# ติดไว้ตั้งแต่เมื่อวานเพราะ ข้อมูลที่แสดงผิดอ่ะดิ เป็นตัวเลขหมดซะงั้น
# ซึ่งความจริงแล้ว CustomerID จะเป็นชื่อ อักษรภาษาอังกฤษอ่ะดิ แต่ไมขึ้นตัวเลขแบบนี้หว่า
# debug ดูไงว่า CustomerID expected int32 ว่า
# can not store
# นี้คือโค้ดตอนสร้าง datatable ที่แล้วการสร้างเพิ่ม colum ซึ่งเอามาจาก
# นั่งแก้มั่วไปเรื่อยอยู่เป็นวัน ตูก็เอา column จาก datagridview เลยนะสำหรับกำหนดคุณสมบัติให้ column ใหม่
DataTable dt = new DataTable();
for (int i = 0; i < dgvSearchResult.Columns.Count; i++)
{
DataColumn column = new DataColumn();
column.DataType = dgvSearchResult.Columns[i].GetType();
column.ColumnName = dgvSearchResult.Columns[i].Name;
column.AutoIncrement = true;
dt.Columns.Add(column);
}
// dgvSearchResult คือ Datagridview
// bindingSourceSearchResult.DataSource = dtsTableData.Tables[0];
// มันเป็นงี้ dgvSearchResult.DataSource = bindingSourceSearchResult
// โค้ดนี้สำหรับเพิ่มค่าให้ row แต่ละ cell เนี๋ย ถูกแหละ คิดว่ามันผิดตรงใหนอยู่ตั้งนานเซงมากๆ
for (int i = 0; i < dgvSearchResult.SelectedRows.Count; i++)
{
DataRow dr = dt.NewRow();
for (int j = 0; j < dt.Columns.Count; j++)
{
Object obj = dgvSearchResult.SelectedRows[i].Cells[j].Value;
dr[dt.Columns[j].ColumnName] = obj;
}
dt.Rows.Add(dr);
}
# แล้วทำไม type ของ column ตูจะผิดได้ไงหว่า เป็น int32 หมดซะงั้น
# หรือว่าตูเพิ่มค่าให้กับ datarow ผิดหว่า คิดไปเรื่อย แก้ไปเรื่อย เมื่อวานนั่งงมใน google ตั้งนาน ก็เจอยู่นะแต่ไม่ได้ get อาไรกับเค้าเล้ย กับห้องไปนอนดีกว่า
# วันนี้ ตื่นขึ้นมา ล้างหน้า แปลงฟัน อาบน้ำ สดชื่นอย่างแรก เปิด nb แล้วก็นั่งดูในเว็บ codeproject ที่เมื่อวานนั่งดูไม่ get อาไรเลย
# ลองใหม่อีกครั้งน่า ความพยายามอยู่ในความสำเร็จก็อยู่นั่นอ่ะดิครับ วันที่รอคอยก็มาถึง
# สร้าง Datatable จาก multi select row ใน Datagridview ได้แหละ
# ปัญหาที่เราสร้าง datacolumn ผิดหว่าเพราะ datagridview ไม่ได้ผูกกับ dataset โดยตรง เพราะ เราใช้ bindingSource ผูกกับ dataset หรือ datatable แล้วค่อยนำ datagridview ไปผูกกับ bindingSource อีกรอบ
# ที่ทำอย่างนี้เพราะว่าจะทำ paging ให้ datagridview เราอ่ะนะ เลยต้องใช้ databinding มาเกี่ยวข้องอีกที่ เพราะปกติ ใช้ datagridview ผูกกับ dataset หรือ datatable เลยตลอด
# ทำให้ตอนสร้าง column ได้ datatype ผิดๆ อ่ะ ^^'
# ถ้าเราต้องการสร้าง Datatable ใหม่โดยต้องการนำ column ใน Datagridview ที่ผูกกับ bindingSource เราต้องเข้าถึง bindingSource โดยตรง และใช้ dataview มาเกี่ยวข้องด้วยหว่า ซึ่งเป็นอาไรที่เรา ไม่เคยใช้มาก่อนเลย
# จากโค้ดด้านบนให้เราแก้เป็น
// ก็ใช้แบบนี้ไม่ได้อ่ะนะ bindingSourceSearchResult.Columns
// dgvSearchResult คือ Datagridview
// bindingSourceSearchResult.DataSource = dtsTableData.Tables[0];
// มันเป็นงี้ dgvSearchResult.DataSource = bindingSourceSearchResult
DataTable dt = new DataTable();
CurrencyManager cm =
(CurrencyManager)dgvSearchResult.BindingContext[bindingSourceSearchResult.DataSource
, bindingSourceSearchResult.DataMember];
DataView dv = (DataView)cm.List;
foreach (DataColumn dc in dv.Table.Columns)
{
dt.Columns.Add(dc.ColumnName);
}
// dt คือ DataTable
DataView v = dt.DefaultView;
//v.Sort = "sumaccept DESC, suminvite DESC, emailaddress ASC";
v.Sort = "rank ASC";
dt = v.ToTable();
# หรืออยากให้เรียงใหม่ ตอนเรา add ข้อมูลให้ datarow เราก็สลับ index สิครับ
// ของเดิม# เราก็สามารถออกรายงานให้เรียงเหมือนใน DatagridView ได้แล้ว ^^' (อย่าลืม comment dataview sort)
//for (int i = 0; i < dgvSearchResult.SelectedRows.Count; i++)
// กลับกันก็
for (int i = (dgvSearchResult.SelectedRows.Count - 1)
; i >= 0; i--)
# แต่ทำไมเรา sort แหละยังเรียงงี้อ่ะ 10, 11 ต่อ 1 ซะงั้น น่าจะเป็น 2 มากว่า 10 , 11 นะ ทำไมเรียงแบบ string ซะงั้น แล้วตูจะทำไงล่ะที่นี้
# แก้แบบใส่ type ก่อน add ลง table ตามลิ้งนี้บอกแล้วนะ แต่ไม่ผ่านหว่า มันเป็นการเปลี่ยน type ของ datatable ที่มีข้อมูลอยู่แล้วซะงั้น
dc.DataType = typeof(int);
# ของเดิม
dt.Columns.Add(dc.ColumnName);
# ให้เราแก้บรรทัดที่ใส่แต่ column name ให้เติม type ของ column เนี๋ยลงใน datable ตัวใหม่ด้วยซะงั้น
dt.Columns.Add(dc.ColumnName, dc.DataType);
# จากที่แก้แล้วใช้ได้ เรียงแบบ integer ได้ถูกต้องแหละ สรุปได้ว่า ถ้าเราไม่ใส่ type ตอนเพิ่ม column ให้ table ค่าโดยปริยายจะเป็น string หว่า
References :
- http://blogger.sanook.com/rungroj/2008/09/26/sort-datatabl
http://www.codeproject.com/KB/grid/FromDataGrid2DataSet.aspx - http://www.eggheadcafe.com/software/aspnet/31294414/dataview--integer-sortin.aspx
- http://www.eggheadcafe.com/conversation.aspx?messageid=31311337&threadid=31294414
- http://bytes.com/groups/net-c/747289-dataview-integer-sorting
No comments:
Post a Comment