Asp: Repeater Datasouce - Datatable Флажок внутри повторителя. Удалить текущую строку - PullRequest
0 голосов
/ 22 января 2019

Не могу найти ничего подобного. На странице есть повторитель, источник данных является датируемым. Строки со страницы добавляются в таблицу данных, затем Repeater обновляется и отображается на странице. Например, пользователь добавил неверную информацию и должен удалить что-то из Repeater, установив флажок в поле. Если флажок установлен, выбранные данные (строка в таблице данных) должны быть удалены из источника данных, а Repeater должен быть обновлен. Как это можно реализовать и возможно ли это вообще? Мой код:

<asp:UpdatePanel runat="server" ID="UpdatePanel1" UpdateMode="Conditional">

            <ContentTemplate>

                    <asp:Repeater ID="Repeater1" runat="server">

                        <ItemTemplate>

                                <asp:TableCell Width="80px" BackColor="#e3a99a"  HorizontalAlign="Right">
                                      <asp:CheckBox ID="cb_GetOut" runat="server" AutoPostBack="true" Checked="false" Text="DeleteRow" style="padding-right:5px" />
                                </asp:TableCell>

                        </ItemTemplate>

                    </asp:Repeater>

            </ContentTemplate>

        </asp:UpdatePanel>


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        If Page.IsPostBack = False Then

            dtTest_add.Columns.AddRange(New DataColumn(3) {New DataColumn("text1"), New DataColumn("text2"), New DataColumn("text3"), New DataColumn("text4")})

            ViewState("dtTest_add") = dtTest_add

        Else

            dtTest_add = ViewState("dtTest_add")
            Repeater1.DataSource = TryCast(ViewState("dtTest_add"), DataTable)
            Repeater1.DataBind()

        End If

    End Sub


    Protected Sub btn_addTest_Click(sender As Object, e As System.EventArgs) Handles btn_addTest.Click

        dtTest_add.Rows.Add(txt1.Text, txt2.Text, txt3.Text, txt4.Text)

        dtTest_add = ViewState("dtTest_add")

        ViewState("dtTest_add") = dtTest_add
        Repeater1.DataSource = TryCast(ViewState("dtTest_add"), DataTable)
        Repeater1.DataBind()

        UpdatePanel1.Update()

    End Sub


    Protected Sub Repeater1_ItemCreated(sender As Object, e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles Repeater1.ItemCreated

        Dim cb_GO As CheckBox = CType(e.Item.FindControl("cb_GetOut"), CheckBox)
        ScriptManager.GetCurrent(Page).RegisterAsyncPostBackControl(cb_GO)

    End Sub


    Protected Sub Repeater1_ItemDataBound(sender As Object, e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles Repeater1.ItemDataBound

        Dim cb_GO As CheckBox = DirectCast(e.Item.FindControl("cb_GetOut"), CheckBox)

        cb_GO.Attributes("onclick") = "this.checked = (" + dtTest_add + ").deleteRow(" + CStr(e.Item.ItemIndex) + ");"

    End Sub

Кнопка "btn_addTest" находится на форме, а не в Repeater. С его помощью я добавляю данные в источник данных. Затем обновите репитер.

Я обрабатываю событие флажка onclick в этой строке кода

cb_GO.Attributes ("onclick") = "this.checked = (" + dtTest_add + ") .deleteRow (" + CStr (e.Item.ItemIndex) + ");"

Необходимо удалить данные из datatable, и Repeater просто обновится тогда и все. Но как ты это делаешь? Не удается связаться с дататором с помощью повторителя в ItemDataBound.

...