Vb.net 从列中读取信息

Vb.net 从列中读取信息,vb.net,Vb.net,我将一个数据库链接到我的VB.net表单,我想阅读某个特定列的信息,但找不到任何答案。DataGrid包含有关人员的信息。我想读最后一列,名字是“Call”,我想把这些值存储到一个列表中,这样我就可以通过一个特定的函数循环它们 For Each line As DataGridViewColumn In DataGridView1.Columns If Not line.IsNewColumn Then MessageBox

我将一个数据库链接到我的VB.net表单,我想阅读某个特定列的信息,但找不到任何答案。DataGrid包含有关人员的信息。我想读最后一列,名字是“Call”,我想把这些值存储到一个列表中,这样我就可以通过一个特定的函数循环它们

For Each line As DataGridViewColumn In DataGridView1.Columns
                If Not line.IsNewColumn Then
                    MessageBox.Show(line.Cells(0).Value.ToString & "," & line.Cells(1).Value.ToString)
                End If
            Next
我找到了这个,它看起来有点像我要做的,但我不知道如何更改它或将其放入列表中,所以有什么帮助吗?

试试这个

    Dim colIndex As Integer
    colIndex = 0
    Dim strList As New List(Of String)

    For i As Integer = 0 To DataGridView1.Rows.Count - 1
        strList.Add(DataGridView1.Item(colIndex, i).Value.ToString)
        ListBox1.Items.Add(strList(i))
    Next
Listbox1只是一个测试工具,让我看看它是否有效,它确实有效:)
strList是您想要的列表,colIndex是DGV中“Call”列的索引

另一种方法是这一点,这要感谢Proputix指出了一些重要细节

    Dim strList As New List(Of String)

    For i As Integer = 0 To DataGridView1.Rows.Count - 1
        strList.Add(DataGridView1.Item("Call", i).Value.ToString)
    Next
    MsgBox(strList.count) 'number of items in the list.

我的全部代码如下:我试图从“call”栏中提取数据,为每个人向他们的手机发送电子邮件。还有文本框,所以你可以发送给一个人,而不是整个列表

 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    'TODO: This line of code loads data into the 'ContactsDataSet.VBQuery' table. You can move, or remove it, as needed.
    Me.VBQueryTableAdapter.Fill(Me.ContactsDataSet.VBQuery)
    ' Set the caption bar text of the form.   
    Me.Text = "Texting From Email"
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    Try

        Dim Smtp_Server As New SmtpClient
        Dim e_mail As New MailMessage()
        Dim self As New MailAddress("xxx1@gmail.com")
        Dim strCarriers As New List(Of String)
        Dim colIndex As Integer
        Dim strList As New List(Of String)

        colIndex = 0
        Smtp_Server.UseDefaultCredentials = False
        Smtp_Server.Credentials = New Net.NetworkCredential("yyy@gmail.com", "blank")
        Smtp_Server.Port = 587
        Smtp_Server.EnableSsl = True
        Smtp_Server.Host = "smtp.gmail.com"

        strCarriers.Add("@pm.sprint.com")
        strCarriers.Add("@vtext.com")
        strCarriers.Add("@tmomail.net")
        strCarriers.Add("@txt.att.net")

        If rad1.Checked = True Then

            For i As Integer = 0 To DataGridView1.Rows.Count - 1
                strList.Add(DataGridView1.Item(colIndex, i).Value.ToString)
                'strList.Items.Add(strList(i))
                'strList.Add(DataGridView1.Item("Call", i).Value.ToString)

                For Each line In strList

                    For Each Carrier As String In strCarriers

                        e_mail = New MailMessage()
                        e_mail.From = self
                        e_mail.To.Add("strlist" + "Carrier")
                        e_mail.Subject = txtSubject.Text
                        e_mail.IsBodyHtml = False
                        e_mail.Body = txtMessage.Text
                        Smtp_Server.Send(e_mail)

                    Next Carrier
                Next
            Next
        ElseIf rad1.Checked = False Then

            For Each Carrier As String In strCarriers

                e_mail = New MailMessage()
                e_mail.From = self
                e_mail.To.Add(txtTo.Text + Carrier)
                e_mail.Subject = txtSubject.Text
                e_mail.IsBodyHtml = False
                e_mail.Body = txtMessage.Text
                Smtp_Server.Send(e_mail)

            Next
        End If

        MsgBox("Mail Sent")

    Catch error_t As Exception
        MsgBox(error_t.ToString)

    End Try
