首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

一句很简单的代码 为什么错了,该怎么解决

2012-03-26 
一句很简单的代码 为什么错了publicArrayList getdatavalue(){ArrayList list new ArrayList()int id

一句很简单的代码 为什么错了
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
//改为加个ifif (!DBNull.Value.Equals(this.studentdgv.CurrentRow.Cells["NO"].Value)){  int id = int.Parse(this.studentdgv.CurrentRow.Cells["NO"].Value.ToString());                               } 

热点排行