VB.Net DataGridView ForEach问题

时间:2018-09-12 00:46:55

标签: sql vb.net datagridview

我正在开发一个小型VB.net应用程序,该应用程序将发送有关过期帐户的SMS消息。该应用程序具有一个数据网格视图,可从本地SQL服务器提取数据。

我要启用的功能是可以选择DGV上的多行,并且当我单击表单上的按钮时,让它对每一行执行相同的操作-在这种情况下,它应该获得请求ID,未付金额和电话号码,然后根据该信息发送消息。

例如,如果我选择2行,然后单击按钮,它将发送2条消息,但是它们都具有相同的请求ID和未偿还的金额,而对于我来说,我一生都无法理解为什么。

我尝试在行上使用复选框,但得到相同的结果。如果您参考我的屏幕截图,则两条消息的数据均来自最左列的带有向右箭头的行。

任何帮助将不胜感激!

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnSend.Click
    For Each dr As DataGridViewRow In dgResults.SelectedRows
        Dim ref As String = dgResults.SelectedRows(0).Cells(0).Value.ToString
        Dim amt As String = dgResults.SelectedRows(0).Cells(5).Value.ToString
        Dim amtaud As Decimal = amt
        Dim charge As String = amtaud.ToString("C")
        Dim number As String = dgResults.SelectedRows(0).Cells(3).Value.ToString

        Dim baseurl As String
        Dim webclient1 As New WebClient()

        baseurl = "http://api.smsbroadcast.com.au/api-adv.php"

        webclient1.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)")
        webclient1.QueryString.Add("username", "user")
        webclient1.QueryString.Add("password", "pass")
        webclient1.QueryString.Add("to", number)
        webclient1.QueryString.Add("from", "sender")
        If rbDeclined.Checked = True Then webclient1.QueryString.Add("message", "Your account is now due. NutriPATH has received your sample however your credit card details provided has resulted in a declined or invalid card. Please call NutriPATH on 1300688522 to pay for your test to avoid delays in results or alternatively you may pay via our website https://www.bpoint.com.au/payments/nutripath Reference ID " + ref + " Amount Due " + charge)
        If rbOverdue.Checked = True Then webclient1.QueryString.Add("message", "This is a courtesy reminder that your account is now overdue. Please call NutriPATH on 1300688522 to pay for your test to avoid delays in results or alternatively you may pay via our website https://www.bpoint.com.au/payments/nutripathReference ID " + ref + " Amount Due " + charge)
        If rbReceived.Checked = True Then webclient1.QueryString.Add("message", "Your sample has been received and is ready for testing. Please call NutriPATH on 1300688522 to pay for your test to avoid delays or alternatively you may pay via our online payment facility: https://www.bpoint.com.au/payments/nutripathYour Reference ID is " + ref + " Amount Outstanding is " + charge)
        webclient1.QueryString.Add("maxsplit", "3")

        Dim myStream As Stream = webclient1.OpenRead(baseurl)
        Dim sr As New StreamReader(myStream)
        MsgBox(sr.ReadToEnd(), MsgBoxStyle.OkOnly)
             myStream.Close()

    Next
End Sub

Screenshot

1 个答案:

答案 0 :(得分:1)

问题在这里:

export function forkJoin<T>(sources: [ObservableInput<T>]): Observable<T[]>;
export function forkJoin<T, T2>(sources: [ObservableInput<T>, ObservableInput<T2>]): Observable<[T, T2]>;
export function forkJoin<T, T2, T3>(sources: [ObservableInput<T>, ObservableInput<T2>, ObservableInput<T3>]): Observable<[T, T2, T3]>;
export function forkJoin<T, T2, T3, T4>(sources: [ObservableInput<T>, ObservableInput<T2>, ObservableInput<T3>, ObservableInput<T4>]): Observable<[T, T2, T3, T4]>;
export function forkJoin<T, T2, T3, T4, T5>(sources: [ObservableInput<T>, ObservableInput<T2>, ObservableInput<T3>, ObservableInput<T4>, ObservableInput<T5>]): Observable<[T, T2, T3, T4, T5]>;
export function forkJoin<T, T2, T3, T4, T5, T6>(sources: [ObservableInput<T>, ObservableInput<T2>, ObservableInput<T3>, ObservableInput<T4>, ObservableInput<T5>, ObservableInput<T6>]): Observable<[T, T2, T3, T4, T5, T6]>;
export function forkJoin<T>(sources: Array<ObservableInput<T>>): Observable<T[]>;

循环控制变量是For Each dr As DataGridViewRow In dgResults.SelectedRows Dim ref As String = dgResults.SelectedRows(0).Cells(0).Value.ToString Dim amt As String = dgResults.SelectedRows(0).Cells(5).Value.ToString Dim amtaud As Decimal = amt Dim charge As String = amtaud.ToString("C") Dim number As String = dgResults.SelectedRows(0).Cells(3).Value.ToString ,它包含当前行,但是您不用dr而是使用当前行,因此当然每次都会得到相同的数据:使用相同的数据每次都排。更改为此:

dgResults.SelectedRows(0)

那是For Each dr As DataGridViewRow In dgResults.SelectedRows Dim ref As String = dr.Cells(0).Value.ToString Dim amt As String = dr.Cells(5).Value.ToString Dim amtaud As Decimal = amt Dim charge As String = amtaud.ToString("C") Dim number As String = dr.Cells(3).Value.ToString 的循环101。For Each的意义是使用循环控制变量。