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

一句很简单的代码 为什么错了
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());                              
 }