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(obje ct sender, EventArgs e)
{
System.Collecti ons.SortedList QA1 = new
System.Collecti ons.SortedList( );
QA1["Name1"] = new Query("Name1", "Group1", true);
QA1["Name2"] = new Query("Name2", "Group1", true);
comboBox1.DataS ource = QA1.Values; // Works !
System.Collecti ons.Generic.Sor tedList<string, QueryQA2 = new
System.Collecti ons.Generic.Sor tedList<string, Query>();
QA2["Name1"] = new Query("Name1", "Group1", true);
QA2["Name2"] = new Query("Name2", "Group1", true);
comboBox1.DataS ource = QA2.Values; // Does not works
}
Here's the QUERY.cls code in case you're wondering:
sing System;
namespace WindowsApplicat ion1
{
/// <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 CaseInsensitive Comparer.Compar e with the parameters reversed.
// int IComparer.Compa re( Object one, Object two ) {
// return( (new CaseInsensitive Comparer()).Com pare( y, x ) );
// }
public int CompareTo(objec t obj)
{
if(obj is Query)
{
Query item = (Query) obj;
return m_name.CompareT o(item.m_name);
}
throw new ArgumentExcepti on("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(obje ct sender, EventArgs e)
{
System.Collecti ons.SortedList QA1 = new
System.Collecti ons.SortedList( );
QA1["Name1"] = new Query("Name1", "Group1", true);
QA1["Name2"] = new Query("Name2", "Group1", true);
comboBox1.DataS ource = QA1.Values; // Works !
System.Collecti ons.Generic.Sor tedList<string, QueryQA2 = new
System.Collecti ons.Generic.Sor tedList<string, Query>();
QA2["Name1"] = new Query("Name1", "Group1", true);
QA2["Name2"] = new Query("Name2", "Group1", true);
comboBox1.DataS ource = QA2.Values; // Does not works
}
Here's the QUERY.cls code in case you're wondering:
sing System;
namespace WindowsApplicat ion1
{
/// <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 CaseInsensitive Comparer.Compar e with the parameters reversed.
// int IComparer.Compa re( Object one, Object two ) {
// return( (new CaseInsensitive Comparer()).Com pare( y, x ) );
// }
public int CompareTo(objec t obj)
{
if(obj is Query)
{
Query item = (Query) obj;
return m_name.CompareT o(item.m_name);
}
throw new ArgumentExcepti on("This object is not a Query Class");
}
#endregion
}
}
Comment