2010-09-17 6 views
3

J'ai un problème im faire une application wpf et en utilisant le contrôle de grille de données pour afficher les données tabulaires im en ajoutant un seul Coloum dans la grille de données à travers Xaml et ma toute autre colonne serait ajouter dynamique ma colonne fixe arrive à la première postion dans la grille, je veux être à venir enfin êtreComment définir la position de Column dans DataGrid wpf

comment puis-je aCHIVE il

mon code XAML est comme ci-dessous

Merci à l'avance 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> 

Et ci-dessous sont mes C# ` CreateDataTableheader public void() {

 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

Pouvez-vous montrer le code que vous utilisez pour créer les colonnes dynamiques. – ChrisF

+0

J'essaie également d'ajouter ma colonne fixe par le code derrière .. mais cela ne fonctionne pas non plus – Shashank

+0

Puis-je savoir quelle version de .Net vous utilisez et la version de Visual Studio? –

Répondre

2

Il est peut-être en retard, mais pour aider les autres à des problèmes similaires, la mise en DatagridColumn.DisplayIndex dans l'événement AutoGeneratedColumns sera faire l'affaire.

En supposant que la colonne avec Header = "Edit" est votre colonne fixe et votre DataGrid ressemble à ceci:

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

Ensuite, vous pouvez trouver la colonne désirée par sa tête et l'envoyer à la dernière position:

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

Fonctionne comme un charme, merci !! –