一句很简单的代码 为什么错了
public ArrayList getdatavalue()
{
ArrayList list = new ArrayList();
int id = Convert.ToInt32(this.studentdgv.CurrentRow.Cells["NO"].Value);
list.add(id);
return list;
}
int id = Convert.ToInt32(this.studentdgv.CurrentRow.Cells["NO"].Value);
这句提示我没有实例化
但是
int id = Convert.ToInt32(this.studentdgv.CurrentRow.Cells["NO"].Value);
放在其他地方有能正常取到值 这是为什么
------解决方案--------------------如果我没有估计错:
this.studentdgv.CurrentRow == null
CurrentRow 表示,你当前 鼠标单击 ,选中的那一行!!
——你在 doubleClick 和 Click 事件中 CurrentRow 一般不为空;
但是,你在 非这些事件之外,则 这个属性可能为空!!
------解决方案--------------------看你的代码意思,你是想 将 每一行的 NO 保存到 集合中:
你不能像你那样写代码:即使 CurrentRow 不为空,你取到的都是同一个值;
想将 每一行的NO保存到集合中:
public ArrayList getdatavalue()
{
ArrayList list = new ArrayList();
foreach(DataGridViewRow row in this.studentdgv.Rows)
{
int id = Convert.ToInt32(row.Cells["NO"].Value);
list.add(id);
}
return list;
}
------解决方案--------------------1楼说的有可能,对于你自定义的转换方法来说,Current是捕捉不到触发者的吧?因为这个方法是你去操控什么时候执行,而不是系统自带事件那样已经注册了触发条件的
可以尝试把this.studentdgv.CurrentRow.Cells["NO"].Value.tostring()以参数形式传入你的方法,处理逻辑已经没有问题。
------解决方案--------------------没有获取到相关的事件 肯定值也是空
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
------解决方案--------------------C# code
//改为加个if
if (!DBNull.Value.Equals(this.studentdgv.CurrentRow.Cells["NO"].Value))
{
int id = int.Parse(this.studentdgv.CurrentRow.Cells["NO"].Value.ToString());
}