Kenjiro Aikawa Ответов: 3

Чтение текстового файла и отображение в datagridview.


Привет,

Я разрабатываю небольшое приложение, используя VB.NET в компании, с которой я сейчас работаю. Я уже сделал просмотр и чтение всех строк в текстовом файле, но проблема может заключаться в отображении определенного содержимого в datagridview.

У меня есть 2 столбца datagrid с именем BL No. и No. пакетов.

Содержание и формат текстового файла примерно таковы:

BL101=SM1110
BL202=20
BL303=MANILA
BL101=SM1120
BL202=50
BL303=CEBU
ETC....


Теперь, когда я нажимаю кнопку загрузки приложения may, все значение BL101 будет отображаться в столбце BL No., А все значение BL202 будет отображаться в столбце No. of Packages, как это.

BL No.                  No. of Package
SM1110                       20
SM1120                       50


Я много раз пробовал, но, к сожалению, все еще не могу получить то, что хочу, поэтому, пожалуйста, помогите мне.

С нетерпением жду вашего быстрого ответа и заранее благодарю вас.

Что я уже пробовал:

Private Sub btn_load_Click(sender As Object, e As EventArgs) Handles btn_load.Click
       Dim lines = (From line In IO.File.ReadAllLines(txt_edifile.Text)
                    Select line.Split(CChar(vbTab))).ToArray
       For x As Integer = 0 To lines(0).GetUpperBound(0)
           DataGridView1.Columns.Add(lines(0)(x), lines(0)(x))
       Next
       For x As Integer = 0 To lines.GetUpperBound(0)
           DataGridView1.Rows.Add(lines(x))
       Next

   End Sub

3 Ответов

Рейтинг:
2

Richard MacCutchan

Вам нужна коллекция пар строк, смотрите Класс Pair (System.Web.UI)[^]. Создавайте новую пару каждый раз, когда вы получаете BL101 запишите и добавьте значение. Когда вы получите соответствующее BL202 запишите, затем добавьте его значение к текущей паре и добавьте эту пару в список. После обработки всех данных вы можете использовать список в качестве источника привязки для своей таблицы данных.


Рейтинг:
2

Maciej Los

Вы должны работать с данными, а не с их строковым представлением!!!- Это называется ... ООП[^].

Я бы предложил создать класс:

Public Class MyData
	Private sName As String = ""
	Private iCount As Integer = 0
	Private sDescription As String = ""
	
	Public Sub New(ByVal portion As String())
		sName = portion(0).Split("=")(1)
		iCount = Int32.Parse(portion(1).Split("=")(1))
		sDescription = portion(2).Split("=")(1)
	End Sub
	
	Public Property Name As String
		Get
			Return sName
		End Get
		Set(value As String)
			sName = value
		End Set
	End Property

	Public Property Count As Integer
		Get
			Return iCount
		End Get
		Set(value As Integer)
			iCount = value
		End Set
	End Property
	
	Public Property Description As String
		Get
			Return sDescription
		End Get
		Set(value As String)
			sDescription = value
		End Set
	End Property

End Class


Затем...
Dim lines As String() = File.ReadAllLines("FullFileName.txt")
Dim i As Integer= 0
Dim k As Integer = lines.Count()
Dim data As List(Of MyData) = New List(Of MyData)

Do While i < k
    data.Add(New MyData(lines.Skip(i).Take(3).ToArray()))
    i+=3
Loop
    'HERE!
    DataGridView1.DataSource = data


Результат:
Name   Count Description
SM1110 20    MANILA 
SM1120 50    CEBU 


Для получения более подробной информации, пожалуйста, смотрите:
Создание классов в Visual Basic .NET[^]
Практическое руководство.Свойство DataSource (Системы.Окна.Формы)[^]


Рейтинг:
0

OriginalGriff

Вам нужно более внимательно посмотреть на ваши данные и на то, как они структурированы: вы не можете разделить их на вкладке, когда ваши данные разделены символом"=", и вы не принимаете во внимание, что строка ваших данных разделена на три строки:

BL101=SM1110
BL202=20
BL303=MANILA

BL101=SM1120
BL202=50
BL303=CEBU
Я бы использовал Split, чтобы разбить каждую строку на'=', а затем использовал переключатель, чтобы решить, какие это данные: BL101, BL202 или BL303. Затем сохраните информацию для первых двух и используйте третий, чтобы добавить оба элемента в DGV в виде строки.