2014-03-06 4 views
0

Пожалуйста, смотрите код ниже:System.NullReferenceException привязка к DataGridView

Private Sub DataGridViewBorrowedBooks_SelectionChanged(ByVal sender As Object, ByVal e As EventArgs) Handles DataGridViewBorrowedBooks.SelectionChanged 
     'DataGridViewBookDetails.DataSource = Nothing 
     If DataGridViewBorrowedBooks.SelectedRows.Count = 0 Then 
      Return 
     End If 

     Dim row = DataGridViewBorrowedBooks.SelectedRows(0) 
     If row Is Nothing Then 
      Return 
     End If 

     Dim isbn As Decimal = Integer.Parse(row.Cells("isbn").Value.ToString()) 

     ' Get member record from treeview control. 
     Dim member = TryCast(TreeViewMembers.SelectedNode.Tag, MemberModel) 

     ' Check for root node. It does not have a member record 
     If member Is Nothing Then 
      Return 
     End If 

     ' Locate order record 
     For Each loan In member.Loan 
      If loan.ISBN = isbn Then 
       DataGridViewBookDetails.DataSource = loan.Books 
       DataGridViewBookDetails.Columns("ISBN").Visible = False 
       DataGridViewBookDetails.Columns("Title").DefaultCellStyle.Format = "C" 
       DataGridViewBookDetails.Columns("Author").DefaultCellStyle.Format = "C" 
       DataGridViewBookDetails.Columns("Price").DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight 
       Return 
      End If 
     Next loan 
    End Sub 

Исключение я получаю: System.NullReferenceException на следующей строке: 'DataGridViewBookDetails.Columns("ISBN").Visible = False

+0

У вас есть столбец «ISBN» в вашей сетке (написанный в верхнем регистре)? Если вы прокомментируете эту строку, другие работают? – Markus

+0

По-видимому, нет колонки с ключом «ISBN». –

+0

@Steven Doggart, спасибо. member.loan содержит поле ISBN. Я не думаю, что вам нужно явно указывать имена столбцов. – w0051977

ответ

0

Проблема здесь не в том, что там просто нет который имеет имя "ISBN" в коллекции Columns. Вам нужно будет изменить это на фактическое имя столбца или использовать индекс, если это более уместно. Чтобы узнать все имена столбцов, вы можете просто распечатать их. Скорее всего, это сопоставление с именем, которое будет очень очевидно, когда вы это увидите.

For Each column in DataGridViewBookDetails.Columns 
    MessageBox.Show(column.Name) 
Next 
Смежные вопросы