webform,数据库用的SQL Server 2000.数据库有个dutyIf字段是bit型,数据表绑定到页面的一个DataGrid,想实现的功能为:点击DataGrid中的Hyperlink改变dutyIf 的值,代码如下:
//选择是否参评
private void dgDutyDis_SelectedIndexChanged(object sender, System.EventArgs e)
{
if (this.dgDutyDis.SelectedIndex>=0)
{
string dutyId=this.dgDutyDis .DataKeys[this.dgDutyDis.SelectedIndex ].ToString();
//修改数据
string updateSql="update dutydis set dutyIf=(case dutyIf when 1 then 0 else 1 end) where dutyID='"+dutyId+"'";
DBA.ExecuteSql(updateSql);
//自动计算“应得分”。根据传入的dutyID值自动计算,pr_CountDutyShould是在SQL中编写的一个存储过程。
DBA.ExecuteSql("pr_CountDutyShould '"+dutyId+"'");
this.BindDuty();
}
}
其中dutyID是数据表的主键,运行是报错:
索引超出范围。必须为非负值并小于集合大小。参数名: index 
源错误: 
行 120: string dutyId=this.dgDutyDis .DataKeys[this.dgDutyDis.SelectedIndex ].ToString();
好像我把page_Load时间中的“if (!this.IsPostBack)”去掉就不会出错。请高手帮忙看看该怎么办?