如何设置列的位置在数据网格的WPF

如何设置列的位置在数据网格的WPF

问题描述:

我有一个问题即时作出一个WPF应用程序,并使用数据网格控件显示表格数据IM通过XAML添加单个柱子在数据网格和我所有的其他列将被添加动态我的固定列正值网格第一现在的位置,我想无论是要到来了如何设置列的位置在数据网格的WPF

我怎么能achive它

我的XAML代码是如下

由于提前 shashank`

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

而且下面是我的C#` 公共无效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);` 
+0

你可以显示你用来创建动态列的代码吗? – ChrisF 2010-09-17 11:23:38

+0

我也尝试通过代码添加我的固定列后面..但它也不起作用 – Shashank 2010-09-17 13:09:56

+0

我可以知道您使用的.Net版本和Visual Studio版本吗? – 2010-09-17 13:35:03

这可能是晚,但为了帮助他人在类似的问题,在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; 
     } 
    } 
} 
+0

作品像一个魅力,谢谢! – 2017-03-17 09:32:51