日期:2014-05-18  浏览次数:20908 次

求助关于在三层结构中,用SqlDataAdapter调用存储过程填充combobox的问题!
大家好!
我试着做了一款记账软件,把每日的支出,收入记录下来.
想实现这么一个功能,在记账的模块中,有2个combobox,一个是选择这笔账是收入还是支出,另一个是选择类型,比如收入有工资,生意等,支出有饮食,交通等.后面的这个combobox需要等前一个combobox做出选择,即选择是收入还是支出后,从数据库中搜索数据,并且填充.

我在数据库中写了个存储过程,是查询收入类型有哪些的.如下:
create proc SelectCBoxItemsIncome
AS

select IncomeName from Income
GO

然后在Model层有个comboBoxHelper类,里面有个属性,ItemName,用来存储第一个combobox选择的值.
在DAL数据访问层中,有个comboBoxBind类,里面有个查询的方法,如下:
public DataSet SelectCBoxItems(comboBoxHelper cbh)
  {

  DataSet ds = null;
  if (cbh.ItemName == "收入")
  {
  comm = new SqlCommand();
  da = new SqlDataAdapter();

  da.SelectCommand = comm;
  da.SelectCommand.Connection = conn;
  da.SelectCommand.CommandText = "SelectCBoxItemsIncome";
  da.SelectCommand.CommandType = CommandType.StoredProcedure;

  conn.Open();

  ds = new DataSet();
  da.Fill(ds);
  Close(); //继承自DBHelper类,关闭连接的方法
  }

  return ds;

  }

然后我在第一个combobox(Name是cbxshouruhuozhichu)的SelectedIndexChanged事件中,写了如下代码:(cbxxiang是第二个combobox的Name属性)

  comboBoxHelper cbh = new comboBoxHelper();
  cbh.ItemName = cbxshouruhuozhichu.Text;

  comboBoxBind cbb = new comboBoxBind();
  cbxxiang.DataSource = cbb.SelectCBoxItems(cbh);

这段代码是根据前一个combobox做出的选择自动从数据库查询对应数据并帮顶,但实际效果是,选择了"收入"之后,第二个combobox就一行数据:System.Data.DataViewManagerListItemTypeDescriptor


请问该如何解决问题?谢谢!



------解决方案--------------------
显示System.Data.DataViewManagerListItemTypeDescriptor证明没有取到对应的值,你检查一下数据库取值有没有问题