|
|
|
การ Add ข้อมูลลง DataTable ครับ ปัญหาอยู่ด้านในครับ มีตัวอย่างที่เคยทำครับ |
|
|
|
|
|
|
|
ปกติผมจะ Add ข้อมูลลง DataTable ก่อนแล้ว Save ลง SQL จะได้แบบนี้
จะเป็นการ Add จากซ้ายไปขวา เวลาเก็บลง DataTable ก็จากซ้ายไปขวา แล้วก็ Save ลง SQL
จะมีหัวเรื่องอยู่ด้านบน ลำดับอยู่ด้านซ้าย
Code (VB.NET)
Private Sub LoadGridViewSizeData()
If IsNothing(Session("SizeTable")) Then
dt = New DataTable()
dt.Columns.Add(New DataColumn("TopWidth", GetType(String)))
dt.Columns.Add(New DataColumn("MidWidth", GetType(String)))
dt.Columns.Add(New DataColumn("BottomWidth", GetType(String)))
dt.Columns.Add(New DataColumn("WidthAVG", GetType(String)))
dt.Columns.Add(New DataColumn("LeftLength", GetType(String)))
dt.Columns.Add(New DataColumn("RigthLength", GetType(String)))
dt.Columns.Add(New DataColumn("LengthAVG", GetType(String)))
dt.Columns.Add(New DataColumn("SizeNote", GetType(String)))
Session("SizeTable") = dt
End If
dt = DirectCast(Session("SizeTable"), DataTable)
gvS_LoadSize.DataSource = dt
gvS_LoadSize.DataBind()
End Sub
Private Sub AddToTable()
Dim dr As DataRow = dt.NewRow
dr("TopWidth") = txtPK_WidthTop.Text.Trim
dr("MidWidth") = txtPK_WidthMid.Text.Trim
dr("BottomWidth") = txtPK_WidthBottom.Text.Trim
dr("WidthAVG") = ((CType(txtPK_WidthTop.Text.Trim, Decimal) + CType(txtPK_WidthMid.Text.Trim, Decimal) + CType(txtPK_WidthBottom.Text.Trim, Decimal)) / 3).ToString("n2")
dr("LeftLength") = txtPK_LengthLeft.Text.Trim
dr("RigthLength") = txtPK_LengthRigth.Text.Trim
dr("LengthAVG") = ((CType(txtPK_LengthLeft.Text.Trim, Decimal) + CType(txtPK_LengthRigth.Text.Trim, Decimal)) / 2).ToString("n2")
dr("SizeNote") = txtPK_SizeNote.Text.Trim
dt.Rows.Add(dr)
Session("SizeTable") = dt
LoadGridViewSizeData()
Reset()
txtPK_WidthTop.Focus()
End Sub
Private Sub AddToDB()
iMAX = IIf(Count <= 0, 1, Count + 1)
If iMAX < 1000 Then
Session("PKID") = "PK" & CStr(Format(Now.Date.ToString("yyyyMMdd", New CultureInfo("en-US")))) & iMAX.ToString("000")
dt = DirectCast(Session("SizeTable"), DataTable)
For i = 0 To dt.Rows.Count - 1
strSQL = "INSERT INTO Size (PK_ID,S_WIDTHTOP,S_WIDTHMID,S_WIDTHBOTTOM,S_LENGTHLEFT,S_LENGTHRIGTH,S_NOTE) VALUES ('" & Session("PKID").ToString() & "','" & dt.Rows(i)("TopWidth") & "','" & dt.Rows(i)("MidWidth") & "','" & dt.Rows(i)("BottomWidth") & "','" & dt.Rows(i)("LeftLength") & "','" & dt.Rows(i)("RigthLength") & "','" & dt.Rows(i)("SizeNote") & "')"
objCmd = New SqlCommand(strSQL, objConn)
With objCmd
.Connection = objConn
.CommandText = strSQL
.CommandType = CommandType.Text
.ExecuteNonQuery()
End With
Next
objConn.Close()
objConn = Nothing
MsgBox("บันทึกข้อมูลสำเร็จ")
End If
End Sub
แต่ผมต้องจะทำแบบนี้ยังไงหว่า
Add ข้อมูลแล้ว ให้ข้อมูลเรียงจากบนลงล่าง
จะมีหัวเรื่องอยู่ด้านซ้าย ลำดับอยู่ด้านบน เพราะผมต้องการ ของข้อมูลแต่ละชุดรวมกันแล้วทำเป็นค่าเฉลี่ย AVG
Tag : .NET, Ms SQL Server 2008, Web (ASP.NET), VB.NET, VS 2012 (.NET 4.x)
|
ประวัติการแก้ไข 2017-02-21 11:11:46 2017-02-21 11:16:56 2017-02-21 11:17:14 2017-02-21 11:17:38 2017-02-21 11:18:23 2017-02-21 11:19:14
|
|
|
|
|
Date :
2017-02-21 11:10:47 |
By :
NUTKA |
View :
5662 |
Reply :
21 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ใช้พวก List<T> จะง่ายกกว่านะครับ ใช้คำสั่ง LINQ ในการ WHERE ได้เลยครับ แล้วจะ SUM, VVG, GROUP ทำได้หมด
|
|
|
|
|
Date :
2017-02-21 11:55:03 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถ้าทำแบบขยายด้านข้าง
เวลาข้อมูลมาก ๆ มันจะมองลำบากไหมครับ
|
|
|
|
|
Date :
2017-02-21 15:47:06 |
By :
fonfire |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อยากได้ตัวอย่างจัง
|
|
|
|
|
Date :
2017-02-22 09:13:08 |
By :
NUTKA |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ก็น่าจะทำเหมือนเดิมน่ะครับ
เพิ่ม Columns เข้าไปรอเลย
dt = New DataTable()
dt.Columns.Add(New DataColumn("No", GetType(String)))
dt.Columns.Add(New DataColumn("1", GetType(Double)))
dt.Columns.Add(New DataColumn("2", GetType(Double)))
dt.Columns.Add(New DataColumn("3", GetType(Double)))
..
..
dt.Columns.Add(New DataColumn("10", GetType(Double)))
dt.Columns.Add(New DataColumn("AVG", GetType(Double)))
Session("SizeTable") = dt
เพิ่ม Row รอ
Dim dr As DataRow = dt.NewRow
dr("No") ="TopWidth"
dr("1") = 0
dr("2") =0
dr("3") = 0
dr("4") = 0
..
..
dr("AVG") = 0
dt.Rows.Add(dr)
ตอน Update
ก็ไปเช็คที่ Row แรก ว่า Columns ไหนเป็น 0
เราก็เอา Columns นั้นเป็นหลัก
แล้ว Update ทุก Row ด้วยค่าที่รับมา
เสร็จแล้วก็ Update ค่าของ AVG ตามไปด้วย
ผมพิมพ์ Code มั่ว ๆ เอา
ไปแก้อีกทีน่ะครับ ^___^
|
|
|
|
|
Date :
2017-02-22 09:59:48 |
By :
fonfire |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ใช่ครับ
ถ้าไม่อยากโชว์ข้อมูล ก็ใช้คู่กับ .Columns[1].visible=false ดูครับ
โชว์แค่อันแรก พอเพิ่มเสร็จก็โชว์อันถัดไป
หรือจะใช้วิธีเพิ่ม Columns เข้ามาเรื่อย ๆ ก็ได้ครับ
เช่นตอนแรกมี 2 Colunms พอเพิ่มข้อมูลก็เพิ่ม Column ใหม่เข้ามาเรื่อย ๆ
|
|
|
|
|
Date :
2017-02-22 10:26:36 |
By :
fonfire |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อยากรับเงินเดือนแทนมั่งจัง อิอิ
|
|
|
|
|
Date :
2017-02-22 11:24:59 |
By :
lamaka.tor |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมว่านะครับแทนที่จะรอตัวอย่างลองแบบนี้ดีไม๊
1.ตัดสินใจได้ยังรึว่าจะให้สร้างผ่าน SQL เลย หรือ list หรือ DataTable
2.เมื่อติดสินใจแล้วก็ศึกษาให้ตรงกับที่ต้องการ
3.ทดสอบที่เราตั้งไว้
ผมว่าข้อดีของท่านอย่างหนึ่งก็คือ รู้ ว่าโปรแกรมต้องการอะไร แค่เริ่มศึกษาจริงๆจัง(แบบไม่เปะปะ)ผมเชื่อว่าแค่ 1 ชั่วโมงก็น่าจะรู้ผลแล้วครับ
คำถามต่อไปจะกลายเป็นว่ามัน ติดอะไร พัฒนาไปถึงไหนมากกว่า
|
|
|
|
|
Date :
2017-02-22 11:34:01 |
By :
lamaka.tor |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตอบความคิดเห็นที่ : 14 เขียนโดย : NUTKA เมื่อวันที่ 2017-02-22 12:32:58
รายละเอียดของการตอบ ::
ที่ถามคือตอน display ครับ
เพราะว่ารูปแบบการ บันทึก(แนวนอน) กับ display(แนวตั้ง) จะต่างกันใช่ไม๊ครับ
ท่าน แอดมิน แนะให้ใช้ list หรือ Diractory<double,list<double>>
ท่าน fonfire แนะให้ใช้ DataTable
นอกจากนี้ยังสามารถ select SQL ออกมาเลย(ก็น่าจะได้)
โดยส่วนตัวผมถนัดแบบ แอดมิน ครับ ยืดหยุ่นได้เยอะดี
ส่วนถ้าอยากทำตาม No. 6 แล้วติดข้อข้องใจตาม No. 7
ถ้าลองทำซักรอบก็จะแก้ได้เองครับ
เพราะพอเรา select มันก็บอกได้ว่า rows เท่าไหร่
เอาใช้หลัก conlumncount ของ datable ที่เราสร้าง = rowcount ที่ select มา
เอา conlumncount ของ datable ไปใช้สร้าง datable
Code
เพิ่ม Row รอ
dt = New DataTable()
dt.Columns.Add(New DataColumn("No", GetType(String)))
dt.Columns.Add(New DataColumn("1", GetType(Double)))
dt.Columns.Add(New DataColumn("2", GetType(Double)))
dt.Columns.Add(New DataColumn("3", GetType(Double)))
..
..
dt.Columns.Add(New DataColumn(conlumncount , GetType(Double)))
dt.Columns.Add(New DataColumn("AVG", GetType(Double)))
จากที่เห็น จำนวน คอลัมเราจะเปลี่ยนไปเรื่อยๆขึ้นอยู่กับ rowcount ที่ select มา นั่นเองครับ
ใช่ประมาณนี้ไม๊ครับที่ต้องการ
ปล.ผมทำงานเป็นนักวิเคราะห์โลหะหนัก เงินเดือนก็น้อยอยู่ ที่ทนเขียนโปรแกรมทั้งๆที่ไม่จบมาด้านนี้เลย ก็เพราะเขียนหนังสือไม่สวย
ไม่สวยแค่ไหนรึ ถ้าท่านมาที่ออฟฟิสผมเมื่อไม่นานมานี้จะได้ยินเสียง ผจก.เปล่งมาว่า ไอ้..... มึงเขียนผลยังไงของมึงอ่านไม่ออก เอาไปคัดมาใหม่ อาทิตย์ละ 5 วัน(ซึ่งเป็นเวลาที่ผมรันเครื่องพอดี 555) บางวันก็มีคำแปลกโผล่มาให้อายเหล่าเพื่อพ้องที่ทำงานด้วยกันเป็นเนืองๆ
จนผมต้องฝืนหัดเขียนโปรแกรม อดตาหลับขับตานอน(ไม่ได้ทำงานหรอก แดกเหล้า ) จนลบคำด่าเหล่านั้นไปในที่สุดนั่นเอง
ถึงทุกวันนี้ผมก็เขียนเขียนแบบไก่เขี่ยไส้เดือนอยู่นั่นเอง(ใครจะไปสนในเมื่อมี Angsana New อยู่แล้วจริงไม๊)
|
|
|
|
|
Date :
2017-02-22 14:02:26 |
By :
lamaka.tor |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ในส่วนของ Database ผมว่า ก็เก็บเหมือนเดิมน่ะครับ
จะเป็น list หรือ datatable ก็เหมือนกัน
มันลำบากตรงที่ ถ้ามีข้อมูลแค่ 1 ก็ต้องโชว์ columns แค่ 3
No.======1======AVG
แต่ถ้ามีข้อมูล 2 ก็ต้อง
No.======1======2=======AVG
เราต้องมาคอยเพิ่ม Columns เข้าไปใหม่
เท่าที่ดู เข้าใจว่า ไม่ได้มีการจัด format ของ datagrid ไว้
แต่ใช้ columns ตรง ๆ จาก Datatable เลย
การเพิ่ม Column เข้าไปเรื่อย ๆ น่าจะทำให้ งง ได้น่ะครับ
ไม่แน่ใจว่า Datatable มันเพิ่ม Column แบบแทรกได้ไหม
หรือว่าเพิ่มแบบต่อท้ายได้อย่างเดียว
ยังไงลองเพิ่มข้อมูลเข้าไปทีเดียว 10 ข้อมูลเลย
แล้วลอง save ข้อมูลที่ล่ะ 1 ดู
ถ้าทำได้แล้วค่อยมาหาวิธีซ่อน Columns อีกทีครับ
|
|
|
|
|
Date :
2017-02-22 14:45:45 |
By :
fonfire |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 02
|