datalist问题

ruan_hg 2007-06-12 10:12:38
aspx:
<asp:DataList ID="DataList1" runat="server" ><ItemTemplate ><table><tr><td><a href="detail.aspx?s1=<%#DataBinder.Eval(Container.DataItem,"id1") %>"><%#DataBinder.Eval(Container.DataItem,"dt1") %></a></td><td><asp:LinkButton ID="Button1" Text=" 删" runat="server" CommandName="delete"/></td></tr></table></ItemTemplate>
</asp:DataList>
cs:
private void DataList1_DeleteCommand(object source,
System.Web.UI.WebControls.DataListCommandEventArgs e)
{
// Code to delete the item from the data source.
DataTable aTable = (DataTable)DataList1.DataSource;
aTable.Rows[e.Item.ItemIndex].Delete();
// Bind the data after the item is deleted.
DataList1.DataBind();
}
现在页面上的删除按钮点上去没反应
...全文
228 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
amandag 2007-06-12
  • 打赏
  • 举报
回复
你没有设置DataList1的DataKeyField
ruan_hg 2007-06-12
  • 打赏
  • 举报
回复
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index

Line 57: cmd.Parameters.Add("@ID", SqlDbType.VarChar).Value = DataList1.DataKeys[e.Item.ItemIndex].ToString();
amandag 2007-06-12
  • 打赏
  • 举报
回复
private void DataList1_DeleteCommand(object source, DataListCommandEventArgs e)
{
SqlConnection cn = new SqlConnection(connectionString);
string strDelete = "delete Note Where id = @ID";
SqlCommand cmd = new SqlCommand( strDelete, cn );
//使用 DataKeys的前提是你给DataList1设置过DataKeyField,一般是数据库表的主键
cmd.Parameters.Add("@ID", SqlDbType.VarChar).Value = DataList1.DataKeys[e.Item.ItemIndex].ToString();
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();
DataList1.SelectedIndex = -1;
//下面这个是重新绑定数据的方法
BindDataList();
}
jimh 2007-06-12
  • 打赏
  • 举报
回复
DataTable aTable = (DataTable)DataList1.DataSource;//这样有问题,
经过postback后,DataList1.DataSource,已经没了,aTable还是需要手工保存到ViewState或Session里,否则postback后无法使用
ruan_hg 2007-06-12
  • 打赏
  • 举报
回复
那麻烦写个删除库里面的代码吧
我这边一旦commandname设置成delete就出错
MicroDeviser 2007-06-12
  • 打赏
  • 举报
回复
顶啦
amandag 2007-06-12
  • 打赏
  • 举报
回复
根据你报的错
Object reference not set to an instance of an object

我猜测 上面这句
DataTable aTable = (DataTable)DataList1.DataSource;
可能成功了,但是 (DataTable)DataList1.DataSource;返回的是null,你最好单步调式看看是不是这样
amandag 2007-06-12
  • 打赏
  • 举报
回复
楼主,你这个代码我测试过,可以删除,不过删除也是删的是DataTable里的数据,数据库里的数据是不会删除的
ruan_hg 2007-06-12
  • 打赏
  • 举报
回复
谢谢楼上,那个已经改好了
现在新问题是
Object reference not set to an instance of an object.
Line 53: aTable.Rows[e.Item.ItemIndex].Delete();
amandag 2007-06-12
  • 打赏
  • 举报
回复
private void DataList1_DeleteCommand(object source,
System.Web.UI.WebControls.DataListCommandEventArgs e)
======================================================
protected void DataList1_DeleteCommand(object source,
System.Web.UI.WebControls.DataListCommandEventArgs e)
ruan_hg 2007-06-12
  • 打赏
  • 举报
回复
改了还是点上去无效果
BearRui 2007-06-12
  • 打赏
  • 举报
回复
try:

Text=" 删" runat="server" CommandName="delOther"/>

把CommandName该下,2005中好像delete已经内置了。
ruan_hg 2007-06-12
  • 打赏
  • 举报
回复
现在新问题是
Object reference not set to an instance of an object.
Line 53: aTable.Rows[e.Item.ItemIndex].Delete();
ruan_hg 2007-06-12
  • 打赏
  • 举报
回复
Error 1 'list_title.DataList1_DeleteCommand(object, System.Web.UI.WebControls.DataListCommandEventArgs)' is inaccessible due to its protection level
ruan_hg 2007-06-12
  • 打赏
  • 举报
回复
是vs2005
lnwuyaowei 2007-06-12
  • 打赏
  • 举报
回复
jf
hertcloud 2007-06-12
  • 打赏
  • 举报
回复
vs2003?
那么应该是处理 事件掉了

在IDE设计界面上 点datalist控件 属性 选取 事件 重新点击 删除事件
如果是事件掉了应该会 产生DataList1_DeleteCommand1 将你上面的函数内容拷贝入新函数
并将 源函数删除

private void DataList1_DeleteCommand1(object source,
System.Web.UI.WebControls.DataListCommandEventArgs e)
{
// Code to delete the item from the data source.
DataTable aTable = (DataTable)DataList1.DataSource;
aTable.Rows[e.Item.ItemIndex].Delete();
// Bind the data after the item is deleted.
DataList1.DataBind();
}

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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