作者mdjason (左手)
看板Visual_Basic
标题[.NET] 回圈应用的疑问
时间Thu Sep 22 12:57:45 2011
我想写一个回圈 希望可以每6笔就传进一次资料库
传进资料库之後把Datagridview的那6笔删掉 等待新的6笔进来
下面是我自己写的程式码 一直出错 请大大们指教
Dim xrow As DataRow = table.NewRow
Dim intI As Integer = 1
For intI = 1 To 6
xrow.Item(0) = RemoteIpEndPoint.Address.ToString
xrow.Item(1) = txtport.Text
xrow.Item(2) = Encoding.ASCII.GetString(receiveBytes)
table.Rows.Add(xrow)
Next intI
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.121.150.186
1F:推 serhgrt:把Dim xrow as DataRow 放进for 里面? 09/22 13:43
2F:→ mdjason:不行耶 不知道为啥 都会跳错误 09/22 13:52
3F:推 serhgrt:错误讯息方便写上来吗? 因为也不知道出了啥错误? 09/22 16:07
4F:→ mdjason:RUN起来是没有错误 可是直接执行程式的时候 会跳错误 09/22 16:10
5F:→ mdjason:我刚又自己试了一次 变成写入一次 他帮我写了六次进去... 09/22 16:12
6F:推 serhgrt:这段程式不是要写入6笔? 错误还在吗? 可以叙述错误一下吗? 09/22 16:19
7F:→ mdjason:我现在变成一次写进6条 然後写第二次 变成12条了 09/22 16:38
8F:→ mdjason:我自己也不知道错误在哪耶 因为他没有说明错误的点@@Y 09/22 16:41
9F:推 serhgrt:可以po比较完整点的程式码吗? 上面那段只能知道写入6笔@_@ 09/22 16:43
Imports System.IO
Imports System.Net.Sockets.Socket
Imports System
Imports System.Text
Imports System.Net
Imports System.Net.Sockets
Imports Microsoft.VisualBasic
Imports System.Runtime.InteropServices
Public Class Form1
Inherits System.Windows.Forms.Form
Public receivingUdpClient As UdpClient
Public RemoteIpEndPoint As New
System.Net.IPEndPoint(System.Net.IPAddress.Any, 0)
Public ThreadReceive As System.Threading.Thread
Dim port As Integer
Private table As New DataTable
Public Sub ReceiveMessages()
Dim receiveBytes As [Byte]() =
receivingUdpClient.Receive(RemoteIpEndPoint)
txtip.Text = RemoteIpEndPoint.Address.ToString
Dim BitDet As BitArray
BitDet = New BitArray(receiveBytes)
Dim strReturnData As String =
System.Text.Encoding.Unicode.GetString(receiveBytes)
Dim intI As Integer = 1
For intI = 1 To 6
Dim xrow As DataRow = table.NewRow
xrow.Item(0) = RemoteIpEndPoint.Address.ToString
xrow.Item(1) = txtport.Text
xrow.Item(2) = Encoding.ASCII.GetString(receiveBytes)
table.Rows.Add(xrow)
Next intI
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
port = txtport.Text
receivingUdpClient = New System.Net.Sockets.UdpClient(port)
ThreadReceive = New System.Threading.Thread(AddressOf ReceiveMessages)
ThreadReceive.Start()
txtport.Enabled = True
Button2.Enabled = True
Button1.Enabled = False
DataGridView1.ReadOnly = True
txtport.ReadOnly = True
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
ThreadReceive.Abort()
receivingUdpClient.Close()
Button2.Enabled = False
Button1.Enabled = True
txtip.Text = ""
DataGridView1.Enabled = False
txtport.ReadOnly = False
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
table.Columns.Add("IP")
table.Columns.Add("PORT")
table.Columns.Add("MSG")
DataGridView1.DataSource = table
DataGridView1.Columns(0).Width = 100
DataGridView1.Columns(1).Width = 70
DataGridView1.Columns(2).Width = 230
End Sub
End Class
※ 编辑: mdjason 来自: 140.121.150.186 (09/22 16:45)
10F:→ mdjason:我忘记我能编辑了 一直用推文 @@ 09/22 16:45
11F:推 serhgrt:你的DataTable是全域的 会变成累加,移至写入6笔那边吧! 09/22 16:52
12F:→ mdjason:好的 我再试试看 09/22 16:53
13F:→ mdjason:我移入Public Sub ReceiveMessages()那边 他不给我宣告耶 09/22 16:55
Public Sub ReceiveMessages()
Dim receiveBytes As [Byte]() =
receivingUdpClient.Receive(RemoteIpEndPoint)
txtip.Text = RemoteIpEndPoint.Address.ToString
Dim BitDet As BitArray
BitDet = New BitArray(receiveBytes)
Dim strReturnData As String =
System.Text.Encoding.Unicode.GetString(receiveBytes)
***Dim table As New DataTable***
Dim intI As Integer = 1
For intI = 1 To 6
Dim xrow As DataRow = table.NewRow
xrow.Item(0) = RemoteIpEndPoint.Address.ToString
xrow.Item(1) = txtport.Text
xrow.Item(2) = Encoding.ASCII.GetString(receiveBytes)
table.Rows.Add(xrow)
Next intI
End Sub
我改成*** ***那样 可是还是一次写入6笔一样的数据耶
※ 编辑: mdjason 来自: 140.121.150.186 (09/22 16:58)
14F:推 serhgrt:改成Dim table As New Datatable 放入? 09/22 16:57
15F:推 serhgrt:把抓封包资料的那几段程式摆进去for,让他重新取封包资料 09/22 17:15
16F:→ mdjason:非常感谢大大的帮忙 只是还是一次写进6笔相同资料 头疼>< 09/22 17:21
17F:推 serhgrt:你可能要查一下封包资料是否都没变或是没再重新抓取? 09/22 17:27
18F:→ mdjason:应该是没重新抓取 我每次都要Stop→Start才能再收一次 09/22 17:33
19F:→ mathlinka:先将 DataTable 设为全域,ReceiveMessages 里面不要写 09/22 19:06
20F:→ mathlinka:回圈,用 if DataTable.Rows.Count = 6 Then 09/22 19:07
21F:→ mathlinka:写入资料库 , 清空 DataTable 09/22 19:07
22F:→ mdjason:嗯 感谢楼上大大 还在实验室练习@@ 09/22 20:00