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,037

HOME > .NET Framework > Forum > VB.Net ปรึกษาเรื่อง Array และ List



 

VB.Net ปรึกษาเรื่อง Array และ List

 



Topic : 113653



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



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




ผมขอถาม 4 คำถามครับ จาก code ด้านล่าง

1. จาก Code

Public Class VerTest

    Public a As Integer
    Public b As Integer

End Class

Private Function Test() As List(Of VerTest)
    Dim ListTest As List(Of VerTest) = New List(Of VerTest)()
    Dim ListTest1 As List(Of VerTest) = New List(Of VerTest)()
    Dim strSQL As String

    Dim dtAdapter As SqlDataAdapter
    Dim ds = New System.Data.DataSet()

    strSQL = "SELECT "
    strSQL += "* "
    strSQL += "FROM Table1 "

    dtAdapter = New SqlDataAdapter(strSQL, objConn)
    dtAdapter.Fill(ds)
    
    dtAdapter = New SqlDataAdapter(strSQL, objConn)
        dtAdapter.Fill(ds)

        If ds.Tables(0).Rows.Count > 0 Then
            ListTest = New List(Of VerTest)(ds.Tables(0).Rows.Count)
            For i As Integer = 0 To ds.Tables(0).Rows.Count
                Dim VerTest As New VerTest()
                If ListTest.Count <= ds.Tables(0).Rows.Count - 1 Then
                    ListTest.a = ds.Tables(0).Rows(i)(0)
                End If
                ListTest.Add(VerTest)
            Next
        End If
        
        For j As Integer = 0 To ListTest.Count - 1
        Dim VerTest As New VerTest()
        If (ListTest(j).lease_kikan_kbn <> "") Then
                Dim lkk_split() As String = Split(ListTest(j).lease_kikan_kbn, "-")
                Dim a As Integer
                For a = 0 To lkk_split.Length - 1
                    VerTest.b = 1
                Next
            End If
             ListTest1.Add(VerTest)
        Next

        Return ListTest
    End Function


ค่า a มีค่าเป็น

1-2

1-2-3

1-2-3-4

ปัญหามันอยู่ตอนที่ Split ครับ ค่าที่ถูกคือ

Array b(1) - 1
- 1
Array b(2) - 1
- 1
- 1
Array b(3) - 1
- 1
- 1
- 1

แต่ค่าจริงๆมันคือ 0 ครับ และ 0 ออกมาแค่ 3 ด้วย ทั้งๆที่มันควรจะเป็น 9

2. ผมจึงลองเปลี่ยนมาเป็นเป็น Array ดู

Public b(10) As Integer
Public Class VerTest
    Public a As Integer
    

End Class

Private Function Test() As List(Of VerTest)
    Dim ListTest As List(Of VerTest) = New List(Of VerTest)()
    Dim ListTest1 As List(Of VerTest) = New List(Of VerTest)()
    Dim strSQL As String

    Dim dtAdapter As SqlDataAdapter
    Dim ds = New System.Data.DataSet()

    strSQL = "SELECT "
    strSQL += "* "
    strSQL += "FROM Table1 "

    dtAdapter = New SqlDataAdapter(strSQL, objConn)
    dtAdapter.Fill(ds)
    
    dtAdapter = New SqlDataAdapter(strSQL, objConn)
        dtAdapter.Fill(ds)

        If ds.Tables(0).Rows.Count > 0 Then
            ListTest = New List(Of VerTest)(ds.Tables(0).Rows.Count)
            For i As Integer = 0 To ds.Tables(0).Rows.Count
                Dim VerTest As New VerTest()
                If ListTest.Count <= ds.Tables(0).Rows.Count - 1 Then
                    ListTest.a = ds.Tables(0).Rows(i)(0)
                End If
                ListTest.Add(VerTest)
            Next
        End If
        
        For j As Integer = 0 To ListTest.Count - 1
        Dim VerTest As New VerTest()
        If (ListTest(j).lease_kikan_kbn <> "") Then
                Dim lkk_split() As String = Split(ListTest(j).lease_kikan_kbn, "-")
                Dim a As Integer
                For a = 0 To lkk_split.Length - 1
                    b(a) = 1
                Next
            End If
        Next

        Return ListTest
    End Function


ปรากฏว่าค่าที่ได้ถูกต้อง คือ 1 ครับ แต่ ออกมาแค่ 3 ครั้ง ทั้งๆที่จะเป็น 9 ครั้ง

3. ถ้าผมเก็บค่าได้แล้ว เวลาผมจะเรียกใช้ เช่น ให้ b(1) แสดงค่าที่ 2 หรือ b(3) แสดงค่าที่ 4 ต้องทำยังไงครับ (แบบ Array)

4. ถ้าใช้ List ทีนี้ตัวแปรที่ประกาศไว้มันเยอะ ผมจะ Count และ ดึงค่าเฉพาะตัวแปรที่ต้องการ ต้องทำยังไงครับ เช่น

ListTest.b.count > 0 และให้ b(1) แสดงค่าตัวที่ 2 หรือ b(3) แสดงค่าที่ 4 ต้องทำยังไงครับ



Tag : .NET, Ms SQL Server 2008, VB.NET, VS 2012 (.NET 4.x)







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2015-01-07 18:43:33 By : tatalas View : 2414 Reply : 6
 

 

No. 1



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



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

อ่านแล้วงง 555
1. ทำไมประกาศ Public b(10) As Integer ทั้งๆที่ b(a) = 1 น่าจะใช้วิธี redim (แต่ก็ไม่ใช่เรื่องผิดครับ)
2.ทำไมเรียกใช้
dtAdapter = New SqlDataAdapter(strSQL, objConn)
dtAdapter.Fill(ds)

