Как найти элемент списка данных, который вызывает событие команды

У меня есть nested-datalist и на ребенка datalist, itemcommand событие, я делаю что-то вроде этого

if (e.CommandName == "Delete")
{
    string keyID;

    int idx = e.Item.ItemIndex;
    DataClasses1DataContext db = new DataClasses1DataContext();
    DataList dl = Session["dl"] as DataList;
    object thisKey = dl.DataKeys[idx];

    keyID = thisKey.ToString();
    foreach (DataListItem item in dl.Items)
    {
        LinkButton lb = item.FindControl("LinkButton1") as LinkButton;
        ImageButton ib = item.FindControl("ImageButton1") as ImageButton;
        string s = item.ItemIndex.ToString();
        string j = s;
        if (item.ItemIndex == idx)
        {
           string dds = ib.AlternateText;
           Label ServiceCommentIDLabel = item.FindControl("ServiceCommentIDLabel") as Label;
           string ds = ServiceCommentIDLabel.Text;
           ServiceComment sc = db.ServiceComments.Where(o => o.ServiceCommentID == long.Parse(ServiceCommentIDLabel.Text)).First();
           db.ServiceComments.DeleteOnSubmit(sc);
           Response.Redirect("Services.aspx");
        }
     }
 }

Ни его выбор точный datakey ни foreach цикл, проходящий через каждый item из datalist,

1 ответ

Вы получаете DataList от Session что не очень хорошая вещь. Вы должны конвертировать DataList от Object источник в ItemCommand событие как это:

protected void Child_DataList_ItemCommand(object source, DataListCommandEventArgs e)
{
    if (e.CommandName == "Delete")
    {
        // get DataList from the source
        DataList dl = source as DataList;

        object thisKey = dl.DataKeys[e.Item.ItemIndex];
        // do your work here
    }
}
Другие вопросы по тегам