This is a migrated thread and some comments may be shown as answers.

How to display a list of values in a gridview cell ?

0 Answers 333 Views
GridView
This is a migrated thread and some comments may be shown as answers.
Subarna Bandyopadhya
Top achievements
Rank 1
Subarna Bandyopadhya asked on 03 Mar 2011, 03:58 PM
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" };
        }
    }
Hi,
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

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 ;

 

 

}

 

 

 

}

 



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

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

; }

 

 

}

Finally here is the "GetDummyData" and "GetDocumentColumns" method

 

 

 

 

 

 

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"

};

 

 

 

}

 

 

No answers yet. Maybe you can help?

Tags
GridView
Asked by
Subarna Bandyopadhya
Top achievements
Rank 1
Share this question
or