help and idea about code snippet
my codes are below. what i want to do is:i return datas from DB using SetListData method. i want the records return as List format not Dataset.i send 2 paramter to SetListData method. storedprroc name and object that will return lists. For example category class has id,catname properties. i want to do all listing records processes in one place. So, i try to use this method.this method doesn't give error. but it show records as object.how can i convert list)
public static List<object> SetListData(string procname, object sender)
{
Type tip = sender.GetType();
System.Reflection.PropertyInfo[] ozellikler = tip.GetProperties();
DBOperations dbop = new DBOperations();
SqlDataReader reader=dbop.DataReader(procname,null);
List<object> liste = new List<object>();
while (reader.HasRows && reader.Read())
{
liste.Add(CreateSenderObject(sender,reader));
}
return liste;
}
static object CreateSenderObject(object sender,IDataRecord rd)
{
Type tip = sender.GetType();
System.Reflection.PropertyInfo[] ozellikler = tip.GetProperties();
for (int i = 0; i < ozellikler.Length; i++)
{
if(ozellikler[i].PropertyType.ToString()=="System.String")
ozellikler[i].SetValue(sender,rd[i].ToString(),null);
else if(ozellikler[i].PropertyType.ToString()=="System.Int32")
ozellikler[i].SetValue(sender,Convert.ToInt32(rd[i].ToString()),null);
else if(ozellikler[i].PropertyType.ToString()=="System.DateTime")
ozellikler[i].SetValue(sender,Convert.ToDateTime(rd[i].ToString()),null);
else if(ozellikler[i].PropertyType.ToString()=="System.Decimal")
ozellikler[i].SetValue(sender,Convert.ToDecimal(rd[i].ToString()),null);
else if (ozellikler[i].PropertyType.ToString() == "System.Int32")
ozellikler[i].SetValue(sender, Convert.ToInt32(rd[i].ToString()), null);
}
return ozellikler;
}
Jean PaulPosted Feb 7, 2011, 8:34 AM
I found your code very interesting.
For solving your problem use return sender; // return ozellikler;
One small suggestion: instead of the following method signature..
public static List<object> SetListData(string procname, object sender)
use this one
private void Form1_Load(object sender, EventArgs e)
{
List
}
public static List
{
T sender = Activator.CreateInstance
Type tip = sender.GetType();
System.Reflection.PropertyInfo[] ozellikler = tip.GetProperties();
SqlDataReader reader = null;
List
while (reader.HasRows && reader.Read())
{
CreateSenderObject(sender, reader);
liste.Add(sender);
}
return liste;
}
static object CreateSenderObject(object sender, IDataRecord rd)
{
Type tip = sender.GetType();
System.Reflection.PropertyInfo[] ozellikler = tip.GetProperties();
for (int i = 0; i < ozellikler.Length; i++)
{
if (ozellikler[i].PropertyType.ToString() == "System.String")
ozellikler[i].SetValue(sender, rd[i].ToString(), null);
else if (ozellikler[i].PropertyType.ToString() == "System.Int32")
ozellikler[i].SetValue(sender, Convert.ToInt32(rd[i].ToString()), null);
else if (ozellikler[i].PropertyType.ToString() == "System.DateTime")
ozellikler[i].SetValue(sender, Convert.ToDateTime(rd[i].ToString()), null);
else if (ozellikler[i].PropertyType.ToString() == "System.Decimal")
ozellikler[i].SetValue(sender, Convert.ToDecimal(rd[i].ToString()), null);
else if (ozellikler[i].PropertyType.ToString() == "System.Int32")
ozellikler[i].SetValue(sender, Convert.ToInt32(rd[i].ToString()), null);
}
return ozellikler;
}
// Also no need of passing sender as return parameter from the CreateSenderObject method, as you already created sender
// Only reference needs to be passed
Please let us know if any error occurs.. or mark as answer