我的XAML如下:
<DataGrid x:Name="WaterfallDataGrid" HorizontalAlignment="Left" Height="540" Margin="10,410,0,0" VerticalAlignment="Top" Width="1650" CanUserSortColumns="False" ColumnWidth="60">
<DataGrid.Columns>
<DataGridTextColumn Header="Load" Binding="{Binding Load}"></DataGridTextColumn>
<DataGridTextColumn Header="PF" Binding="{Binding PF}"></DataGridTextColumn>
<DataGridTextColumn Header="Spare" Binding="{Binding Spare}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
我的VB.net代码如下:
Dim dt3 As New DataTable("Waterfall")
dt3.Columns.Add("Load")
dt3.Columns.Add("PF")
dt3.Columns.Add("Spare")
dt3.rows.add(New Objecet() {"full load", "0.8", "20%"})
WaterfallDataGrid.itemSource = dt3.defaultview
虽然数据表确实显示在数据网格上,但除了我在XAML中创建的原始3列之外,它还会创建另外3个新列(Load,PF和Spar) .
如何将VB.net代码绑定到XAML数据网格?
这是Ed的代码后面的截图
这是我在Mark的评论后修改的代码 .
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Datagrid_Binding"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<DataGrid x:Name="WaterfallDataGrid" HorizontalAlignment="Left" Height="170" Margin="85,65,0,0" VerticalAlignment="Top" Width="340" AutoGenerateColumns="False"/>
<Button x:Name="button" Content="Button" HorizontalAlignment="Left" Height="25" Margin="380,255,0,0" VerticalAlignment="Top" Width="45"/>
</Grid>
</Window>
这是VB代码
Class MainWindow
Private Sub button_Click(sender As Object, e As RoutedEventArgs) Handles button.Click
Dim dt3 As New DataTable("Waterfall")
dt3.Columns.Add("Load")
dt3.Columns.Add("PF")
dt3.Columns.Add("Spare")
'dt3.rows.add(New Object() {"full load", "0.8", "20%"})
dt3.Rows.Add("full load", "0.8", "20%")
WaterfallDataGrid.ItemsSource = dt3.DefaultView
End Sub
End Class
数据网格根本不显示任何数据 . 它以某种方式显示折叠的行 . 截图如下:
我认为问题在于,如果我没有在XAML中预定义列并且我在vb.net中定义了行但是autogeneratecolumn设置为false,那么VB无法在运行时以编程方式创建列,因此我在这看到的是一个折叠的行 .
我认为这种方法是预先定义XAML中的列,然后将数据绑定到XAML列,但没有一个代码可以工作....真的很令人沮丧 .
2 回答
我想也许问题中的屏幕截图与显示的代码无关 . 如果您的初始代码的唯一问题是生成额外的列,您只需要将
AutoGenerateColumns="False"
添加到DataGrid
XAML:此外,由于
DataRowCollection.Add
采用ParamArray
参数,因此您无需创建Object
数组,只需单独传递列值,这样更容易阅读,例如当您将DataGrid的AutoGenerateColumns属性设置为False时,您需要自己明确定义列,因此使用原始XAML标记并添加AutoGenerateColumns =“False”,您应该看到三列:
为了摆脱用户能够添加新行的额外空行,可以将CanUserAddRows属性设置为False:
以下完整的代码示例对我来说可以正常工作 .
MainWindow.xaml.vb:
MainWindow.xaml: