C# 在WPF中使用XAML和绑定创建数据网格
我正在创建一个包含多行和多列的datagrid。通过在代码中创建列,我已经成功地在XAML中创建了datagrid,但是我发现我有一些限制。我需要更好地理解绑定,并希望转换代码以使用绑定在XAML中创建datagrid。正在复制这些列。这是我的代码: XAML之前:C# 在WPF中使用XAML和绑定创建数据网格,c#,wpf,binding,datagrid,C#,Wpf,Binding,Datagrid,我正在创建一个包含多行和多列的datagrid。通过在代码中创建列,我已经成功地在XAML中创建了datagrid,但是我发现我有一些限制。我需要更好地理解绑定,并希望转换代码以使用绑定在XAML中创建datagrid。正在复制这些列。这是我的代码: XAML之前: <DataGrid Name="dtGrid" Loaded="GridLoaded" VirtualizingPanel.IsVirtualizing="False" Height="365" Width="558" Hor
<DataGrid Name="dtGrid" Loaded="GridLoaded" VirtualizingPanel.IsVirtualizing="False" Height="365" Width="558" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="54,74,0,0" BorderThickness="1" BorderBrush="Black">
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<Trigger Property="DataGridCell.IsSelected" Value="True">
<Setter Property="Background" Value="#FF9DF3D6" />
<Setter Property="Foreground" Value="#000000" />
</Trigger>
</Style.Triggers>
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="DataGridCell_PreviewMouseLeftButtonDown" />
<EventSetter Event="LostFocus" Handler="DataGridCell_OnCellLostFocus" />
</Style>
</DataGrid.Resources>
</DataGrid>
XAML更改:
<DataGrid HeadersVisibility="Column" Name="dtGrid" Loaded="GridLoaded" VirtualizingPanel.IsVirtualizing="False" Height="365" Width="558" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="54,74,0,0" BorderThickness="1" BorderBrush="Black">
<DataGrid.Columns>
<DataGridTextColumn Header="Field" Binding="{Binding Field}" />
<DataGridTextColumn Header="Size" Binding="{Binding Size, Mode=TwoWay}" />
<DataGridCheckBoxColumn Header="Right Justify" Binding="{Binding RightJustify, Mode=TwoWay}" />
<DataGridCheckBoxColumn Header="Left Justify" Binding="{Binding LeftJustify, Mode=TwoWay}" />
<DataGridCheckBoxColumn Header="Left Zero Fill" Binding="{Binding LeftZeroFill, Mode=TwoWay}" />
<DataGridCheckBoxColumn Header="Right Zero Fill" Binding="{Binding RightZeroFill, Mode=TwoWay}" />
</DataGrid.Columns>
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<Trigger Property="DataGridCell.IsSelected" Value="True">
<Setter Property="Background" Value="#FF9DF3D6" />
<Setter Property="Foreground" Value="#000000" />
</Trigger>
</Style.Triggers>
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="DataGridCell_PreviewMouseLeftButtonDown" />
<EventSetter Event="LostFocus" Handler="DataGridCell_OnCellLostFocus" />
</Style>
</DataGrid.Resources>
</DataGrid>
C#:
private void displayFieldLength(字符串strFLFileName,字符串[,]strFieldInfo)
{
int intDisplayCnt=0;
字符串strData,strFieldSize=“”;
bool blnRightJustify、blnLeftJustify、blnLeftZeroFill、blnRightZeroFill;
blnRightJustify=false;
blnLeftJustify=false;
blnLeftZeroFill=false;
blnRightZeroFill=false;
intTotalRowSize=0;
lblFLInfo.Content=“文件:”+strFLFileName;
DataTable dtGridData=新DataTable();
添加(“字段”,typeof(字符串));
添加(“大小”,typeof(字符串));
添加(“RightJustify”,typeof(bool));
Add(“LeftJustify”,typeof(bool));
Add(“LeftZeroFill”,typeof(bool));
Add(“RightZeroFill”,typeof(bool));
尝试
{
int intArraySize=strFieldInfo.GetLength(0);
对于(intDisplayCnt=0;intDisplayCntDisplayFieldLength,出现错误“+e。消息+”;
System.Windows.MessageBox.Show(strMsg);
}
}
默认情况下,DataGrid的AutoGenerateColumns属性为true。因此,当您使用dtGrid.ItemsSource=dtGridData.DefaultView代码>在代码中,它将基于DataTable的列生成列
但是,您也在Xaml的以下行中手动添加列:
<DataGrid.Columns>
<DataGridTextColumn Header="Field" Binding="{Binding Field}" />
....
</DataGrid.Columns>
....
只要去掉它们,一切都会好起来的
当然,您也可以设置AutoGenerateColumns=“false”
,然后在DataTable中每列只显示一列。#Ron--现在我觉得自己很愚蠢。我以为代码中有AutoGenerateColumns=“false”。非常感谢。
<DataGrid.Columns>
<DataGridTextColumn Header="Field" Binding="{Binding Field}" />
....
</DataGrid.Columns>