Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WPF中使用XAML和绑定创建数据网格_C#_Wpf_Binding_Datagrid - Fatal编程技术网

C# 在WPF中使用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。通过在代码中创建列,我已经成功地在XAML中创建了datagrid,但是我发现我有一些限制。我需要更好地理解绑定,并希望转换代码以使用绑定在XAML中创建datagrid。正在复制这些列。这是我的代码:

XAML之前:

<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>