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)”去掉就不会出错。请高手帮忙看看该怎么办?
//选择是否参评
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)”去掉就不会出错。请高手帮忙看看该怎么办?
解决方案 »
- 对十个textbox控件的有效性验证
- 如果产生一串符合某种概率分布的随机数,比如说符合高斯分布(正态分布)
- (GDI+高手请进)在画图区域内画了很多图形,如何实现选择其中的一个图形
- winform怎样向网页提交表单呢?
- Form验证为什么只对第一次登录时有效,登录过后,再次打开这个站点时,它不通过登录页就直接进去了.
- 一个关于pictureBox的问题
- 未处理的“System.InvalidOperationException”类型的异常出现在system.web.services.dll中。其他信息: 客户端发现响应内容类型为“text/
- gridview中判断某条记录为数据库中第几条记录
- vs2013的一个设置问题(不知道在哪里设置)
- 如何用socket传输结构体
- 关于String.IsNullOrEmpty 方法
- 关于DictionaryEntry,遍历哈希表
第二,如果是“好像我把page_Load时间中的“if (!this.IsPostBack)”去掉就不会出错。”这种情况,就可能是你把你的DataGridrd或是页面的ViewState禁用掉了,导致读取不到值.