2017-03-21 127 views
0

嗨所以我有这个列表,即时通讯当前正在使用的组合框,这就是为什么我有idcategoria = 0nomeCategoria = "Select your Category"所以组合框默认项目将“选择你的类别”。 这里是清单datagridview不显示第一行vb.net

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 

现在我想使用一个DataGridView同一列表的代码,我想知道是否有一种方法可以不显示在DataGridView中ID = 0或做我有创建另一个没有idCategorie = 0的列表,对于datagridview,有关于此的任何想法?感谢

+0

从已经加载的另一个列表中创建:'Dim newList = lstTodos.Skip(1).ToList()'。 – Fabio

+0

与问题无关 - 但您可以删除“try ... catch”。你没有处理抛出的异常 - 所以你可以让你的代码出价更清晰 – Fabio

+0

@Fabio我正在处理抛出的exeptions当我链接列表到组合框和或datagridview –

回答

1

创建从已经加载

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

Skip方法会返回一个新的集合,而不第一项另一个列表。
请注意,只有当- Select your Category -项目是列表中的第一项时,此方法才有效。

或者改变你的方法返回列表没有- Select your Category -项目,并只在需要时添加它。

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 

然后你就可以对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) 

创建类别列表通过这种方法从ObterTodosC方法您删除副作用。
所以方法责任只会从数据库中加载项目

+0

你是混合c#与vb.net代码这里? xD –

+0

不,你在哪里看到我在混音? – Fabio

+0

Dim notSelectedCategory As New Ccategoria With { .IdCategoria = 0 .NomeCategoria =“select your category” } –