Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

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

0 views
Skip to first unread message

Andy B

unread,
Apr 22, 2008, 11:55:03 AM4/22/08
to
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?

Mark Rae [MVP]

unread,
Apr 22, 2008, 12:42:55 PM4/22/08
to
"Andy B" <a_b...@sbcglobal.net> wrote in message
news:OvPv2EJp...@TK2MSFTNGP03.phx.gbl...

<asp:GridView ID="gvTest" runat="server" AutoGenerateColumns="true" />

Dictionary<string, string> dicTest = new Dictionary<string, string>();
dicTest.Add("1st", "First");
dicTest.Add("2nd", "Second");
dicTest.Add("3rd", "Third");
gvTest.DataSource = dicTest;
gvTest.DataBind();


--
Mark Rae
ASP.NET MVP
http://www.markrae.net

Andy B

unread,
Apr 22, 2008, 7:58:09 PM4/22/08
to
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?


"Mark Rae [MVP]" <ma...@markNOSPAMrae.net> wrote in message
news:%23AkxqfJ...@TK2MSFTNGP05.phx.gbl...

Mark Rae [MVP]

unread,
Apr 22, 2008, 9:45:14 PM4/22/08
to
"Andy B" <a_b...@sbcglobal.net> wrote in message
news:ub2KzSNp...@TK2MSFTNGP03.phx.gbl...

[top-posting corrected]

>>>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?
>>
>> <asp:GridView ID="gvTest" runat="server" AutoGenerateColumns="true" />
>>
>> Dictionary<string, string> dicTest = new Dictionary<string, string>();
>> dicTest.Add("1st", "First");
>> dicTest.Add("2nd", "Second");
>> dicTest.Add("3rd", "Third");
>> gvTest.DataSource = dicTest;
>> gvTest.DataBind();
>

> 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...?

Andy B

unread,
Apr 22, 2008, 10:18:17 PM4/22/08
to
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 [MVP]" <ma...@markNOSPAMrae.net> wrote in message
news:O%23X4tOOp...@TK2MSFTNGP03.phx.gbl...

Mark Rae [MVP]

unread,
Apr 23, 2008, 5:20:22 AM4/23/08
to
"Andy B" <a_b...@sbcglobal.net> wrote in message
news:%23zHSIhO...@TK2MSFTNGP03.phx.gbl...

[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...

Andy B

unread,
Apr 23, 2008, 11:15:48 AM4/23/08
to

"Mark Rae [MVP]" <ma...@markNOSPAMrae.net> wrote in message
news:uo4KCNSp...@TK2MSFTNGP04.phx.gbl...

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...

...
}

Mark Rae [MVP]

unread,
Apr 23, 2008, 3:17:17 PM4/23/08
to
"Andy B" <a_b...@sbcglobal.net> wrote in message
news:%23Q04jTV...@TK2MSFTNGP06.phx.gbl...

> 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...

C# is case-sensitive - Values.key is not the same as values.Key...

sofa...@yahoo.com

unread,
Sep 24, 2008, 12:21:14 PM9/24/08
to
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);
}

*** Sent via Developersdex http://www.developersdex.com ***

0 new messages