Вы должны иметь возможность напрямую привязать SqlDataReader к раскрывающемуся списку следующим образом:
MyDropDownList.DataSource = GetModels();
MyDropDownList.DataTextField = "ModelName";
MyDropDownList.DataValueField = "ModelID";
Необходимо также указать, какой элемент (свойство) будет отображаться (DataTextField), а какой будет использоваться в качестве значения при выборе записи в раскрывающемся списке (DataValueField).
Я бы настоятельно рекомендовал захватить данные из SqlDataReader в вашей процедуре GetModels()
, создать экземпляры класса Model
, который будет содержать те поля, которые вам нужны, закрыть SqlDataReader и затем верните его как List<Model>
и привяжите этот список к выпадающему списку. НАМНОГО лучше, чем прямое связывание SqlDataReader!
public class Model
{
public int ModelID { get; set; }
public string ModelName { get; set; }
}
А в ваших GetModels ():
public List<Model> GetModels()
{
List<Model> result = new List<Model>();
using(SqlConnection conn = new SqlConnection(ConfigurationManager.
ConnectionStrings["SampleCs"].ConnectionString))
{
using(SqlCommand cmd = new SqlCommand("SP_GetModels", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@CategoryID", SqlDbType.BigInt, 10).Value = CategoryID;
conn.Open();
using(SqlDataReader dreader = cmd.ExecuteReader())
{
while(dreader.Read())
{
Model workItem = new Model()
{ ModelID = dreader.GetInt(0),
ModelName = dreader.GetString(1) };
result.Add(workItem);
}
reader.Close();
}
conn.Close();
}
}
return result;
}
Марк