string c_id=this.DataGrid1.DataKeys[e.Item.ItemIndex].ToString();
为什么这句话有时候运行正确 有时候报错
“索引超出范围。必须为非负值并小于集合大小。参数名: index”
ASP.NET 1.1 C#
这个错误应该是e.Item.ItemIndex这个参数有问题
于是我Response.Write(e.Item.ItemIndex);
结果输出 1 没有问题啊
更奇怪的是我又执行一句
this.DataGrid1.EditItemIndex=e.Item.ItemIndex;
然后在执行
string c_id=this.DataGrid1.DataKeys[e.Item.ItemIndex].ToString();
然后一切正常 没有报错
谁知道这是怎么回事?
我快郁闷死了~!
为什么这句话有时候运行正确 有时候报错
“索引超出范围。必须为非负值并小于集合大小。参数名: index”
ASP.NET 1.1 C#
这个错误应该是e.Item.ItemIndex这个参数有问题
于是我Response.Write(e.Item.ItemIndex);
结果输出 1 没有问题啊
更奇怪的是我又执行一句
this.DataGrid1.EditItemIndex=e.Item.ItemIndex;
然后在执行
string c_id=this.DataGrid1.DataKeys[e.Item.ItemIndex].ToString();
然后一切正常 没有报错
谁知道这是怎么回事?
我快郁闷死了~!
解决方案 »
- ASP中有没有办法让写在文本框中的代码..经过编译后再显示在该文本框中(求救)
- vs05新模板列问题,大仙们来给小弟解惑
- visual studio 2005的textbox如何绑定一个数据库内一个字段中的内容?
- 如何设置datagrid的编辑文本框的宽度?
- 请教
- 怎样合并DataSet?简单问题,急,在线等
- 寻找深圳.net程序员开发项目
- asp.net 是怎么知道我点击了那个按钮?
- 重置按钮代码怎么写???
- 小白求助
- ajax treeview 问题,内详
- 为 GridView 添加了 <asp:CommandField ShowDeleteButton="True" HeaderText="删除" /> ,可是如何实现删除确认呢?
结果是 1 啊 没有错
=====
那有没有指定DataKeyField?
datagrid的记录有没有2条以上?
依然是老问题
this.DataGrid1.EditItemIndex=e.Item.ItemIndex;
然后再执行
string c_id=this.DataGrid1.DataKeys[e.Item.ItemIndex].ToString();
就可以了呢
取值时datagrid 绑定数据了没?
Response.Write(e.Item.ItemIndex);
结果是0 没有错
我也曾经出现过类似的错误。后来用id解决了。
没绑定怎么会显示呢?
DataKeyFiled也绑定了
SqlConnection con=DataCon.CreateCon();
SqlCommand cmd=new SqlCommand("select at_id,at_name from attachments where a_id="+a_id +"order by at_id",con);
con.Open();
this.DataGrid1.DataSource=cmd.ExecuteReader();
this.DataGrid1.DataBind();
con.Close();
this.DataGrid1.DataKeyField="at_id";
应该放在绑定之前.
这句我试过放在绑定之前也不行
=================
是在更新数据用的???
没遇到过
if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
错误依旧我这里网络不是很稳定 所以这会才回复 大家多见谅
我也曾经出现过类似的错误。后来用id解决了。
=====================================================
楼上能不能说具体一点
DataKeys不用e.Item.ItemIndex
怎么取到database中的id呢
DataGrid1.DataKeys[0]结果报错超出范围
难道数据没绑定上?
但我点击DataGrid上的删除按钮才执行的
如果没绑定上怎么会显示DataGrid的数据呢 private void DataGrid1_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
string at_id=this.DataGrid1.DataKeys[e.Item.ItemIndex].ToString();
SqlConnection con=DataCon.CreateCon();
SqlCommand cmd=new SqlCommand("select at_url from attachments where at_id="+at_id,con);
object temp=new object();
con.Open();
temp=cmd.ExecuteScalar();
con.Close();
string at_url=Server.MapPath("../upload/att/")+temp.ToString();
if(File.Exists(at_url))
{
File.Delete(at_url);
}
cmd.CommandText="delete from attachments where at_id="+at_id;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
Response.Write("<script>window.alert('删除成功!');</script>");
this.bind();
}
不是这样你找我
我以前也遇到这个现象
不是这样你找我
我以前也遇到这个现象
====================================================
谢谢楼上的
我在DataGrid属性窗口设置设置DataKeyFiled问题解决
看来可能是。net的bug
但是分只能给楼上的onlyonereason(学习sql中)
呵呵~
public partial class kcdetails : System.Web.UI.Page
{
String sqlstr;
DataSet ds = new DataSet();
DB db = new DB();
String kc_id;
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack == false)
{
kc_id = Request.QueryString.Get(0).ToString().Trim();
sqlstr = "select * from 课程信息表 where 课程号=" + kc_id;
ds = db.GetDataTableBySql(sqlstr);
try
{
if (ds.Tables[0].Rows.Count != 0)
{
this.Repeater1.DataSource = ds.Tables[0].DefaultView;
this.Repeater1.DataBind();
Session["kc_id"] = kc_id; } }
catch (Exception)
{
Response.Write("<script>alert('没有获得任何数据,请检查!')</script>");
}
} }