0

我想代表 id 从数据列表中删除图像,但此代码不起作用错误:索引超出范围。必须是非负数且小于集合的大小。参数名称:索引

public void show_top_one()
{
    BusinessLogic b1 = new BusinessLogic();
    string query = "select txt_img_name from tbl_gallery2";
    DataSet ds = b1.GetDataSet(query);
    DataList1.DataSource = ds.Tables[0];
    DataList1.DataBind();
}

protected void DataList1_DeleteCommand(object source, DataListCommandEventArgs e)
{
    BusinessLogic b1 = new BusinessLogic();
    int id = Convert.ToInt32(DataList1.DataKeys[e.Item.ItemIndex]);
    string query = "Delete from tbl_gallery2 where id='"+id+"'";
    b1.ExecuteQuery(query);
    show_top_one();

}

}

4

5 回答 5

2

请更改您的选择查询。

string query = "select id,txt_img_name from tbl_gallery2";

现在请将 DataKeyName 添加到您的数据列表中,例如

<asp:DataList DataKeyField="id"

因此,这会将 Id 列添加到 datakey。然后你可以在后端获得它的价值。

于 2013-10-25T09:32:24.407 回答
0

好的,您的代码没有给我很多信息,但是如果您正确配置了 DataSet,那么您可以编写一个方法来: 1. 通过 id 获取图像。2.删除选中的图片。

 public "classname where the image is" GetById(int id)
    {
        return ds.Find(id);  //ds is your DataSet
    }

找到它之后

 public void Delete(int id)
    {
        var entity = this.GetById(id);
        if (entity!=null)
        {
            this.Delete(entity);
        }
    }

这应该是一个干净而漂亮的答案:)

祝你好运!

于 2013-10-25T09:36:53.993 回答
0

首先你需要检查这个值

 DataList1.DataKeys[e.Item.ItemIndex].Value

您可能会在上述参数中获得空值。如果是,您可能没有在数据列表中设置数据密钥归档。

因此,您需要先DataKeyField在 DataList 中设置,然后再使用代码。

于 2013-10-25T09:37:34.100 回答
0

试试这个:你错过了.Value,我猜。

protected void DataList1_DeleteCommand(object source, DataListCommandEventArgs e)
{
    BusinessLogic b1 = new BusinessLogic();
    int id = Convert.ToInt32(DataList1.DataKeys[e.Item.ItemIndex].Value);
    string query = "Delete from tbl_gallery2 where id='"+id+"'";
    b1.ExecuteQuery(query);
    show_top_one();

}
于 2013-10-25T09:30:38.360 回答
0

不需要单引号,如果是 int

 string query = "Delete from tbl_gallery2 where id="+id;

并且您还需要id在选择查询中选择列以及数据键

于 2013-10-25T09:31:46.190 回答