未将对象引用设置到对象的实例
public List<DataContract.ClinicInCharge.Records_Moneys> Load(int deptid,string listname)
{
string sql, err;
sql = string.Format(@"select deptid,dept_code + dept_name as listname
from {0} where isuse=1 and duty=1 ", Tables.tbDeptList);
sql += " order by dept_code";
DataTable dt = SqlHelper.QueryFromDatabase(ThisConn.sCono, sql, out err);
SqlHelper.ExecuteSQL(ThisConn.sCono, sql, out err);
if (err.Length > 0)
{
throw new Exception(err);
}
return DataConverter.DataTableToIList<DataContract.ClinicInCharge.Records_Moneys>(dt).ToList();
}
private void FrmRecords_Money_Load(object sender, EventArgs e)
{
try
{
string listname = DataConverter.EyeNull(cbodept.SelectedValue);
entity . deptid = DataConverter.ToInt(cbodept.SelectedValue);
dal.Load(entity.deptid, listname);
if (listname !="")
{
if (inputdeptid > 0)//判断是否为财务科?
{
btnImport.Show();
btnsetuser2.Show();
btnsetuser.Show();
btndelete.Show();
btnsave.Show();
tabControl1.TabPages.Remove(tabPage3);//使tabControl1不显示
tabControl1.TabPages.Remove(tabPage5);
}
else
{
btnImport.Hide();
btnsetuser2.Hide();
btnsetuser.Hide();
btndelete.Hide();
btnsave.Hide();
DataRow r;
r = dt.NewRow();
r["deptid"] = 0;
r["listname"] = "所有";
dt.Rows.InsertAt(r, 0);
}
entity.RecordUser = Share1.user_code + Share1.user_name;
DataTable dttime = DataConverter.GetMonthsList(DataConverter.ToDateTime("2018-01-01"), DateTime.Now.Date);
cbotime.DataSource = dttime;
cbotime.DisplayMember = dttime.Columns["monthsname"].ToString();
cbotime.ValueMember = dttime.Columns["months"].ToString();
cbotime.SelectedValue = DateTime.Now.AddMonths(-2).ToString("yyyy-MM-01");//两个月之内的记录
cbodept.DataSource = dt;
cbodept.DisplayMember = dt.Columns["listname"].ToString();//未将对象引用到实例
cbodept.ValueMember = dt.Columns["deptid"].ToString();
cbodept.SelectedValue = inputdeptid;
bselect = true;
btnQuery_Click(sender, e);
}
}
catch (Exception ex)
{
ThisHQ.Base.Base.SuMsg(ex.Message);
}
}
listname为空要怎么解决?
怎么让cbodept控件上面有值?我觉得就是这个的问题
你这个代码问题很大啊,首先,字符串拼接最好使用StringBuffer,其次做相等比较要用equals 正确写法应该是if (!"".equals(listname))
dt没有初始化罗,没见你的dt在哪里获取的。。
你直接设置列名称不就行了,干嘛还从columns属性获取一次?。。。
cbodept.DisplayMember ="listname";
cbodept.ValueMember ="deptid";
1)传进来的参数listname为空或者非正常值
2)sql语句查询有问题
一个个排查吧,这个问题不难
sql = string.Format(@"select deptid,dept_code + dept_name as listname
from {0} where isuse=1 and duty=1 ", Tables.tbDeptList);
sql += " order by dept_code";
这里是吧dept_code和dept_name查询的结果作为字符创链接设置到listName,显然是查询的结果有问题,你把这段sql语句复制到数据库中执行的话listName也是空
俩种可能
1)code和name数据类型不一致 不过这种可能应该排除
2)字符串连接操作在开发工具中存在问题。
你可以这样
sql = string.Format(@"select deptid,dept_code as listname
from {0} where isuse=1 and duty=1 ", Tables.tbDeptList);
sql += " order by dept_code";
看看listname是否还是为空
3)如果1,2都没有问题 那么就是
DataTable dt = SqlHelper.QueryFromDatabase(ThisConn.sCono, sql, out err);
SqlHelper.ExecuteSQL(ThisConn.sCono, sql, out err);
也就是说与数据库交互的部分的问题
4)暂时没想到