2013-04-24 1 views
1

Im немного застрял здесь. У меня есть datalist, у которого есть источник данных, который является Lit (из SomeObject).Удалить элемент из DataSource, когда DataList ItemCommand уволен

Private MyObjectList As List (of SomeObject) 

загружает данные, и при необходимости, пользователь должен щелкнуть кнопку, чтобы добавить продукт в свою корзину и связать DataList.

Form_load.... 
dl.Datasource = MyObjectList 
dl.databind() 
End Sub 

Для отображения данных в DataList я иметь метку, которая показывает, что, котор они добавили, используя е eventArg приведения его к моему объекту, пример ниже:

Protected Sub dl_ItemDataBound(sender As Object, e As System.Web.UI.WebControls.DataListItemEventArgs) Handles dl.ItemDataBound 
    Dim myObject = DirectCast(e.Item.DataItem, SomeObject) 
.... 
Label.Text = myObject.Description 

End Sub 

Инлайн код:

<asp:DataList ID="dl" runat="server"> 
       <ItemTemplate> 
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> 
        <asp:Button ID="DeletePRoduct" runat="server" Text="Delete" CommandName="Del" CommandArgument='<%# Container.ItemIndex %>'/> 
     </ItemTemplate> 
    </asp:DataList> 

Так что теперь я хотел бы, чтобы пользователь имел возможность удалить продукт

Protected Sub dl_ItemCommand(source As Object, e As System.Web.UI.WebControls.DataListCommandEventArgs) Handles dl.ItemCommand 
    Dim myObject = DirectCast(e.Item.DataItem, SomeObject) 

    If e.CommandName = "Del" Then 
     MyObjectList.Remove(myObject) 
    .... 
    End If 
End Sub 

Если я попытаюсь передать myObject под ItemCommand, я понял, что e.item.DataItem, который я выбрал, ничего, поэтому он не удаляет какие-либо продукты. Затем я решил удалить этот индекс по строке и добавил кнопку CommandArgument к кнопке, когда понял, что не могу сделать это, поскольку List ожидает тип SomeObject.

Может ли кто-нибудь посоветовать, как удалить объект таким образом?

Благодаря

ответ

1

Идентификатор элемента удаления: dl.DataKeys[e.Item.ItemIndex]. Обязательно установите DataKeyFieldDataList.

enter image description here

<asp:DataList ID="dl" runat="server" DataKeyField="ID"...> 
.... 
</asp:DataList> 

Public Class SomeObject 
    Public Property ID() As Integer 
     Get 
      Return m_ID 
     End Get 
     Set 
      m_ID = Value 
     End Set 
    End Property 
    Private m_ID As Integer 
    Public Property Name() As String 
     Get 
      Return m_Name 
     End Get 
     Set 
      m_Name = Value 
     End Set 
    End Property 
    Private m_Name As String 
End Class 

Private _someObjects As List(Of SomeObject) 
Public Property SomeObjects() As List(Of SomeObject) 
    Get 
     If _someObjects Is Nothing Then 
      _someObjects = New List(Of SomeObject)() With { _ 
       New SomeObject() With { _ 
        .ID = 1, _ 
        .Name = "One" _ 
       }, _ 
       New SomeObject() With { _ 
        .ID = 2, _ 
        .Name = "Two" _ 
       }, _ 
       New SomeObject() With { _ 
        .ID = 2, _ 
        .Name = "Three" _ 
       } _ 
      } 
     End If 
     Return _someObjects 
    End Get 
    Set 
     SomeObjects = value 
    End Set 
End Property 

Protected Sub Page_Load(sender As Object, e As System.EventArgs) 
    If Not IsPostBack Then 
     dl.DataSource = SomeObjects 
     dl.DataBind() 
    End If 
End Sub 

Protected Sub dl_ItemCommand(source As Object, e As DataListCommandEventArgs) 
    If e.CommandName = "Del" Then 
     Dim id = Convert.ToInt32(dl.DataKeys(e.Item.ItemIndex)) 
     Dim someObject = SomeObjects.First(Function(x) x.ID = id) 
     SomeObjects.Remove(someObject) 

     dl.DataSource = SomeObjects 
     dl.DataBind() 
    End If 
End Sub 

Примечание: вы должны заботиться о сохранении данных после удаления. Например, сохранение данных в ViewState, Session или Database.

+0

Спасибо, что сделал трюк. Я очень признателен, что вы тоже тратите время на демонстрацию этого. Еще раз спасибо. – Computer

1

Вы должны связать DataList снова после удаления объекта из источника MyObjectList данных, чтобы получить обновленные записи на стр.

If e.CommandName = "Del" Then 

    MyObjectList.Remove(myObject) 
    dl.Datasource = MyObjectList 
    dl.databind() 
.... 
End If 
+0

Это проблема, как удалить объект, который пользователь нажал на кнопку «Удалить»? Поскольку e.Item.DataItem в элементе ItemCommand для элемента управления DataList ничего, так что отливка не имела никакого значения? – Computer

+0

Как вы заполняете данные в MyObjectList, вы можете использовать базу данных (таблицу в базе данных) в качестве источника данных. – Adil

+0

Я использую List (Of SomeObject) в качестве источника данных, затем привязывается к источнику данных DataList. Для того, чтобы удалить элемент im, проверяющий событие переменной «e» в ItemCommand, что ничего? – Computer

 Смежные вопросы

  • Нет связанных вопросов^_^