Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,038

HOME > .NET Framework > Forum > การเขียนโปรแกรมที่มี User ใช้ หลาย ๆ คน นั้น อยากทราบแนวทางในการเขียนครับว่าควรคำนึงถึงอะไรบ้างครับ


 

[.NET] การเขียนโปรแกรมที่มี User ใช้ หลาย ๆ คน นั้น อยากทราบแนวทางในการเขียนครับว่าควรคำนึงถึงอะไรบ้างครับ

 
Topic : 123731



โพสกระทู้ ( 181 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook


เรียน ท่านอาจารย์ และผู้เชี่ยวชาญทุกท่านครับ

การเขียนโปรแกรมที่มี User ใช้ หลาย ๆ คนพร้อมกันนั้น อยากทราบแนวทางในการเขียนครับว่าควรคำนึงถึงอะไรบ้างครับ
และ Soft ware ที่ใช้เขียนรวมทั้ง database ควรเลือกใช้ Version ไหนดีครับ พอดีผมใช้ Asp.net / VS 2010 / Sql-Server 2008 Express
ควรเปลี่ยนมาใช้ รุ่นไหนดีครับ

ขอบพระคุณในความกรุณาล่วงหน้าทุกท่านสำหรับความคิดเห็นครับ

ืnoon




Tag : .NET, Ms SQL Server 2008, Crystal Report, Web (ASP.NET), VS 2010 (.NET 4.x)

Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2016-07-07 10:44:23 By : noonk View : 1478 Reply : 18
 

 

No. 1



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

โดยส่วนตัวผมมองว่า Database ตัวไหน หรือโปรแกรมที่ใช้เขียน ตัวไหน
ไม่สำคัญเท่าการออกแบบ Database ให้ใช้ได้ครอบคลุมทุกส่วนงานครับ



User ใช้ หลาย ๆ คนพร้อมกันนั้น
โดยส่วนใหญ่มักจะให้ server เป็นตัวจัดการ Database (เท่าที่เห็นๆมานะครับ)
จึงไม่น่าจะมีปัญหา

แต่ก็อย่างว่าแหละครับขึ้นอยู่กับว่าออกแบบ Database ยังไง

ทุกวันนี้ผมยังสงสัยอยู่เลยว่าบางโปรแกรมแยกข้อมูล customer กับ suplier ออกจากกัน
ทั้งๆที่บางครั้งมันก็คือคนๆเดียวกันนั่นเอง(ทั้งนี้ก็เพื่อให้สะดวกต่องานหลายๆด้านนั่นเอง)
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-07-07 13:42:01 By : lamaka.tor
 

 

No. 2



โพสกระทู้ ( 181 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

ขอบคุณครับ คุณ lamaka.tor แสดงว่าโปรแกรมกับ Database ที่เราใช้พัฒนาโปรแกรมนั้นไม่เกี่ยวกับว่า User จะใช้กี่คน แต่อยู่ที่การออกแบบฐานข้อมูลเป็นหลักนะครับ

ขอบคุณอีกครั้งครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-07-07 13:51:35 By : noonk
 

 

No. 3



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ถ้าเกี่ยวกับ User สำหรับผมมีแค่สิทธิ์การใช้งานครับ
ถ้าเราออกแบบ สิทธิ์การใช้งาน ดีๆจะมองเห็นว่าข้อมูลหนึ่งมีไม่กี่คนหร่อกที่ใช้ร่วมกันจริงๆ

ข้อมูลที่ผมจะแยกออกแบบก็จะเป็นพวก ข้อมูลเสถียร ข้อมูลผันแปร ผมใช้ 2 ตัวนี้แยกแยะความละเอียดอ่อนของข็อมูลครับ

ปล. เอาไรมากกับผมไม่ได้หร่อกครับ ผมมันแค่นักวิทย์ หลักการจริงๆของโปรแกรมเมอร์มือนโปรจริงอาจจะไม่เป็นแบบนี้ก็ได้ครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-07-07 14:04:44 By : lamaka.tor
 

 

No. 4



โพสกระทู้ ( 151 )
บทความ ( 0 )



สถานะออฟไลน์


อย่ามองที่ User เพียงอย่างเดียวครับ ในที่นี้ผมยกตัวอย่างเช่นเรื่อง Transaction ที่เข้ามาติดต่อกับ Database ว่าเยอะแค่ไหน ถ้าเยอะมากๆ Sql 2008 Express อย่าลืม ว่า มันรองรับได้แค่ 10 GB ถ้ามี Transaction เยอะรับไม่ไหวแน่ๆ Log เต็ม ทั้งนี้ทั้งนั้นมันก็ขึ้นอยู่ว่าคุณ จัดการ Database ดีแค่ไหน เช่นการจัดการเรื่อง Shrink Log ต่างๆนาๆ หรือแม้กระทั้ง การกำหนด Recovery Type ตั้งแต่สร้าง Database ก็มีผลกับการเก็บ Log ของ Database ไหนจะเรื่อง Host อีก พูดแล้วก็ยาว ไปดีกว่า อิอิ


ประวัติการแก้ไข
2016-07-07 16:11:12
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-07-07 16:10:25 By : taotechnocom
 

 

No. 5

Guest


@noon & TOR_CHEMISTRY

ผมให้พวกคุณเดาใจของผม (ด้วย Screen ตัวอย่าง และ SourceCode) ว่าผมต้องการอะไร?

xTest

อันนี้เป็น Source code เต็มของหน้าจอจากรูปภาพด้านบน และผมแถม Comment เอาไว้ด้วย

Code (VB.NET)
001.Public Class usrCtrSales3
002. 
003.    Private bsSales As New BindingSource 'เก็บข้อมูลรายละเอียดการขาย (Item1, Item2, Item3, ...)
004. 
005.    Private Sub usrCtrProduct_Load(sender As Object, e As EventArgs) Handles Me.Load
006.        dgvSaleItems.Columns(2).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight
007.        dgvSaleItems.Columns(3).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight
008.        dgvSaleItems.Columns(4).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight
009.        dgvSaleItems.Columns(5).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight
010.        Call MakeDataTableDEMO_Data()
011.    End Sub
012.    Private Sub MakeDataTableDEMO_Data()
013.        Dim dtSales As New DataTable
014.        dtSales.Columns.Add("Part_NO", GetType(String))
015.        dtSales.Columns.Add("Part_Desc", GetType(String))
016.        dtSales.Columns.Add("xQTY", GetType(Double))
017.        dtSales.Columns.Add("xPrice", GetType(Double))
018.        dtSales.Columns.Add("xTotal", GetType(Double))
019.        dtSales.Columns.Add("xDiscount", GetType(Double))
020. 
021.        dtSales.Rows.Add(New Object() {"P-001", "สินค้าตัวอย่าง1", 2, 50, 100, 0})
022.        dtSales.Rows.Add(New Object() {"P-002", "สินค้าตัวอย่าง2", 5, 30, 150, 0})
023.        dtSales.Rows.Add(New Object() {"P-003", "สินค้าตัวอย่าง3", 4, 6, 24, 0})
024. 
025.        dtSales.AcceptChanges() 'Commit Change.
026. 
027.        bsSales.DataSource = dtSales
028. 
029.        SetDGVInfo(bsSales)
030.    End Sub
031.    Private Sub SetDGVInfo(ByVal bs As BindingSource)
032.        dgvSaleItems.AutoGenerateColumns = False
033.        dgvSaleItems.Columns(0).DataPropertyName = "Part_NO"
034.        dgvSaleItems.Columns(1).DataPropertyName = "Part_Desc"
035.        dgvSaleItems.Columns(2).DataPropertyName = "xQTY"
036.        dgvSaleItems.Columns(3).DataPropertyName = "xPrice"
037.        dgvSaleItems.Columns(4).DataPropertyName = "xTotal"
038.        dgvSaleItems.Columns(5).DataPropertyName = "xDiscount"
039.        dgvSaleItems.DataSource = bsSales
040.    End Sub
041.    'กลับไปก่อนหน้า
042.    Private Sub BacktoPanelHead()
043.        pnlDetail1.Visible = False
044.        pnlDetail2.Visible = False
045.        pnlHead.Visible = True
046.        pnlDetail2.Dock = DockStyle.Bottom
047.        pnlDetail1.Dock = DockStyle.Bottom
048.        pnlHead.Dock = DockStyle.Fill
049.    End Sub
050.    'คลิ๊กปุ่ม เพิ่มข้อมูล
051.    Private Sub tsbAction_Click(sender As Object, e As EventArgs) Handles tsbAdd.Click
052.        Actions("A")
053.    End Sub
054.    'คลิ๊กปุ่มแก้ไขข้อมูล
055.    Private Sub tsbEdit_Click(sender As Object, e As EventArgs) Handles tsbEdit.Click
056.        Actions("E")
057.    End Sub
058.    'RowState (A/E/D)
059.    Private Sub Actions(ByVal mode As String)
060.        pnlDetail1.Visible = True
061.        pnlDetail2.Visible = False
062.        pnlHead.Visible = False
063.        pnlDetail1.Dock = DockStyle.Fill
064.        pnlDetail2.Dock = DockStyle.None
065.        pnlHead.Dock = DockStyle.None
066.        lblActions.Text = If(mode = "A", "เพิ่มข้อมูล", "แก้ไขข้อมูล")
067.        If mode = "E" Then
068.            'Binding to ALL TextBox
069.            For i As Integer = 0 To Me.Controls.Count - 1
070.                'Binding To TextBox Control
071.                'Binding to ComboBox Control
072.                'and so on.
073.            Next
074.        Else 'Edit Mode
075.            'Reset All TextBox/ComboBox/etc...
076.            mduControlManager.GetAllControl(pnlDetail1, GetType(WL_Controls.usrCtrlTextBox)).ToList().ForEach(Sub(x) DirectCast(x, WL_Controls.usrCtrlTextBox).ResetValue())
077.            mduControlManager.GetAllControl(pnlDetail1, GetType(WL_Controls.usrCtrComboBox)).ToList().ForEach(Sub(x) DirectCast(x, WL_Controls.usrCtrComboBox).ResetValue())
078.        End If
079.    End Sub
080.    'กลับไปก่อนหน้า
081.    Private Sub tsbBack_Click(sender As Object, e As EventArgs) Handles tsbBack.Click
082.        'ถ้าไม่มีการใช้ BindingSource (Me.dgvSaleItems.Rows.Clear())
083.        BacktoPanelHead()
084.    End Sub
085.    Private Sub dgvSaleItems_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles dgvSaleItems.EditingControlShowing
086.        'TODO
087.        'More...
088.    End Sub
089.    Private Sub dgvSaleItems_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs) Handles dgvSaleItems.CellValidating
090.        'Clear All error message.
091.        dgvSaleItems.Rows(e.RowIndex).ErrorText = String.Empty
092.        If dgvSaleItems.Rows(e.RowIndex).IsNewRow Then 'มีอยู่ 1 แถวและไม่มีอะไรเลย
093.            Exit Sub 'Return 'Exist Sub
094.        End If
095.        If dgvSaleItems.CurrentCell.IsInEditMode Then
096.            If e.ColumnIndex = 0 Then
097.                dgvSaleItems.Rows(e.RowIndex).Cells(1).Value = Guid.NewGuid()
098.                dgvSaleItems.Rows(e.RowIndex).Cells(2).Value = 1.0
099.                dgvSaleItems.Rows(e.RowIndex).Cells(3).Value = 200.0
100.                dgvSaleItems.Rows(e.RowIndex).Cells(4).Value = 200.0
101.                dgvSaleItems.Rows(e.RowIndex).Cells(5).Value = 0.0
102.            End If
103.        End If
104.        If e.ColumnIndex > 1 Then 'Column 2 is readonly (array zero base.)
105.            Dim newDouble As Double
106.            If Not Double.TryParse(If(e.FormattedValue = String.Empty, 0, e.FormattedValue.ToString()), newDouble) OrElse newDouble < 0 Then
107.                e.Cancel = True
108.                Me.dgvSaleItems.Rows(e.RowIndex).ErrorText = "ต้องป้อนเป็นตัวเลขเท่านั้น"
109.            End If
110.        End If
111.    End Sub
112.    'คำนวณ รวมเงิน = จำนวน x ราคา/หน่วย
113.    Private Sub dgvSaleItems_CellValidated(sender As Object, e As DataGridViewCellEventArgs) Handles dgvSaleItems.CellValidated
114.        If Not dgvSaleItems.CurrentRow.IsNewRow Then
115.            If e.ColumnIndex > 1 Then
116.                dgvSaleItems.Rows(e.RowIndex).Cells(4).Value = dgvSaleItems.Rows(e.RowIndex).Cells(2).Value * dgvSaleItems.Rows(e.RowIndex).Cells(3).Value
117.            End If
118.        End If
119.    End Sub
120.    Private Sub dgvSaleItems_CellMouseClickORDbClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles dgvSaleItems.CellMouseClick, dgvSaleItems.CellMouseDoubleClick
121.            Try
122.                If String.IsNullOrEmpty(dgvSaleItems.Rows(e.RowIndex).Cells(0).Value) Then
123.                    dgvSaleItems.CurrentCell = dgvSaleItems(0, e.RowIndex)
124.                    Return
125.                End If
126.                Dim col As Short = dgvSaleItems.CurrentCell.ColumnIndex
127.                If dgvSaleItems.Columns(col).Visible = False OrElse dgvSaleItems.Columns(col).ReadOnly = True OrElse dgvSaleItems.Columns(col).CellType.ToString = "System.Windows.Forms.DataGridViewImageCell" Then
128.                    For iSub As Short = col To dgvSaleItems.ColumnCount - 1
129.                        col = (col + 1) Mod dgvSaleItems.ColumnCount
130.                        If dgvSaleItems.Columns(col).Visible = True AndAlso dgvSaleItems.Columns(col).ReadOnly = False AndAlso _
131.                            dgvSaleItems.Columns(col).CellType.ToString <> "System.Windows.Forms.DataGridViewImageCell" Then
132.                            Exit For
133.                        End If
134.                    Next
135.                End If
136.                dgvSaleItems.CurrentCell = dgvSaleItems.CurrentRow.Cells(col)
137.            Catch ex As Exception
138.                'log hear.
139.            End Try
140.    End Sub
141.    '
142.    'ถ้าอยู่ใน EditMode มันจะไม่เข้ามาที่อีเวนต์นี้
143.    Private Sub dgvSaleItems_KeyDown(sender As Object, e As KeyEventArgs) Handles dgvSaleItems.KeyDown
144.        If dgvSaleItems.CurrentCell.ColumnIndex = 0 AndAlso e.KeyCode = Keys.Right Then
145.            e.Handled = True
146.            dgvSaleItems.CurrentCell = dgvSaleItems(2, dgvSaleItems.CurrentCell.RowIndex)
147.        End If
148.        If dgvSaleItems.CurrentCell.ColumnIndex = 2 AndAlso e.KeyCode = Keys.Left Then          
149.            e.Handled = True
150.            dgvSaleItems.CurrentCell = dgvSaleItems(0, dgvSaleItems.CurrentCell.RowIndex)
151.        End If
152.        If dgvSaleItems.CurrentCell.ColumnIndex > 1 AndAlso (e.KeyCode = Keys.Down OrElse e.KeyCode = Keys.Enter) Then
153.            e.Handled = True
154.            If dgvSaleItems.CurrentCell.RowIndex + 2 >= dgvSaleItems.Rows.Count Then
155.                dgvSaleItems.CurrentCell = dgvSaleItems(0, dgvSaleItems.Rows.Count - 1)
156.            Else
157.                If dgvSaleItems.CurrentCell.ColumnIndex = 5 Then
158.                    dgvSaleItems.CurrentCell = dgvSaleItems.Rows(dgvSaleItems.CurrentCell.RowIndex).Cells(0)
159.                Else
160.                    dgvSaleItems.CurrentCell = dgvSaleItems.Rows(dgvSaleItems.CurrentCell.RowIndex).Cells(dgvSaleItems.CurrentCell.ColumnIndex + 1)
161.                End If
162.            End If
163.        End If
164.    End Sub
165. 
166.    'แสดงลำดับที่ของแถว 1, 2, 3, ...
167.    '
168.    Private Sub dgvSaleItems_RowPostPaint(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewRowPostPaintEventArgs) Handles dgvSaleItems.RowPostPaint
169.        Try
170.            Dim length As String = dgvSaleItems.RowCount.ToString.Length
171.            Dim row As String = (e.RowIndex + 1).ToString.PadLeft(length, " ")
172.            Dim size As SizeF = e.Graphics.MeasureString("ก", Me.Font)
173.            Using b As SolidBrush = New SolidBrush(dgvSaleItems.RowHeadersDefaultCellStyle.ForeColor)           
174.                e.Graphics.DrawString(row, dgvSaleItems.DefaultCellStyle.Font, b, e.RowBounds.Location.X + ((dgvSaleItems.RowHeadersWidth - size.Width) / 2) + 1, e.RowBounds.Location.Y + ((e.RowBounds.Height - size.Height) / 2))
175.            End Using
176.        Catch
177.            'logger error.
178.        End Try
179.    End Sub
180.    'ทดสอบการลบข้อมูลโดยการ Double Click ณ. หัวแถวนั้นฯ (ทดสอบ)
181.    Private Sub dgvSaleItems_RowHeaderMouseDoubleClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles dgvSaleItems.RowHeaderMouseDoubleClick
182.        If bsSales.Position <> -1 Then
183.            DirectCast(bsSales.DataSource, DataTable).Rows(bsSales.Position).Delete() 'By Ref
184.        End If
185.    End Sub
186.    'ตรวจสอบ RowState (FoxPro ทำได้ตั้งแต่ 20 ปีที่แล้ว ทั้ง Field State และ Row State)
187.    Private Sub btnGetRowState_Click(sender As Object, e As EventArgs) Handles btnGetRowState.Click
188.        Dim dt = DirectCast(bsSales.DataSource, DataTable)
189.        If dt IsNot Nothing Then
190.            Dim rowStateDeleted = dt.GetChanges(DataRowState.Deleted)
191.            Dim rowStateModifyed = dt.GetChanges(DataRowState.Modified)
192.            Dim rowStateAdded = dt.GetChanges(DataRowState.Added)
193. 
194.            'F9 Break
195.            If "ขนขึ้น" <> "หอยไม่ขึ้น" Then
196. 
197.            End If
198.        End If
199.    End Sub
200.End Class

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-07-07 16:19:54 By : หน้าฮี
 

 

No. 6

Guest


บางคนเขียนโปรแกรมมาทั้งชีวิต
--- แต่ไม่เคยมีคำถามให้กับตัวเอง (นึกคำถามไม่ออก)
บางคนทำงานมาทั้งชีวิต
--- แต่ก็นึกคำถามให้กับตัวเองไม่ออก (ต้องให้คนอื่นถามให้)
...
...
...

ความต้องการของธุรกิจ (มันไม่ได้มาจากหัวสมองของโปรแกรมเมอร์)
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-07-07 16:43:47 By : หน้าฮี
 

 

No. 7



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 5 เขียนโดย : หน้าฮี เมื่อวันที่ 2016-07-07 16:19:54
รายละเอียดของการตอบ ::
สงสัยหิวข้าวมั้งครับ

เอ... รู้สึกว่ามันจะขัดกับนโยบายของพี่นะครับ
รึว่าเข้าสู้โหมดแบ่งปันความรู้แล้วรึครับ
ขอบคุณมากครับ ที่สละเวลามาแบ่งปัน ความคิดเล็กๆน้อยๆกับน้องๆ


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-07-07 16:45:37 By : lamaka.tor
 

 

No. 8



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 7 เขียนโดย : lamaka.tor เมื่อวันที่ 2016-07-07 16:45:37
รายละเอียดของการตอบ ::
ช่วงนี้ไม่ค่อยได้เขียนเกี่ยวกับ database เพราะต้องมานั่งเขียนโปรแกรมโหลด การ์ตูน โหลดเพลง โปรแกรม และหนังอยู่
ไหนจะต้องมานั่ง เขียนโปรแกรมเปลี่ยน tag เพลงที่โหลดมาได้อีก
ใครมีโค๊ดที่สามารถบอกได้ว่า เพลงไหน มีเฉพาะ ดนตรี(ไม่มีเสียงร้อง) แจ้งด้วยนะครับ(ต้องกการด่วนมาก)


วันนี้ รัน PT selenium กับ Mercury ยังไม่แน่ว่าจะผ่านรึป่าวค่าน้อยจริง
สงสัยคงต้องสั่งซื้อ ICP เครื่องใหม่ เจ้าแก่นี่เริ่ม DL สูงขึ้นเรื่อยๆแล้ว
แค่ Mercury ก็ได้ DL ตั้ง 0.001 ppm หรือ 1.00 ppb


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-07-07 16:56:17 By : lamaka.tor
 

 

No. 9

Guest


ผมให้คุณกลับไปคิดเอาเอง

หัวสมองระดับโปรแกรมเมอร์
มันก็แค่ต้นทุนแฝงในบริษัทนั้นฯ
--- พนักงานรายวัน เรารับรู้ได้ถึงค่าใช้จ่าย/รายได้ (บวกเข้าไปในค่าแรง เพื่อคำนวณต้นทุน[โดยประมาณ])

ุ้ถ้าคุณพอมีเวลาก็ลองทบทวนดู (สิ่งไหนดีและมีประโยขน์ก็ไม่ควรเก็บเอามาคิดให้เปลืองสมอง)

ป.ล มันก็ไม่ใช่เรื่องง่ายฯ ผมปิดงบการเงินไม่เป็นแต่ผมอยากจะให้สมุห์บัญชียกมือไหว้ผม ฉันใดก็ฉันนั้น
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-07-07 17:43:23 By : หน้าฮี
 

 

No. 10



โพสกระทู้ ( 181 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

ขอบพระคุณทุกความเห็นครับ สำหรับคุณ "หน้าฮี" นั้น ไม่ธรรมดาเลย ระดับเทพเหมือนกัน ว่าแต่ว่าต้องทำความเข้าใจสำนวนของท่านหน่อยว่าท่านกำลังสื่อสารเรื่องอะไรออกมา ที่ผ่านมาพอได้ติดตามกระทู้/คำตอบของท่าน ... ท่านออกจะถนัดและเชี่ยวชาญ VB 6.0 มาก
ขอบพระคุณอีกครั้งครับ คุณ : taotechnocom / lamaka.tor / "หน้าฮี"

noon
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-07-08 06:56:02 By : noonk
 

 

No. 11

Guest


คห.5 โปรแกรมคงจะสับสน รหัสสินค้า ช่องที่ 4-5 แน่ ๆ เลยครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-07-08 07:52:14 By : ละอ่อน
 

 

No. 12

Guest


จาก #NO10 คุณเข้าใจผิด
Quote:
ขอบพระคุณทุกความเห็นครับ สำหรับคุณ "หน้าฮี" นั้น ไม่ธรรมดาเลย ระดับเทพเหมือนกัน


ผมไม่อยู่ระดับนั้นแน่นอนครับ
(ผมยกหางของตัวเองว่า ผมอยู่เหนือกว่านั้น)
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-07-08 19:01:59 By : หน้าฮี
 

 

No. 13

Guest


จาก #NO 11
Quote:
คห.5 โปรแกรมคงจะสับสน รหัสสินค้า ช่องที่ 4-5 แน่ ๆ เลยครับ


ผมรู้ว่าคุณทันผม แต่ผมสละเวลาอธิบายให้ฟังว่า
ถ้าผมมีหน้าจอเดิมฯ ซ้ำฯ > สองหน้าจอ ผมต้องทำอย่างไร

วัตถุประสงค์ของผมก็คือ 1 โปรแกรมเมอร์ มันต้องเท่ากับ 10 โปรแกรมเมอร์


ป.ล. อะไรที่มีประโยชน์ก็ไม่ต้องไปสนใจมัน คำโกหกมันก็อาจกลายเป็นความจริงได้ ถ้าเรามีความเชื่อว่ามันเป็นเช่นนั้น
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-07-08 19:57:48 By : หน้าฮี
 

 

No. 14



โพสกระทู้ ( 181 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-07-11 07:39:26 By : noonk
 

 

No. 15

Guest


เมื่อวานผมถามเด็กว่า จะไปไหนล่ะ?
เด็กข้างบ้าน : ผมจะไปเรียนต่อครับ (ม.ในกรุงเทพมหานครนี่แหละ)
ผมก็ถามต่อ : เรียนสาขาอะไรล่ะ
เด็กข้างบ้าน : คอมพิวเตอร์ครับ

ผมคิดอยู่ในใจ : ผมเคยให้โอกาสเขา มานั่งเรียนกับผมซิ ทุกความรู้ที่ผมมีอยู่ผมให้หมดเลย (แต่ไม่มา)
ผมคิดแบบนี้นะถูกไม่รู้ผิดไม่รู้ "ความรู้แคบฯในมหาวิทยาลัย"
--- มันก็ไม่แตกต่างกับสุนัขตัวหนึ่งที่คุ้ยถังขยะเพื่อประทังชีวิตของมันก็เท่านั้นเองครับ



dgv_01

dgv_02

Code (VB.NET)
01.Imports System.Windows.Forms
02.Public Class myTextBoxColumn : Inherits System.Windows.Forms.DataGridViewColumn
03.    Private mAllowDecimal As Boolean
04.    Private mAllowMinus As Boolean
05.    Private mAllowDateSep As Boolean
06.    Private mAllowInputType As String
07.    Private mMaxInputlength As Integer
08.    Private mCelltemplate As myTextBoxCell
09. 
10.#Region "Properties"
11.    Public Property AllowInputType As String
12.        Get
13.            Return mAllowInputType
14.        End Get
15.        Set(value As String)
16.            mAllowInputType = value
17.            mCelltemplate.AllowInputType = value
18.        End Set
19.    End Property
20. 
21.    Public Property AllowDecimal() As Boolean
22.        Get
23.            Return mAllowDecimal
24.        End Get
25.        Set(ByVal value As Boolean)
26.            mAllowDecimal = value
27.            mCelltemplate.AllowDecimal = value
28.        End Set
29.    End Property
30. 
31.    Public Property AllowMinus() As Boolean
32.        Get
33.            Return mAllowMinus
34.        End Get
35.        Set(ByVal value As Boolean)
36.            mAllowMinus = value
37.            mCelltemplate.AllowMinus = value
38.        End Set
39.    End Property
40. 
41.    Public Property AllowDateSep() As Boolean
42.        Get
43.            Return mAllowDateSep
44.        End Get
45.        Set(ByVal value As Boolean)
46.            mAllowDateSep = value
47.            mCelltemplate.AllowDateSep = value
48.        End Set
49.    End Property
50. 
51.    Public Property MaxInputLength() As Integer
52.        Get
53.            Return mMaxInputlength
54.        End Get
55.        Set(ByVal value As Integer)
56.            mMaxInputlength = value
57.            mCelltemplate.MaxInputLength = value
58.        End Set
59.    End Property
60.#End Region
61. 
62.    Public Sub New()
63.        MyBase.New(New myTextBoxCell)
64.        mCelltemplate = MyBase.CellTemplate
65.    End Sub
66.    Public Sub New(ByVal dec As Boolean, ByVal min As Boolean, ByVal sep As Boolean, ByVal len As Integer, ByVal inputType As String)
67.        MyBase.New(New myTextBoxCell(dec, min, sep, len, inputType))
68.        mCelltemplate = MyBase.CellTemplate
69.        Me.mAllowDecimal = dec
70.        Me.mAllowMinus = min
71.        Me.mAllowDateSep = sep
72.        Me.mMaxInputlength = len
73.        Me.mAllowInputType = inputType
74.    End Sub
75.    Public Overrides Property CellTemplate() As DataGridViewCell
76.        Get
77.            Return MyBase.CellTemplate
78.        End Get
79.        Set(ByVal value As DataGridViewCell)
80.            MyBase.CellTemplate = value
81.        End Set
82.    End Property
83. 
84.    ''' <summary>
85.    ''' Fixed Bug Design time. lose value
86.    ''' </summary>
87.    ''' <returns></returns>
88.    ''' <remarks></remarks>
89.    Public Overrides Function Clone() As Object
90.        Dim myClone As myTextBoxColumn = CType(MyBase.Clone, myTextBoxColumn)
91.        myClone.AllowDecimal = AllowDecimal
92.        myClone.AllowMinus = AllowMinus
93.        myClone.AllowDateSep = AllowDateSep
94.        myClone.MaxInputLength = MaxInputLength
95.        myClone.AllowInputType = AllowInputType
96.        Return myClone
97.    End Function
98.End Class



Code (VB.NET)
001.Imports System.Windows.Forms
002.Public Class myTextBoxEditingControl : Inherits DataGridViewTextBoxEditingControl
003.    Private Const mDec As Char = "."
004.    Private Const mMinus As Char = "-"c
005.    Private Const mDateSep As Char = "/"c
006.    Private mAllowDecimal As Boolean
007.    Private mAllowMinus As Boolean
008.    Private mAllowDateSep As Boolean
009.    Private mMaxInputlength As Integer
010.    Private mAllowInputType As String
011. 
012.#Region "Properties"
013.    Public Property AllowInputType() As String
014.        Get
015.            Return mAllowInputType
016.        End Get
017.        Set(ByVal value As String)
018.            mAllowInputType = value
019.        End Set
020.    End Property
021.    Public Property AllowDecimal() As Boolean
022.        Get
023.            Return mAllowDecimal
024.        End Get
025.        Set(ByVal value As Boolean)
026.            mAllowDecimal = value
027.        End Set
028.    End Property
029. 
030.    Public Property AllowMinus() As Boolean
031.        Get
032.            Return mAllowMinus
033.        End Get
034.        Set(ByVal value As Boolean)
035.            mAllowMinus = value
036.        End Set
037.    End Property
038. 
039.    Public Property AllowDateSep() As Boolean
040.        Get
041.            Return mAllowDateSep
042.        End Get
043.        Set(ByVal value As Boolean)
044.            mAllowDateSep = value
045.        End Set
046.    End Property
047. 
048.    Public Property MaxInputLength() As Integer
049.        Get
050.            Return mMaxInputlength
051.        End Get
052.        Set(ByVal value As Integer)
053.            mMaxInputlength = value
054.        End Set
055.    End Property
056.#End Region
057. 
058.    Public Sub New()
059.        MyBase.New()
060.    End Sub
061.    Public Sub New(ByVal dec As Boolean, ByVal min As Boolean, ByVal sla As Boolean, ByVal len As Integer, ByVal inputType As String)
062.        MyBase.New()
063.        mAllowDecimal = dec
064.        mAllowMinus = min
065.        mAllowDateSep = sla
066.        mMaxInputlength = len
067.        mAllowInputType = inputType
068.    End Sub
069. 
070.    Protected Overrides Sub OnKeyPress(ByVal e As System.Windows.Forms.KeyPressEventArgs)
071.        Select Case AllowInputType.ToLower()
072.            Case "integer"
073.                If e.KeyChar < "0" Or e.KeyChar > "9" Then
074.                    If AscW(e.KeyChar) = Keys.Back Then    'Backspace
075.                        e.Handled = False
076.                    Else
077.                        e.Handled = True
078.                    End If
079.                Else
080.                    MyBase.OnKeyPress(e)
081.                End If
082.            Case "double"
083.                If e.KeyChar < "0" Or e.KeyChar > "9" Then
084.                    If AscW(e.KeyChar) = Keys.Back Then
085.                        e.Handled = False
086.                    Else
087.                        If e.KeyChar = "." And MyBase.Text.Contains(".") = False Then
088.                            e.Handled = False
089.                        ElseIf e.KeyChar = "-" And MyBase.Text.Contains("-") = False Then
090.                            e.Handled = False
091.                        Else
092.                            e.Handled = True
093.                        End If
094.                    End If
095.                Else
096.                    MyBase.OnKeyPress(e)
097.                End If
098.        End Select
099.    End Sub
100.    Protected Overrides Sub OnKeyDown(ByVal e As System.Windows.Forms.KeyEventArgs)
101.        If Me.Text.Length >= mMaxInputlength Then
102.            e.Handled = True
103.        Else
104.            MyBase.OnKeyDown(e)
105.        End If
106.    End Sub
107.End Class


Code (VB.NET)
001.Imports System.Windows.Forms
002.Public Class myTextBoxEditingControl : Inherits DataGridViewTextBoxEditingControl
003.    Private Const mDec As Char = "."
004.    Private Const mMinus As Char = "-"c
005.    Private Const mDateSep As Char = "/"c
006.    Private mAllowDecimal As Boolean
007.    Private mAllowMinus As Boolean
008.    Private mAllowDateSep As Boolean
009.    Private mMaxInputlength As Integer
010.    Private mAllowInputType As String
011. 
012.#Region "Properties"
013.    Public Property AllowInputType() As String
014.        Get
015.            Return mAllowInputType
016.        End Get
017.        Set(ByVal value As String)
018.            mAllowInputType = value
019.        End Set
020.    End Property
021.    Public Property AllowDecimal() As Boolean
022.        Get
023.            Return mAllowDecimal
024.        End Get
025.        Set(ByVal value As Boolean)
026.            mAllowDecimal = value
027.        End Set
028.    End Property
029. 
030.    Public Property AllowMinus() As Boolean
031.        Get
032.            Return mAllowMinus
033.        End Get
034.        Set(ByVal value As Boolean)
035.            mAllowMinus = value
036.        End Set
037.    End Property
038. 
039.    Public Property AllowDateSep() As Boolean
040.        Get
041.            Return mAllowDateSep
042.        End Get
043.        Set(ByVal value As Boolean)
044.            mAllowDateSep = value
045.        End Set
046.    End Property
047. 
048.    Public Property MaxInputLength() As Integer
049.        Get
050.            Return mMaxInputlength
051.        End Get
052.        Set(ByVal value As Integer)
053.            mMaxInputlength = value
054.        End Set
055.    End Property
056.#End Region
057. 
058.    Public Sub New()
059.        MyBase.New()
060.    End Sub
061.    Public Sub New(ByVal dec As Boolean, ByVal min As Boolean, ByVal sla As Boolean, ByVal len As Integer, ByVal inputType As String)
062.        MyBase.New()
063.        mAllowDecimal = dec
064.        mAllowMinus = min
065.        mAllowDateSep = sla
066.        mMaxInputlength = len
067.        mAllowInputType = inputType
068.    End Sub
069. 
070.    Protected Overrides Sub OnKeyPress(ByVal e As System.Windows.Forms.KeyPressEventArgs)
071.        'If e.KeyChar < "0"c OrElse e.KeyChar > "9"c Then
072.        '    If e.KeyChar <> Convert.ToChar(System.Windows.Forms.Keys.Back) Then
073.        '        If mAllowDecimal AndAlso e.KeyChar = mDec _
074.        '          OrElse mAllowMinus AndAlso e.KeyChar = mMinus _
075.        '          OrElse mAllowDateSep AndAlso e.KeyChar = mDateSep Then
076.        '            MyBase.OnKeyPress(e)
077.        '        Else
078.        '            e.Handled = True
079.        '        End If
080.        '    Else
081.        '        MyBase.OnKeyPress(e)
082.        '    End If
083.        'Else
084.        '    MyBase.OnKeyPress(e)
085.        'End If
086.        Select Case AllowInputType.ToLower()
087.            Case "integer"
088.                If e.KeyChar < "0" Or e.KeyChar > "9" Then
089.                    If AscW(e.KeyChar) = Keys.Back Then    'Backspace
090.                        e.Handled = False
091.                    Else
092.                        e.Handled = True
093.                    End If
094.                Else
095.                    MyBase.OnKeyPress(e)
096.                End If
097.            Case "double"
098.                If e.KeyChar < "0" Or e.KeyChar > "9" Then
099.                    If AscW(e.KeyChar) = Keys.Back Then
100.                        e.Handled = False
101.                    Else
102.                        If e.KeyChar = "." And MyBase.Text.Contains(".") = False Then
103.                            e.Handled = False
104.                        ElseIf e.KeyChar = "-" And MyBase.Text.Contains("-") = False Then
105.                            e.Handled = False
106.                        Else
107.                            e.Handled = True
108.                        End If
109.                    End If
110.                Else
111.                    MyBase.OnKeyPress(e)
112.                End If
113.        End Select
114.    End Sub
115.    Protected Overrides Sub OnKeyDown(ByVal e As System.Windows.Forms.KeyEventArgs)
116.        If Me.Text.Length >= mMaxInputlength Then
117.            e.Handled = True
118.        Else
119.            MyBase.OnKeyDown(e)
120.        End If
121.    End Sub
122.End Class

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-07-11 08:04:44 By : หน้าฮี
 

 

No. 16

Guest


จาก #NO15 พึ่งเขียนเมื่อเช้านี้ (หามาจากเวปไซต์ของฝรั่งเขา)
--- นี่มันก็ไม่ได้ให้มานะ (แถม BUG ตัวเบ่อเร่อ)
Code (VB.NET)
01.''' <summary>
02.''' Fixed Bug Design time. lose value
03.''' </summary>
04.''' <returns></returns>
05.''' <remarks></remarks>
06.Public Overrides Function Clone() As Object
07.    Dim myClone As myTextBoxColumn = CType(MyBase.Clone, myTextBoxColumn)
08.    myClone.AllowDecimal = AllowDecimal
09.    myClone.AllowMinus = AllowMinus
10.    myClone.AllowDateSep = AllowDateSep
11.    myClone.MaxInputLength = MaxInputLength
12.    myClone.AllowInputType = AllowInputType
13.    Return myClone
14.End Function



ผมยังทำไม่เสร็จ แต่ให้รุ่นน้องเอาไปใช้งานจริง (Design Screen)
--- จะเพิ่มเติม/แก้ไข ค่อยทำในภายหลัง ก็ว่ากันไป


คุณลองพิจารณาดู Screen Design

dgv_03

แบบนี้ผมก็เขียนโปรแกรมตายห่ากันพอดี (หลายร้อยหน้าจอ)
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-07-11 08:22:38 By : หน้าฮี
 

 

No. 17



โพสกระทู้ ( 181 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

ยอมรับว่า "ไม่ธรรมดา" จริง ๆ เลยครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-07-11 13:03:02 By : noon
 

 

No. 18



โพสกระทู้ ( 181 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 13 เขียนโดย : หน้าฮี เมื่อวันที่ 2016-07-08 19:57:48
รายละเอียดของการตอบ ::
..........วัตถุประสงค์ของผมก็คือ 1 โปรแกรมเมอร์ มันต้องเท่ากับ 10 โปรแกรมเมอร์



ข้อนี้แหละครับ ที่ผมถึงได้บอกว่า คุณ "หน้าฮี" นั้น ไม่ธรรมดา จริง ๆ และข้อนี้แหละที่ทำให้ผมเอาไปประยุกต์ให้ผมแก้ปัญหาได้
ขอบคุณอีกครั้งครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-07-11 14:53:29 By : noon
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : การเขียนโปรแกรมที่มี User ใช้ หลาย ๆ คน นั้น อยากทราบแนวทางในการเขียนครับว่าควรคำนึงถึงอะไรบ้างครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)





ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2025 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่