End Sub
这也是一个问题:

 For Each Carrier As String In strCarriers
如果收件人是“Ziggy”,它将尝试发送到Ziggy@pm.sprint.com, Ziggy@vtext.com, Ziggy@tmomail.net及Ziggy@txt.att.net. 您需要将承运商与每个人联系起来,以避免这种情况(如果承运商或电子邮件地址不是网格的一部分)。否则,将其分解为
GetCarrier
SendMail
等函数,而不是循环中的循环


…而且你不应该吃掉所有这样的异常

在你的第一个if语句中试试这个

For i As Integer = 0 To DataGridView1.Rows.Count - 1
    strList.Add(DataGridView1.Item("Call", i).Value.ToString)
Next
For Each str In strList
       For Each Carrier In strCarriers
           e_mail = New MailMessage()
           e_mail.From = self
           e_mail.To.Add(str + Carrier)
           e_mail.Subject = txtSubject.Text
           e_mail.IsBodyHtml = False
           e_mail.Body = txtMessage.Text
           Smtp_Server.Send(e_mail)
       Next
   Next


colIndex可以是
列。Count-1
,否?甚至==
Columns(“Call”)。Index
但是
colIndex=最后一列
可能不起作用,那是实际项目的哪一部分?斯特利斯特?我需要声明ListBox1还是删除它?因为它给了我一个警告:Listbox1只是一个测试工具place@plutonix是的,可能是,但我想说的是“调用”列的“索引”他将从哪里获得数据。@兰德斯:是的,你可以摆脱listbox1。你没有设置colIndex…而且你有一个奇怪的嵌套循环。你是否尝试过将
e\u mail.To.Add(“strlist”+“Carrier”)
更改为
e\u mail.To.Add(line+Carrier)
???是的,我正在尝试向通话中的每个项目发送4封电子邮件,colIndex设置在Smtp\u服务器的正上方,除非我做得不对colIndex=0是第一列,而不是最后一列,该列中有什么内容?“Call”是列的名称还是其中的文本?循环有问题。。你应该在使用它之前先得到这个列表。重点是发送给4个不同的运营商,每个运营商覆盖所有的基础。最终,我会放弃这个,但是我得到一个空异常,它使用If-DataGridView1.Item(colIndex,i)。Value.ToString=“Call”然后从上面开始:是最后一次列调用的名称,还是你在寻找类似文本的内容“调用”在某个列中???我正在尝试将“调用”列中的项目放入一个列表中,我可以循环浏览并发送消息,现在我感觉像一个傻瓜,有了所有这些帮助,它仍然不起作用。很抱歉,给您带来不便如果DGB绑定到一个查询,那么这意味着有一个名为“调用”的DB列”“是吗?好的,那该列是什么?该列包含一个电话号码,但它是一个结合了其他两列名称(区号和号码)的查询,非常简单,是的,列名是CallLine 43=strList.Add(DataGridView1.Item(colIndex,i).Value.ToString)抛出一个空异常,idk如何处理ituseDataGridView1.Item(“Call”,i).Value.to字符串我们不知道有多少列,也不知道您用于index@Landers_15,如果您将鼠标放在变量和对象上,VS将告诉您这些变量和对象是什么/它们的值,除了@puropoix的注释外,什么都不是是例外的原因,您还应该学习使用调试和断点,您知道,这类工具非常强大。:)
For i As Integer = 0 To DataGridView1.Rows.Count - 1
    strList.Add(DataGridView1.Item("Call", i).Value.ToString)
Next
For Each str In strList
       For Each Carrier In strCarriers
           e_mail = New MailMessage()
           e_mail.From = self
           e_mail.To.Add(str + Carrier)
           e_mail.Subject = txtSubject.Text
           e_mail.IsBodyHtml = False
           e_mail.Body = txtMessage.Text
           Smtp_Server.Send(e_mail)
       Next
   Next