以下是我的存储过程。
ALTER PROCEDURE SP_GetModels
(
@CategoryID bigint
)
AS
BEGIN
Select ModelID,ModelName From Model where CategoryID=@CategoryID
END
我在后面的代码中调用存储过程
public SqlConnection conn;
public SqlDataReader GetModels()
{
DataTable dt = new DataTable();
public void DbConnection()
{
conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SampleCs"].ConnectionString);
conn.Open();
}
DbConnection();
SqlCommand cmd = new SqlCommand("SP_GetModels", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@CategoryID", SqlDbType.BigInt, 10).Value = CategoryID;
// SqlDataAdapter madap = new SqlDataAdapter(cmd, conn);
SqlDataReader dreader= cmd.ExecuteReader();
//madap.Fill(dt);
return dreader;
}
我有一个下拉列表,我必须绑定包含modelname的datareader对象。 如何将datasource设置为dropdownlist as datareader
答案 0 :(得分:10)
private void PopDataBaseName()
{
try
{
SqlCommand cmd = new SqlCommand("sp_generate_report", con);
cmd.Parameters.Add("@TABLE_NAME", SqlDbType.VarChar,100).Value = TextBox1.Text;
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter adp = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
adp.Fill(ds);
}
catch (Exception ex)
{
}
}
答案 1 :(得分:2)
您应该能够将SqlDataReader直接绑定到下拉列表,如下所示:
MyDropDownList.DataSource = GetModels();
MyDropDownList.DataTextField = "ModelName";
MyDropDownList.DataValueField = "ModelID";
您还需要指定要显示的成员(属性)(DataTextField),以及在下拉列表(DataValueField)中选择条目时将使用哪一个作为值。
我强烈建议您从GetModels()
过程中的SqlDataReader中获取数据,创建一个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;
}
马克
答案 2 :(得分:1)
首先,确保在返回时自动关闭datareader:
SqlDataReader dreader= cmd.ExecuteReader(CommandBehavior.CloseConnection);
然后绑定到列表:
DropDownList1.DataSource = GetModels();
DropDownList1.DataValueField = "ModelID";
DropDownList1.DataTextField = "ModelName";
DropDownList1.DataBind();
答案 3 :(得分:1)
我不认为SqlDataReader继承自IListSource,如果我没记错的话,你只能使用继承自IListSource的类来进行数据绑定。如果要获取DataTable,则应使用SqlDataAdapter来执行命令。扩展Marc的解决方案:
public void BindData()
{
dropDownList1.DataSource = LoadModelData();
dropDownList1.DataValueField = "ModelID";
dropDownList1.DataTextField = "ModelName";
dropDownList1.DataBind();
}
public DataTable LoadModelData()
{
DataSet dataset = new DataSet();
using (conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SampleCs"].ConnectionString))
{
SqlCommand cmd = new SqlCommand("SP_GetModels", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@CategoryID", SqlDbType.BigInt, 10).Value = CategoryID;
SqlDataAdapter adapter = new SqlDataAdapter(cmd, conn);
adapter.Fill(dataset);
}
return dataset.Tables[0];
}
答案 4 :(得分:0)
这个怎么样
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
DropDownList1.Items.Add(new ListItem(dr["ModelName"].ToString(), dr["ModelID"].ToString()));
}
con.Close();