2014-03-25 62 views
1

當然,我在網上到處搜索,但我找不到解決問題的辦法。綁定DataGrid的WPF到兩個不同的類與列表?

我的問題

我有一個包含聽力圖(Audiogramm類)的列表Patient類。其實,我可以在DataGrid中顯示患者列表。但是我想爲每個病人在DataGrid(WPF)中顯示他的聽力圖。

class Patient 
{ 
    public Patient(string patientid, string genre, string createdate) 
    { 
     this.patientID = patientid; 
     this.genre = genre; 
     this.createDate = createdate; 
     audiogram = new List<Audiogram>(); 
    } 

    public string patientID { get; set; } 
    public string genre{ get; set; }  
    public string createDate { get; set; } 

    public List<Audiogram> audiogram { get; set; } 
} 

class Audiogram 
{ 
    public Audiogram(string typeData, string actionDate) 
    { 
     this.typeData = typeData; 
     this.actionData = actionData; 
    } 

    public string typeData { get; set; } 
    public string actionData { get; set; } 
} 

XmlNodeList nodeList = root.SelectNodes("/pt:NOAH_Patients_Export/pt:Patient/pt:Patient", nsmgr); 

foreach (XmlNode node in nodeList) 
{ 
    XmlNodeList nodeListAudio = node.SelectNodes("//pt:Actions", nsmgr);   

    Patient patient = new Patient(node["pt:NOAHPatientId"].InnerText, node["pt:Gender"].InnerText, node["pt:CreateDate"].InnerText); 

    foreach (XmlNode nodeAudio in nodeListAudio) 
    { 
     Audiogram audiogramme = new Audiogram(nodeAudio["pt:TypeOfData"].InnerText, nodeAudio["pt:ActionDate"].InnerText); 
     patient.audiogram.Add(audiogramme);       
    } 
    listPatient.Add(patient);    
} 
dataGrid_XML.ItemsSource = listPatient; 
 
<DataGrid x:Name="dataGrid_XML" AutoGenerateColumns="false" ItemsSource="{Binding Patient}"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Binding="{Binding patientID}" Header="ID Patient"/> 
     <DataGridTextColumn Binding="{Binding genre}" Header="Genre"/>    
     <DataGridTextColumn Binding="{Binding createDate}" Header="Date création"/> 
     <DataGridTextColumn Binding="{Binding audiogram.typeData}" Header="Type de données"/> 
     <DataGridTextColumn Binding="{Binding audiogram.actionData}" Header="Date de dernière action"/> 
    </DataGrid.Columns> 
</DataGrid> 

回答

0

你應該RowDetails模板

<DataGrid Name="dgUsers" AutoGenerateColumns="False"> 
    <DataGrid.Columns> 
      <DataGridTextColumn Header="Name" Binding="{Binding Name}" /> 
      <DataGridTextColumn Header="Birthday" Binding="{Binding Birthday}" /> 
    </DataGrid.Columns> 
    <DataGrid.RowDetailsTemplate> 
      <DataTemplate> 
        <TextBlock Text="{Binding audiogram.actionData}" Margin="10" /> 
      </DataTemplate> 
    </DataGrid.RowDetailsTemplate> 
</DataGrid> 
+0

感謝您的幫助,該解決方案適用於我,但我想避免RowDetailsTemplate。我已經找到了一個使用datagrid.items.add()的工作解決方案,我可以發佈我的解決方案。 – Wiomarch

0

走,爲什麼你設定的ItemsSource兩次? dataGrid_XML.ItemsSource = listPatient;和ItemsSource =「{綁定病人}」?並且你的xaml不起作用,因爲List沒有屬性typeData。 :)它的你的物品在你的清單中有這個屬性。

所以如果你想綁定你的聽力圖集合,你需要某種itemscontrol。如果你想在一個數據網格中做所有的事情,請查看RowDetailsTemplate。

,如果你想有你的mastergrid和如第二列表中選中的行,嘗試

<DataGrid AutoGenerateColumns="false" ItemsSource="{Binding ElementName=dataGrid_XML, Path=SelectedItem.audiogram}"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Binding="{Binding typeData}" Header="Type de données"/> 
      <DataGridTextColumn Binding="{Binding actionData}" Header="Date de dernière action"/> 
    </DataGrid.Columns> 
</DataGrid> 
0

我找到了一個解決方案的工作,你一言我覺得datagrid.items.add()

我有一個問題,如何刪除typeData和actionData列的空單元格(第一個單元格)?

C#

foreach (XmlNode node in nodeList) 
{ 
    XmlNodeList nodeListAudio = node.SelectNodes("//pt:Actions", nsmgr);   

    Patient patient = new Patient(node["pt:NOAHPatientId"].InnerText, node["pt:Gender"].InnerText, node["pt:CreateDate"].InnerText); 
    dataGrid_XML.Items.Add(patient); 
    foreach (XmlNode nodeAudio in nodeListAudio) 
    { 
     Audiogram audiogramme = new Audiogram(nodeAudio["pt:TypeOfData"].InnerText, nodeAudio["pt:ActionDate"].InnerText);     
     dataGrid_XML.Items.Add(audiogramme); 
    }    
} 

XAML

<DataGrid x:Name="dataGrid_XML" AutoGenerateColumns="false"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Binding="{Binding patientID}" Header="ID Patient" IsReadOnly="True"/> 
     <DataGridTextColumn Binding="{Binding genre}" Header="Genre" IsReadOnly="True"/> 
     <DataGridTextColumn Binding="{Binding createDate}" Header="Date création" IsReadOnly="True"/> 
     <DataGridTextColumn Binding="{Binding typeData}" Header="Type de données" IsReadOnly="True"/> 
     <DataGridTextColumn Binding="{Binding actionData}" Header="Date de dernière action" IsReadOnly="True"/> 
    </DataGrid.Columns>   
</DataGrid>