gridview删除行怎么做?送分帖!

ztwz 2006-05-19 11:03:54
偶在两个页面里都用到了gridview这个控件,一个页能能删除,一个页面总报错,郁闷死我了!
我用的是access作为数据库,表里有两个字段id(自动编号),name(文本)
下面是我出错页的代码。
html代码片段
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowDeleting="GridView1_RowDeleting">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text=<%#Eval("name") %>></asp:Label>
<asp:LinkButton ID="lbtnDel" runat="server" CommandName ="delete">删除</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>

页面.cs代码
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
bind();
}
}

protected void bind()
{
string connstring = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=" + Server.MapPath("~/DB/db.mdb");
string sql = "select * from [log_main]";
OleDbConnection conn = new OleDbConnection(connstring);
OleDbDataAdapter dr = new OleDbDataAdapter(sql,conn );
DataSet ds = new DataSet();
dr.Fill(ds);
GridView1.DataSource = ds;
GridView1.DataBind();

}
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
int id= (int) GridView1.DataKeys[e.RowIndex-1].Value;//点页面上的删除按钮这行报错!
//索引超出范围。必须为非负值并小于集合大小。
//参数名: index
}
}

他总说我的索引超出范围,我高断点看过e.RowIndex是正确的索引呀!要怎么在gridview自定义模板中删除行呀!
...全文
2222 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
aspdotnet2005 2006-05-20
  • 打赏
  • 举报
回复
刚才你结贴时我又回了一个,我估计:
在你提交的时候,服务器已经把我回复的加上了
可你提交的信息还是我回复之前的那几条记录,结果验证错误!
ztwz 2006-05-19
  • 打赏
  • 举报
回复
.。。。。。。。。。。
怎么结不了帖?


贴子回复次数大于跟给分次数
aspdotnet2005 2006-05-19
  • 打赏
  • 举报
回复
现在的问题是:int id= (int) GridView1.DataKeys[0].Value
就错!
我认为在这个DataKeys集合内就没有数据,
没有设置GridView1的 datakeynames="ID"属性;
还有用LinkButton的CommandArgument属性直接把当前的ID传过去
ztwz 2006-05-19
  • 打赏
  • 举报
回复
谢谢楼上的几位。搞半天没有设 datakeynames,结帖!
sprc_lcl 2006-05-19
  • 打赏
  • 举报
回复
int id= (int) GridView1.DataKeys[e.RowIndex-1].Value;//点页面上的删除按钮这行
应该是
int id= (int) GridView1.DataKeys[e.RowIndex].Value;//点页面上的删除按钮这行

要不你删除第一行时会报错
sprc_lcl 2006-05-19
  • 打赏
  • 举报
回复
sorry, 看错了,以为是datagrid
aspdotnet2005 2006-05-19
  • 打赏
  • 举报
回复
DataKeys[0]这个就错了,还说有数据?????
老孟这个你看了吗?
<asp:gridview id="CustomersGridView"
datasourceid="CustomersSqlDataSource"
autogeneratecolumns="true"
autogeneratedeletebutton="true"
datakeynames="ID"//这个有吗??
runat="server">
</asp:gridview>
还有这个你也试试:
<asp:LinkButton CommandArgument='<%#Eval("id") %>'/>

ztwz 2006-05-19
  • 打赏
  • 举报
回复
我在别一页面也有一个gridview控件,也有删除但这页就不会出错。这是让我最郁闷了。
protected void gvDiary_RowDeleting(object sender, GridViewDeleteEventArgs e)//删除留言
{
int dataId = (int)gvDiary.DataKeys[e.RowIndex].Value;
dc.delData(dataId);
gvDiary.DataSource = dc.View();
gvDiary.DataBind();
}
这个就不会报错
ztwz 2006-05-19
  • 打赏
  • 举报
回复
aspdotnet2005(天中之子、为中原喝采![我想找兼职]) :数据是有的,要不gridview不会显示出删除按钮,DataKeys[0]也会出错,错误相同!
aspdotnet2005 2006-05-19
  • 打赏
  • 举报
回复
改正:
<asp:LinkButton CommandArgument='<%#Eval("id") %>'/>
我认为这个属性很有用,直接传ID值,肯定不会错
ztwz 2006-05-19
  • 打赏
  • 举报
回复
孟老大,偶不想用控件做,想学学自定义模板里要怎么做:(
sprc_lcl(cool一生) 在RowDeleting事件里e没有ItemIndex,
aspdotnet2005 2006-05-19
  • 打赏
  • 举报
回复
DataKeys[]内估计就没数据!!要不DataKeys[0]会不会错
------------解决方法
给linkbutton加个属性
<asp:LinkButton CommandArgument='=<%#Eval("id") %>'/>
int id= int.Parse(e.CommandArgument);
如果没有这个e.CommandArgument
int id= int.Parse((LinkButton)e.CommandSource).CommandArgument);
总之,你在代码中把LinkButton的CommandArgument取出来作为数据表的ID
WeekZero 2006-05-19
  • 打赏
  • 举报
回复
http://weekzero.cnblogs.com/articles/401231.html

参考其中的删除操作
sprc_lcl 2006-05-19
  • 打赏
  • 举报
回复
e.RowIndex 是在全部数据里面的索引,
e.ItemIndex 是在Grid当前绑定页内的索引。
如果你当前页不是第一页自然会报错
孟子E章 2006-05-19
  • 打赏
  • 举报
回复
<asp:gridview id="CustomersGridView"
datasourceid="CustomersSqlDataSource"
autogeneratecolumns="true"
autogeneratedeletebutton="true"
datakeynames="CustomerID"
runat="server">
</asp:gridview>

<asp:sqldatasource id="CustomersSqlDataSource"
selectcommand="Select [CustomerID], [CompanyName], [Address], [City], [PostalCode], [Country] From [Customers]"
deletecommand="Delete from Customers where CustomerID = @CustomerID"
connectionstring="<%$ ConnectionStrings:NorthWindConnectionString%>"
runat="server">
</asp:sqldatasource>
sprc_lcl 2006-05-19
  • 打赏
  • 举报
回复
int id= (int) GridView1.DataKeys[e.RowIndex-1].Value
应该是
int id= (int) GridView1.DataKeys[e.ItemIndex].ToString()

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