Представление таблицы данных отображает только одну букву в ячейке - PullRequest
0 голосов
/ 02 апреля 2020

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

Dim col As New DataGridViewTextBoxColumn 'adding the colunm player to the data grid view
    col.HeaderText = "Player"
    DataGridView_displayfigures.Columns.Add(col)
    DataGridView_displayfigures.Rows.Add(New String({AssignRuns.batsman1A}))

Это структура

Structure AssignRuns
    Shared batsman1A As String = PlayerSelection.player1_cmbox.Text
    Shared batsman1Aruns As Integer

Я не понимаю этого. любая помощь будет оценена

Ответы [ 2 ]

2 голосов
/ 02 апреля 2020

Это прекрасный пример того, почему вы должны иметь Option Strict On. Здесь вы используете конструктор String:

DataGridView_displayfigures.Rows.Add(New String({AssignRuns.batsman1A}))

Но это определенно не то, что вы собираетесь. Вы передаете массив String в качестве аргумента, но нет конструктора String, который имеет параметр типа String array. С Option Strict On это приведет к синтаксической ошибке, и ваш код не сможет скомпилироваться, пока вы не исправите ее.

С Option Strict Off компилятор ищет конструктор, который достаточно похож, чтобы он мог массировать ваш код работать. В этом случае он использует тот, который имеет параметр типа Char массив. Этот конструктор создает String, содержащий все значения Char из массива.

В вашем случае каждый String в вашем массиве преобразуется в Char, просто беря первый символ в каждом String. Ваш массив содержит только один String, поэтому в конструктор передается только один Char, поэтому создаваемое String содержит только один символ.

Кроме того, перегрузка этого не происходит Add метод, который принимает один String либо. Однако есть тот, который принимает массив Object, поэтому вы должны передать его:

DataGridView_displayfigures.Rows.Add(New Object() {AssignRuns.batsman1A})

Это также сработает:

DataGridView_displayfigures.Rows.Add({AssignRuns.batsman1A})

Технически передающий String массив для метода Add, но это разрешено, потому что это расширяющее преобразование, т.е. никакие данные не могут быть потеряны. Преобразование String в Char является сужающим преобразованием, поскольку данные могут быть потеряны, как это было в исходном коде. Option Strict On допускает неявные расширяющие преобразования, но не неявные сужающие преобразования.

РЕДАКТИРОВАТЬ:

На самом деле, думая об этом последнем фрагменте кода и о том, что вы можете передать массив String непосредственно Add заставляет меня думать, что, возможно, ваша ошибка состояла в том, что вы просто неправильно поместили одну закрывающую скобку, потому что вместо этого:

DataGridView_displayfigures.Rows.Add(New String({AssignRuns.batsman1A}))

вы могли бы иметь это:

DataGridView_displayfigures.Rows.Add(New String() {AssignRuns.batsman1A})

Перемещение этого закрытия Скобки означают, что вы обозначаете массив String и затем инициализируете его, а не передаете литеральный массив String в качестве аргумента конструктору.

0 голосов
/ 06 апреля 2020

Вы можете попробовать этот способ добавить строки и столбцы в элемент управления DataGridView.

Public Class Form1

    Structure AssignRuns
        Shared batsman1A As String = "player1"
        Shared batsman1Aruns As Integer = 3
    End Structure

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        'definite  columncount and then add columns of datagridview1
        DataGridView1.ColumnCount = AssignRuns.batsman1Aruns
        DataGridView1.Columns(0).HeaderText = "Player"

        'add rows of datagridview1
        Dim row As String() = {AssignRuns.batsman1A} 'You can try {AssignRuns.batsman1A,AssignRuns.batsman1A,AssignRuns.batsman1A}
        DataGridView1.Rows.Add(row)

    End Sub
End Class

enter image description here

...