LINQ查询从List(Of)中删除一列

时间:2011-06-28 20:30:08

标签: vb.net winforms linq

我有这段代码:

    Dim prueba As New SvcEduardo.Service1

    Dim listaAnalisis As List(Of SvcService.Analisis)
    listaAnalisis = prueba.GetClinicoAnalisis()

    'Dim listaModificada = (From l In listaAnalisis
    '                       Select l.Colum1, l.Colum2).ToList

    DataGridView1.DataSource = listaModificada 

listaAnalisis是一个包含类别(Analisis)的List,每个类别有3个属性。
listaModificada假设删除一个属性并保留另外两个属性,以便我可以将它绑定到DataGridView。 我可以用linq做到这一点吗?或者是严格必须使用另一个类结构(AnalisisModified),它只包含我需要的两个属性?
我试图避免这种情况 谢谢!

编辑

'Dim listaModificada = (From l In listaAnalisis
'                       Select l.Colum1, l.Colum2).ToList

这里我无法选择colums导致listaAnalisis一个List,我怎样才能将查询设置为单个Class(Analisis)?

3 个答案:

答案 0 :(得分:2)

您无需从班级中删除该属性。只是不要在GridView上显示列/属性。

也许您可以切换AutoGenerateColumns属性:

DataGridView.AutoGenerateColumns = False

然后明确设置您实际想要显示的DGV上的列。您可以在设计时或运行时执行此操作:

dataGridView1.Columns.Add( "CustomerName", "Name")
dataGridView1.Columns.Add( "CustomerStatus", "Current Status")
dataGridView1.Columns.Add( "CustContactPhone", "Phone")
对列进行

或更精细的控制:

Dim dvc as New DataGridViewColumn()
dvc.HeaderText = "ID"
dvc.DataPropertyName = "CustomerID"
' all the properties you need.
dataGridView1.Columns.Add(dvc)
dataGridView1.DataSource = listaModificada 

答案 1 :(得分:2)

你仍然想要AutoGenerateColumns,所以不要将它设置为false,因为它会在此之后停止生成所有列。

在数据网格的AutoGenerateColumns事件下,尝试在列标题上使用Select语句,并使用e.Cancel作为您不想显示的那个。

实施例

  Private Sub SearchResults_AutoGeneratingColumn(ByVal sender As Object, ByVal e As System.Windows.Controls.DataGridAutoGeneratingColumnEventArgs) Handles SearchResults.AutoGeneratingColumn

Dim colName As String
colName = e.Column.Header
Select Case colName
  Case "_city"
    e.Column.Header = "City"
  Case "_firstName"
    e.Column.Header = "First Name"
  Case "_lastName"
    e.Column.Header = "Last Name"
  Case "_state"
    e.Column.Header = "State"
  Case "_orgCode", "_accntCode", "_state_name"
    e.Cancel = True
End Select

End Sub

最后一个案例处理你不想要显示的案例。 在此示例中,我还将列标题的名称更改为更易读的名称。希望这有帮助!

答案 2 :(得分:1)

一个非常简单的例子

 <asp:DataGrid ID="Grid" runat="server"AutoGenerateColumns="False">
        <Columns>
            <asp:BoundColumn HeaderText="Property1" DataField="Property1"></asp:BoundColumn>
            <asp:BoundColumn HeaderText="Property2" DataField="Property2"></asp:BoundColumn>
    </asp:DataGrid>