我有一个包含~20列的SQL表。我想从中拉出3列并在我的前端WPF应用程序中填充数据网格。到目前为止,这是我的代码。
Private Sub AccountSelectorDialogue_load(ByVal sender As Object, ByVal e
As EventArgs) Handles MyBase.Loaded
Try
Dim context As MyDatabase = New MyDatabase
Dim qry_Accounts = From accounts In context.tbl_Accounts
Order By accounts.AccName
Select {accounts.AccName, accounts.AccPhone, accounts.ParentAcc}
Dim results = qry_Accounts.ToList()
AccountDataGrid.DataContext = results
Catch ex As Exception
MessageBox.Show("Error while selecting record from table..." & ex.Message, "Select Records")
MessageBox.Show(ex.InnerException.Message)
End Try
End Sub
当我加载数据网格时,我得到this异常和this内部异常。我觉得我缺少一些基本的东西,但我没有看到它。
编辑:当我像这样写Select
行并删除results
变量时,异常消失。
Select {accounts.AccName, accounts.AccPhone, accounts.ParentAcc}.ToList()
AccountDataGrid.DataContext = qry_Accounts
但是,数据网格仍然没有显示任何内容。
编辑2:使用ItemsSource
代替DataContext
。现在数据网格显示了正确的行数 - 但它们是空的......
编辑3:在我的屏幕上盯着几个小时之后,我想这可能是我的xaml。最初我不认为我必须绑定我的列。如果我确实需要,我不知道如何在这种情况下。
<DataGrid x:Name="AccountDataGrid" ItemsSource="{Binding}"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="480"
MinHeight="200" VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Auto" AutoGenerateColumns="False"
Background="Transparent" >
<DataGrid.Columns>
<DataGridTextColumn x:Name="AccountName" Binding="
{Binding AccName}" Header="Account Name" Width="Auto" MinWidth="180"/>
<DataGridTextColumn x:Name="PhoneNumber" Binding="
{Binding AccPhone}" Header="Phone" Width="Auto" MinWidth="150"/>
<DataGridTextColumn x:Name="AccountOwnerAlias"
Binding="{Binding ParentAcc}" Header="Account Owner Alias" Width="Auto"
MinWidth="150"/>
</DataGrid.Columns>
</DataGrid>
答案 0 :(得分:1)
由于您只能绑定到公共属性,因此您需要定义匿名类型的属性:
Select New With { .AccName = accounts.AccName, .AccPhone = accounts.AccPhone, .ParentAcc = accounts.ParentAcc }.ToList()
AccountDataGrid.DataContext = qry_Accounts
如果您希望能够编辑记录,则应定义一个具有三个属性(YourClass
,AccName
和AccPhone
)的类(ParentAcc
)和将DataContext
设置为IEnumerable(Of MyClass)
:
Select New YourClass With { .AccName = accounts.AccName, .AccPhone = accounts.AccPhone, .ParentAcc = accounts.ParentAcc }.ToList()