public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); ICollection<DocumentResultHit> results = ResultHitManager.GetDummyData(); //Add the known columns this.radGridView1 .Columns.Add(new GridViewDataColumn() { UniqueName = "DocId" , DataMemberBinding = new Binding("DocumentID") }); //add the dynamic columns List<string> docColumns = ResultHitManager.GetDocumentColumns(); foreach(string str in docColumns ) { GridViewDataColumn docCol = new GridViewDataColumn(); docCol.Header = str; docCol.DataMemberBinding = new Binding(("SearchFields["+str+"]")); this.radGridView1.Columns.Add(docCol); } // Finally, bind the grid this.radGridView1 .ItemsSource = results ; } }public class DocumentResultHit { public int DocumentID { get; set; } Dictionary<string, List<string>> searchFields = new Dictionary<string, List<string>>(); public Dictionary<string, List<string>> SearchFields { get { return this.searchFields ; } } public IList<PageResultHit> Pages { get; set; } }public static class ResultHitManager { public static ICollection<DocumentResultHit> GetDummyData() { ICollection<DocumentResultHit> results = new List<DocumentResultHit>(); DocumentResultHit doc1 = new DocumentResultHit() { DocumentID = 1 }; doc1.SearchFields.Add("DocCol1", new List<string>() {"MultiField1", "MultiFiled2"}); doc1.SearchFields.Add("DocCol2", new List<string>() { "MultiField3", "MultiFiled4" }); PageResultHit page1 = new PageResultHit(); page1.PageFields.Add("PageCol1", new List<string>() { "MultiPageField1", "MultiPageFiled2" }); page1.PageFields.Add("PageCol2", new List<string>() { "MultiPageField3", "MultiPageFiled4" }); doc1.Pages = new List<PageResultHit>(); doc1.Pages.Add(page1); results.Add(doc1); DocumentResultHit doc2 = new DocumentResultHit() { DocumentID = 2 }; doc2.SearchFields.Add("DocCol1", new List<string>() { "Multidoc2Field1", "Multidoc2Filed2" }); doc2.SearchFields.Add("DocCol2", new List<string>() { "Multidoc2Field3", "Multidoc2Filed4" }); results.Add(doc2); return results; } public static List<string> GetDocumentColumns() { return new List<string>() {"DocCol1", "DocCol2"}; } public static List<string> GetPageColumns() { return new List<string>() { "PageCol1", "PageCol2" }; } }I want to display a read-only list of valueswhich come from a dictionary type in a gridview column . I cannot do it in XAML as the columns are created at runtime. What is the appropriate column type or should I do it via data templates. Currently with the code below the column displays the text "Collection" .Please help. Here is the code:
public
{
InitializeComponent();
ICollection<DocumentResultHit> results = ResultHitManager
this.radGridView1 .Columns.Add(new GridViewDataColumn
{
UniqueName =
,
DataMemberBinding =
new Binding("DocumentID"
});
List<string> docColumns = ResultHitManager
foreach(string str in
{
GridViewDataColumn docCol = new GridViewDataColumn
docCol.Header = str;
docCol.DataMemberBinding =
new Binding(("SearchFields["+str+"]"
this
}
this
}
}
Here is the entity (object called DocumentResulHit ). As shown below "SearchFields" is of type Dictionary and I want to display the value corresponding to the column name key in the cell.
public class
{
public int
{
get
set
}
Dictionary<string, List<string>> searchFields = new Dictionary<string, List<string
public Dictionary<string, List<string
{
get { return this
}
public IList<PageResultHit> Pages { get; set
}
Finally here is the "GetDummyData" and "GetDocumentColumns" method
public static ICollection<DocumentResultHit
{
ICollection<DocumentResultHit> results = new List<DocumentResultHit
DocumentResultHit doc1 = new DocumentResultHit
doc1.SearchFields.Add(
"DocCol1", new List<string>() {"MultiField1", "MultiFiled2"
doc1.SearchFields.Add(
"DocCol2", new List<string>() { "MultiField3", "MultiFiled4"
PageResultHit page1 = new PageResultHit
page1.PageFields.Add(
"PageCol1", new List<string>() { "MultiPageField1", "MultiPageFiled2"
page1.PageFields.Add(
"PageCol2", new List<string>() { "MultiPageField3", "MultiPageFiled4"
doc1.Pages =
new List<PageResultHit
doc1.Pages.Add(page1);
results.Add(doc1);
DocumentResultHit doc2 = new DocumentResultHit
doc2.SearchFields.Add(
"DocCol1", new List<string>() { "Multidoc2Field1", "Multidoc2Filed2"
doc2.SearchFields.Add(
"DocCol2", new List<string>() { "Multidoc2Field3", "Multidoc2Filed4"
results.Add(doc2);
return
}
public static List<string
{
return new List<string>() {"DocCol1", "DocCol2"
}