wpf 如何删除额外的列Datagrid

ebdffaop  于 2023-11-21  发布在  其他
关注(0)|答案(7)|浏览(175)

我已经将itemsource绑定到Datagrid的Datatable。它显示了如何删除它的额外列
我的代码:

<DataGrid Name="dataGrid"  IsReadOnly="True"  VerticalAlignment="Top"
          ItemsSource="{Binding Cus}" AutoGenerateColumns="True"/>

字符串
它显示额外的列如何删除它?
屏幕截图:

rxztt3cl

rxztt3cl1#

方案一:

为所有列设置AutoGenerateColumns="False"Width="*"

<DataGrid x:Name="dataGrid" IsReadOnly="True" AutoGenerateColumns="False">
    <DataGrid.Columns>
       <DataGridTextColumn Binding="{Binding OrderId}" Header="OrderId" Width="*"/>
       <DataGridTextColumn Binding="{Binding ProductId}" Width="*" Header="ProductId"/>
       <DataGridTextColumn Binding="{Binding UnitPrice}" Width="*" Header="UnitPrice"/>
       <DataGridTextColumn Binding="{Binding Quantity}" Width="*" Header="Quantity"/>
       <DataGridTextColumn Binding="{Binding Discount}" Header="Discount"
                           Width="*"/>
    </DataGrid.Columns>
</DataGrid>

字符串

**解决方案二:**您可以这样设置,以达到您的要求

<DataGrid HorizontalAlignment="Left" Margin="50,0,0,0" Width="500"
          Name="dataGrid" IsReadOnly="True" VerticalAlignment="Top"
          ItemsSource="{Binding Cus}" AutoGeneratingColumn="AutoGeneratingColumn"/>

 void dataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
 {
     e.Column.Width = new DataGridLength(1, DataGridLengthUnitType.Star);
 }

ygya80vv

ygya80vv2#

您可以将HorizontalAlignment设置为Left。如here所述
举例来说:

<DataGrid ItemsSource="{Binding}" HorizontalAlignment="Left"/>

字符串

xj3cbfub

xj3cbfub3#

一种避免的方法是将AutoGenerateColumns设置为FalseXAML only approach)。
提供您自己的列集合和set width for last column*

<DataGrid x:Name="dataGrid" IsReadOnly="True" AutoGenerateColumns="False">
    <DataGrid.Columns>
       <DataGridTextColumn Binding="{Binding OrderId}" Header="OrderId"/>
       <DataGridTextColumn Binding="{Binding ProductId}" Header="ProductId"/>
       <DataGridTextColumn Binding="{Binding UnitPrice}" Header="UnitPrice"/>
       <DataGridTextColumn Binding="{Binding Quantity}" Header="Quantity"/>
       <DataGridTextColumn Binding="{Binding Discount}" Header="Discount"
                           Width="*"/>
    </DataGrid.Columns>
</DataGrid>

字符串
将列的绑定替换为模型类中相应的属性。输出如下所示:


的数据
但是,如果你想为所有列平均分配可用空间。你可以set width to * for all columns。输出将是这样的:


mwkjh3gx

mwkjh3gx4#

我为此争论了一段时间,Width="\*"解决了我的问题,而datagrid ColumnWidth="*"在我的情况下不工作。

vulvrdjw

vulvrdjw5#

如果您要:
1.保持自动生成列=“True”,并且
1.保持列的宽度自动调整为DataTable中的数据,而不是具有相同的宽度
您只需要将“1*”设置为最后一列。请:
1)将事件处理程序添加到.xaml
2)将以下代码添加到.xaml.cs中

private void dataGrid_AutoGeneratedColumns(object sender, EventArgs e)
    {
        int i = ((DataGrid)sender).Columns.Count;
        DataGridColumn column = ((DataGrid)sender).Columns[i - 1];
        column.Width = new DataGridLength(1, DataGridLengthUnitType.Star);
    }

字符串

flseospp

flseospp6#

在DataGrid对象中添加属性ColumnWidth="*”。

<Grid>
    <DataGrid x:Name="datagridname" Margin="10" ItemsSource="{Binding}" IsReadOnly="True" ColumnWidth="*"/>
</Grid>

字符串

k75qkfdt

k75qkfdt7#

好吧,因为它的未使用的空间,另一种方法是使用加权宽度而不是固定宽度:

<DataGrid x:Name="dataGrid" IsReadOnly="True" AutoGenerateColumns="False">
    <DataGrid.Columns>
       <DataGridTextColumn Binding="{Binding OrderId}" Header="OrderId" Width="1*"/>
       <DataGridTextColumn Binding="{Binding ProductId}" Header="ProductId" Width="1*"/>
       <DataGridTextColumn Binding="{Binding UnitPrice}" Header="UnitPrice" Width="1*"/>
       <DataGridTextColumn Binding="{Binding Quantity}" Header="Quantity" Width="1*"/>

字符串

相关问题