Hala mahala
Hala mahala

Reputation: 151

datagridview not showing the first row vb.net

hi so i have this list that im currently using on a combobox that's why i have the idcategoria = 0 with the nomeCategoria = "Select your Category"so the combobox default item would be "select your category". here is the code of the list

Public Shared Function ObterTodosC() As List(Of Ccategoria)
    Dim lstTodos As List(Of Ccategoria) = New List(Of Ccategoria)

    Dim p As Ccategoria = New Ccategoria()
    p.IdCategoria = 0
    p.NomeCategoria = "select your category"
    lstTodos.Add(p)

    Try
        Using con As SqlConnection = New SqlConnection()

            con.ConnectionString = myDAC._connectionString
            Using cmd As SqlCommand = con.CreateCommand()

                cmd.CommandText = "select * from Categoria"
                con.Open()
                Dim dr As SqlDataReader = cmd.ExecuteReader()
                While dr.Read()
                    Dim p As Ccategoria = New Ccategoria()
                    p.IdCategoria = dr.GetInt32(0)
                    p.NomeCategoria = dr.GetString(1)
                    lstTodos.Add(p)
                End While
            End Using
        End Using
    Catch ex As SqlException
        Throw ex
    Catch ex As Exception
        Throw ex
    End Try
    Return lstTodos
End Function

Now i want to use the same list on a datagridview and i wanted to know if there is a way to not show the id = 0 on the datagridview or do i have to create another list without the idCategorie = 0 for the datagridview, any ideas on this? thanks

Upvotes: 0

Views: 114

Answers (1)

Fabio
Fabio

Reputation: 32445

Create another list from already loaded

Dim newList = lstTodos.Skip(1).ToList()

Skip method will return new collection without first item.
Notice that this approach will work only when - Select your Category - item is a first item in the list.

Or change your method to return list without - Select your Category - item and add it only when you need.

Public Shared Iterator Function ObterTodosC() As IEnumerable(Of Ccategoria)
    Using con As SqlConnection = New SqlConnection()

        con.ConnectionString = myDAC._connectionString
        Using cmd As SqlCommand = con.CreateCommand()

            cmd.CommandText = "select * from Categoria"
            con.Open()
            Dim reader As SqlDataReader = cmd.ExecuteReader()

            While reader.Read()
                Yield New Ccategoria With
                {
                    .IdCategoria = reader.GetInt32(0),
                    .NomeCategoria = reader.GetString(1)
                } 
            End While
        End Using
    End Using
End Function

Then you can create list of categories for datagridview

Dim forDataGridView = ObterTodosC().ToList()

Dim notSelectedCategory As New Ccategoria With
{
    .IdCategoria = 0,
    .NomeCategoria = "select your category"
}  
Dim forComboBox = forDataGridView.ToList()
forComboBox.Insert(0, notSelectedCategory)

With this approach your remove side effect from ObterTodosC method.
So method responsibility will be only load items from database

Upvotes: 1

Related Questions