G
Guest
Here is an example of a SortedList that works as a datasource to the ComboBox
and a generic SortedList<> that does not works as a datasource to the
ComboBox.
Why? If I use List and generic List<>, both works.
private void Form1_Load(object sender, EventArgs e)
{
System.Collections.SortedList QA1 = new
System.Collections.SortedList();
QA1["Name1"] = new Query("Name1", "Group1", true);
QA1["Name2"] = new Query("Name2", "Group1", true);
comboBox1.DataSource = QA1.Values; // Works !
System.Collections.Generic.SortedList<string, Query> QA2 = new
System.Collections.Generic.SortedList<string, Query>();
QA2["Name1"] = new Query("Name1", "Group1", true);
QA2["Name2"] = new Query("Name2", "Group1", true);
comboBox1.DataSource = QA2.Values; // Does not works
}
Here's the QUERY.cls code in case you're wondering:
sing System;
namespace WindowsApplication1
{
/// <summary>
/// Summary description for Query.
/// </summary>
public class Query : IComparable
{
string m_name ;
string m_group;
string m_email;
bool m_IsDirect;
public Query(string Name , string Group, bool IsDirect )
{
m_name = Name;
m_group = Group;
m_IsDirect = IsDirect;
m_email = "";
}
public Query(string Name , string Group, bool IsDirect, string Email)
{
m_name = Name;
m_group = Group;
m_email = Email;
m_IsDirect = IsDirect;
}
public string Email
{
get
{
return m_email;
}
set
{
m_email = value;
}
}
public bool IsDirect
{
get
{
return m_IsDirect;
}
set
{
m_IsDirect = value;
}
}
public string Name
{
get
{
return m_name;
}
set
{
m_name = value;
}
}
public string Group
{
get
{
return m_group;
}
set
{
m_group = value;
}
}
public string Display
{
get
{
return string.Format("{0}{1}\t{2}",m_IsDirect ? " \t" : "\x2206\t",
m_group, m_name);
}
}
public string DisplayALL
{
get
{
return string.Format("{0}\t{1}\t{2}",m_group, m_name, m_email);
}
}
#region IComparable Members
// Calls CaseInsensitiveComparer.Compare with the parameters reversed.
// int IComparer.Compare( Object one, Object two ) {
// return( (new CaseInsensitiveComparer()).Compare( y, x ) );
// }
public int CompareTo(object obj)
{
if(obj is Query)
{
Query item = (Query) obj;
return m_name.CompareTo(item.m_name);
}
throw new ArgumentException("This object is not a Query Class");
}
#endregion
}
}
and a generic SortedList<> that does not works as a datasource to the
ComboBox.
Why? If I use List and generic List<>, both works.
private void Form1_Load(object sender, EventArgs e)
{
System.Collections.SortedList QA1 = new
System.Collections.SortedList();
QA1["Name1"] = new Query("Name1", "Group1", true);
QA1["Name2"] = new Query("Name2", "Group1", true);
comboBox1.DataSource = QA1.Values; // Works !
System.Collections.Generic.SortedList<string, Query> QA2 = new
System.Collections.Generic.SortedList<string, Query>();
QA2["Name1"] = new Query("Name1", "Group1", true);
QA2["Name2"] = new Query("Name2", "Group1", true);
comboBox1.DataSource = QA2.Values; // Does not works
}
Here's the QUERY.cls code in case you're wondering:
sing System;
namespace WindowsApplication1
{
/// <summary>
/// Summary description for Query.
/// </summary>
public class Query : IComparable
{
string m_name ;
string m_group;
string m_email;
bool m_IsDirect;
public Query(string Name , string Group, bool IsDirect )
{
m_name = Name;
m_group = Group;
m_IsDirect = IsDirect;
m_email = "";
}
public Query(string Name , string Group, bool IsDirect, string Email)
{
m_name = Name;
m_group = Group;
m_email = Email;
m_IsDirect = IsDirect;
}
public string Email
{
get
{
return m_email;
}
set
{
m_email = value;
}
}
public bool IsDirect
{
get
{
return m_IsDirect;
}
set
{
m_IsDirect = value;
}
}
public string Name
{
get
{
return m_name;
}
set
{
m_name = value;
}
}
public string Group
{
get
{
return m_group;
}
set
{
m_group = value;
}
}
public string Display
{
get
{
return string.Format("{0}{1}\t{2}",m_IsDirect ? " \t" : "\x2206\t",
m_group, m_name);
}
}
public string DisplayALL
{
get
{
return string.Format("{0}\t{1}\t{2}",m_group, m_name, m_email);
}
}
#region IComparable Members
// Calls CaseInsensitiveComparer.Compare with the parameters reversed.
// int IComparer.Compare( Object one, Object two ) {
// return( (new CaseInsensitiveComparer()).Compare( y, x ) );
// }
public int CompareTo(object obj)
{
if(obj is Query)
{
Query item = (Query) obj;
return m_name.CompareTo(item.m_name);
}
throw new ArgumentException("This object is not a Query Class");
}
#endregion
}
}