dtAdapter = New SqlDataAdapter(strSQL, objConn)
dtAdapter.Fill(ds)
เรียกครั้งเดียวไม่ได้เหรอครับ?
ค่า a มีค่าเป็น
1-2
1-2-3
1-2-3-4
...
Code (VB.NET)
For j As Integer = 0 To ListTest.Count - 1
Dim VerTest As New VerTest()
If (ListTest(j).lease_kikan_kbn <> "") Then
Dim lkk_split() As String = Split(ListTest(j).lease_kikan_kbn, "-")
Dim a As Integer
For a = 0 To lkk_split.Length - 1
b(a) = 1
Next
End If
Next


จากโค้ดกับข้อมูลดังกล่าว b จะไม่มีการเพิ่มข้อมูล b จะมีการเพิ่มข้อมูลลงไปแค่ 4 ข้อมูล
เพราะมันจะเพิ่มข้อมูลตาม a a = 0 To lkk_split.Length - 1 ซึ่ง ค่าที่มากสุดจะได้จาก 1-2-3-4
ถ้าต้องการเพิ่ม b เรื่อยๆ ต้องประกาศ

Public b(1) As Integer
For a = 0 To lkk_split.Length - 1
b(UBound(b)) = a
ReDim b(UBound(b) + 1) 'เพิ่มเรื่อยๆครับแบบนี้ง่ายกว่าครับไม่ยึดตาม a
Next






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-01-08 09:48:31 By : lamaka.tor
 


 

No. 2



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



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

ผมไม่รู้วัตถุประสงค์ว่าจะเอาไปใช้ทำไร
แต่ก็ลองดูโค๊ดบ้านๆของผมดูครับทำงานง่ายไม่ซับซ้อน

Code (VB.NET)
Public Class VerTest

    Public a As Integer
    Public b As Integer

End Class

Private Function Test() As List(Of VerTest)
        Dim ListTest As List(Of VerTest) = New List(Of VerTest)()
        Dim ds = New System.Data.DataSet()
        Dim dtAdapter As SqlDataAdapter = New SqlDataAdapter("SELECT  *  FROM Table1 ", objConn)
        dtAdapter.Fill(ds)
        If ds.Tables(0).Rows.Count > 0 Then
            For i As Integer = 0 To ds.Tables(0).Rows.Count
                If ListTest.Count <= ds.Tables(0).Rows.Count - 1 Then
                    If (ds.Tables(0).Rows(i)(0) <> "") Then
                        Dim lkk_split() As String = Split(ds.Tables(0).Rows(i)(0), "-")

                        For a As Integer = 0 To lkk_split.Length - 1
                            Dim verTest As New VerTest()
                            verTest.a = 1 'แล้วแต่จะใส่ครับ
                            verTest.b = 2 'แล้วแต่จะใส่ครับ
                            ListTest.Add(verTest)
                        Next
                    End If
                End If
            Next
        End If
        Return ListTest
    End Function


ตัวเก่าต้องเอา db ออกจาก table ไปเก็บใน ListTest แล้วค่อยแยกออกมาลง ListTest 1(ทำงาน 2 รอบ)
แต่ตัวนี้ทำงานรอบเดียวครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-01-08 10:28:01 By : lamaka.tor
 

 

No. 3



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



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


มองไม่ออกว่าเค้าเขียนอะไรเลย
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-01-09 00:08:10 By : deksoke
 


 

No. 4

Guest


1. จาก Code ต่อจากบรรทัดที่ 24.

Code (VB.NET)
    Function Test() As List(Of verTest)
        Dim dtFake As DataTable = ds.Tables(0)
        Return dtFake.AsEnumerable().Select(Function(หอย)
                                                Dim งาม As New verTest() With {.a = หอย.Item(0),
                                                                               .b = 0,
                                                                               .lease_kikan_kbn = หอย.Item(2)
                                                                              }
                                                If Not String.IsNullOrEmpty(งาม.lease_kikan_kbn) Then
                                                    Dim lkk_split() As String = งาม.lease_kikan_kbn.Split({"-"}, StringSplitOptions.RemoveEmptyEntries)
                                                    งาม.b = 1
                                                End If
                                                Return งาม
                                            End Function).ToList()

    End Function

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-01-10 08:53:50 By : หน้าฮี
 


 

No. 5



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



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

ตอบความคิดเห็นที่ : 4 เขียนโดย : หน้าฮี เมื่อวันที่ 2015-01-10 08:53:50
รายละเอียดของการตอบ ::

แหล่มครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-01-10 09:39:49 By : lamaka.tor
 


 

No. 6

Guest



TO @เจ้าของกระทู้
จาก #NO4 และคำถามของคุณ 4 ข้อ ผมให้แนวทางไป 1 ข้อ
ถ้าคุณทำความเข้าใจในข้อที่ 1 ผมก็ยินดีที่จะให้แนวทางคุณในข้อที่ 2-4 (มีข้อแม้ว่าคุณต้องมีความพยายาม)
ผมให้โอกาสคุณซักถามผมได้ ในประเด็นที่คุณสงสัย (แต่ต้องอยู่ในขอบเขต 1-4 ข้อของคุณ)


ปล. คนเราต้องมีความเพียรพยายาม
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-01-18 14:02:21 By : หน้าฮี
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : VB.Net ปรึกษาเรื่อง Array และ List
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ 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 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

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