2010-05-18 10 views
1

J'essaie d'obtenir des données à partir du fichier. Le fichier contient d'abord trois lignes de texte décrivant le fichier, puis un en-tête pour les données ci-dessous. J'ai réussi à extraire ça. Ce que j'ai des problèmes, c'est d'obtenir les données sous la ligne d'en-tête. Les données sous la ligne d'en-tête peuvent ressembler à "1 2 3 4 5 6 7 8 9 abc".Renseigner la grille de données à l'aide de Datacontext dans C# WPF

DataGrid dataGrid1 = new DataGrid(); 
masterGrid.Children.Add(dataGrid1); 

using (TextReader tr = new StreamReader(@filename)) 
{ 
    int lineCount = 1; 
    while (tr.Peek() >= 0) 
    { 
     string line = tr.ReadLine(); 
     { 
      string[] data = line.Trim().Split(' '); 

      Dictionary<string, object> sensorData = new Dictionary<string, object>(); 

      for (int i = 0, j = 0; i < data.Length; i++) 
      { 
       //I know that I'm delimiting the data by a space before. 
       //but the data from the text file doesn't necessarily have 
       //just one space between each piece of data 
       //so if I don't do this, spaces will become part of the data. 
       if (String.Compare(data[i]," ") > 0) 
       { 
        sensorData[head[j]] = data[i]; 
        j++; 
       } 
      } 

      sensorDatas.Add(sensorData); 

      sensorData = null; 

     } 
     lineCount++; 
    } 
} 

dataGrid1.DataContext = sensorDatas; 

Je n'arrive pas à comprendre pourquoi cela ne fonctionne pas. Si je change "dataGrid1.DataContext = sensorDatas;" à "dataGrid1.ItemsSource = sensorDatas;" Ensuite, je reçois les données dans les colonnes appropriées, mais je reçois également des données Raw View telles que: Comparer, Count, Keys, Values ​​en colonnes, que je ne veux pas.

Un aperçu?

Répondre

3

Lorsque vous utilisez le DataContext property sur un contrôle dans WPF, cela est utilisé pour définir la source de données que le contrôle utilisera lors du remplissage de propriétés auxquelles sont associées des liaisons.

Ceci est un très autre chose que de régler le ItemsSource property pour indiquer les données que vous souhaitez afficher dans la grille. Oui, les liaisons seront toujours utilisées, mais elles sont utilisées différemment pour les données affichées dans la grille, et non pour les données utilisées pour la configuration de la grille elle-même (ce que fait DataContext). Au lieu de cela, il semble que vous autorisez la grille à générer automatiquement les colonnes pour vous. Au lieu de cela, indiquez que la génération automatique des colonnes doit être désactivée, puis définissez les colonnes que vous souhaitez afficher. Ensuite, lorsque vous définissez le ItemsSource, il doit afficher uniquement les éléments que vous souhaitez afficher.