Displaying dictionary collection key/value pairs formatted with html markup on a page

  • Thread starter Thread starter Andy B
  • Start date Start date
A

Andy B

I have the object property StockContract.Dictionary which is a dictionary
collection of <string, string> key/value pairs. I need to be able to
retreive the keys and their values and display them on a page. I want to use
something like a repeater or something like that. I don't know if this would
be code I will have to manually write myself, or if it can be done with
dataBinding of some sort. I am using vs2008 and c# 3.5. Any ideas on how to
do something like this?
 
I tried to put the StockContract.Dictionary property as a
listView.DataSource. The compiler isn't complaining about it yet, but there
is another question about this kind of databinding. Inside the item
template, What do I use for the Eval() method to get the values out of the
Dictionary collection? I tried Eval("Keys") as the text for a Label control,
but that is what I litterally end up with as the text instead of the text of
the key. Any ideas how to deal with something like this?
 
I am trying to databind to the collection like you normally would say to a
database table. I need to cycle through all of the keys and print out their
key text and value text on a page. The print out has to be formatted with
html markup...
Mark Rae said:
[top-posting corrected]
I tried to put the StockContract.Dictionary property as a
listView.DataSource. The compiler isn't complaining about it yet, but
there is another question about this kind of databinding. Inside the item
template, What do I use for the Eval() method to get the values out of
the Dictionary collection? I tried Eval("Keys") as the text for a Label
control, but that is what I litterally end up with as the text instead of
the text of the key. Any ideas how to deal with something like this?

Not sure what you're trying to do exactly...

What you've got here is, essentially, a two-dimensional array - which
field from which row are you trying to use as the text in a Label
control...?
 
Mark Rae said:
[top-posting corrected again]
I am trying to databind to the collection like you normally would say to a
database table.

Can you clarify what you mean by that, please? You don't databind *to* a
database table - you databind *from* a database table *to* a webcontrol
such as a GridView etc...
I need to cycle through all of the keys and print out their key text and
value text on a page. The print out has to be formatted with html
markup...

You didn't say that originally...

foreach (KeyValuePair<string, string> objKVP in dicTest)
{
MyLabel.Text += objKVP.Key + " - " + objKVP.Value + "<br />";
}

If the Dictionary is quite large, it would probably be better to use a
StringBuilder...

There seems to be a problem with the KeyValuePair<string, string> part. I am
not getting intelisense for the local variable defined as a KeyValuePair.

foreach(KeyValuePair<string, string> values in StockContract.Dictionary) {
Label1.Text = Values.key; //cant get intelisense for this line...

....
}
 
Hi Andy,

I was just trying to do this myself, and had some luck using the
ItemDataBound event:

MyRepeater.DataSource = dicTest;
rptBusinessTypes.ItemDataBound += new
RepeaterItemEventHandler(MyRepeater_ItemDataBound);
MyRepeater.DataBind();


void MyRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e){
//in the repeater ItemTemplate, you'll have a control
//called foo. I made mine an asp:Hyperlink.

HyperLink foo = e.Item.FindControl("foo") as HyperLink;
if(null != foo)
{
DictionaryEntry de = (DictionaryEntry)(e.Item.DataItem);
foo.Text = Convert.ToString(de.Value);
}
 
Back
Top