<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
"Mark Rae [MVP]" <ma...@markNOSPAMrae.net> wrote in message
news:%23AkxqfJ...@TK2MSFTNGP05.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...?
[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...
...
}
> 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...
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 ***