c# - 如何在datagrid wpf中设置列的位置

标签 c# wpf datagrid

我有一个问题我正在制作一个 wpf 应用程序并使用数据网格控件来显示表格数据我正在通过 Xaml 在数据网格中添加一个单一的 Coloum 我的所有其他列将添加动态我的固定列出现在网格中的第一个位置我终于要来了

我怎样才能实现它

我的 Xaml 代码如下

提前致谢 沙山`

            <my:DataGrid.Columns>
                <my:DataGridTemplateColumn Header="Edit" Width="110" IsReadOnly="True" >
                    <my:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Image Source="file:///D:\Projects\ChadCarpenter\AARFID\AARFID\Images\boardicon.png" />
                        </DataTemplate>
                   </my:DataGridTemplateColumn.CellTemplate> 
                    </my:DataGridTemplateColumn> 
           </my:DataGrid.Columns>

And below are my C #` public void CreateDataTableheader() {

        if (Utility.CheckGroupFamily == "Group")
        {
            dtAdultinfo.Columns.Add("Group Name", typeof(String));
        }
        dtAdultinfo.Columns.Add("Last Name", typeof(String));
        dtAdultinfo.Columns.Add("First Name", typeof(String));
        dtAdultinfo.Columns.Add("Phone", typeof(String));
        dtAdultinfo.Columns.Add("CellPhone", typeof(String));
        dtAdultinfo.Columns.Add("TowerID", typeof(String));
        dtAdultinfo.Columns.Add("Room #", typeof(String));
        dtAdultinfo.Columns.Add("IS primary", typeof(int));

        Lst.ItemsSource = dtAdultinfo.DefaultView;

        //DataGridColumn dc;
        //DataGridTemplateColumn  dgColumn = new DataGridTemplateColumn();

        //DataTemplate dt = new DataTemplate();

        //dgColumn.Header="Edit";
        //dgColumn.Width = 110;
        //dgColumn.IsReadOnly= true;


        //dgColumn.CellTemplate = dt;
        //Image img = new Image();
        //BitmapImage logo=new BitmapImage();

        //logo.UriSource =new Uri("file:///D:/Projects/ChadCarpenter/AARFID/AARFID/Images/boardicon.png");


        DataGridTemplateColumn dgColumn = new DataGridTemplateColumn();
        dgColumn.Header = "Edit";
        FrameworkElementFactory factory1 = new FrameworkElementFactory(typeof(Image));
        Binding b1 = new Binding("Picture");
        b1.Mode = BindingMode.TwoWay;
        factory1.SetValue(Image.SourceProperty, b1);
        DataTemplate cellTemplate1 = new DataTemplate();
        cellTemplate1.VisualTree = factory1;
        dgColumn.CellTemplate = cellTemplate1;
        Lst.Columns.Add(dgColumn);`

最佳答案

这可能会晚一些,但为了帮助其他人解决类似问题,在 AutoGeneratedColumns 事件中设置 DatagridColumn.DisplayIndex 就可以了。

假设带有 Header = "Edit" 的列是您的固定列并且您的 DataGrid 如下所示:

<DataGrid AutoGeneratedColumns="DataGrid_AutoGeneratedColumns">
    <DataGrid.Columns>
        <my:DataGrid.Columns>
            <my:DataGridTemplateColumn Header="Edit">
                <my:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <... />
                    </DataTemplate>
                </my:DataGridTemplateColumn.CellTemplate> 
            </my:DataGridTemplateColumn> 
        </my:DataGrid.Columns>
    </DataGrid.Columns>
</DataGrid>

然后您可以通过它的标题找到所需的列并将其发送到最后一个位置:

private void DataGrid_AutoGeneratedColumns(object sender, EventArgs e)
{
    var grid = (DataGrid)sender;
    foreach (var item in grid.Columns)
    {
        if (item.Header.ToString() == "Edit")
        {
            item.DisplayIndex = grid.Columns.Count - 1;
            break;
        }
    }
} 

关于c# - 如何在datagrid wpf中设置列的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3734824/

相关文章:

c# - 组合来自不同表的多个 Select 语句

wpf - 在 WPF 窗口中禁用除一个子控件之外的所有控件

c# - 如何为单个控件覆盖WPF MVVM中的 Material 设计并使用WPF的默认样式

c# - 从匿名对象中获取值

c# - .net Core 3.0 'Specified key is not a valid size for this algorithm.' 中的 Aes 加密

c# - 测试方法 : async Task TestSth() does not work with . NET 4.0

c# 我怎样才能结束我的 GOTO 语句并在之后继续

WPF 验证错误

c# - 如何在 WPF 中更改屏幕分辨率?

c# - 页面加载时 MVVM 加载模型数据