Как проверить количество подсчетов для aspxgridview флажок в DataItemTemplate для конкретной строки? - PullRequest
0 голосов
/ 28 марта 2019

Сценарий:

У меня есть ASPxGridview на стороне клиента и используется флажок на стороне сервера. Я объявил aspxbutton (submit), чтобы вставить проверенное значение флажка (v = 1, empty = 0) в базу данных и в то же время подсчитать количество отмеченных флажков для каждой строки. В шаблоне флажка v обозначает отмеченный, а пустой - непроверенный, а число в столбце указывает день в зависимости от месяца. Я хочу посчитать количество проверенных флажков для emp №: 234.

                                           YEAR : 2019      MONTH: 3
      ------------------------------------------------------------------
      |EMP NO| 1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|.....|
      ------------------------------------------------------------------
      | 123  | v| | | | | | | | |  |  |  |  |  | v|  |  |  |  |  |.....|
      -------------------------------------------------------------------
   -->| 234  | v| | | | | | | | |  |  |v | v| v|  | v|  |  |  |  |.....|
      ------------------------------------------------------------------                                              
                                                       (Submit) (cancel)

Код для aspxgridview (aspx)

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
                    <ContentTemplate>
                            <div class="flexs">                       
                                <dx:ASPxComboBox ID="year" runat="server" AutoPostBack="true" ClientInstanceName="year" ValueType="System.Int32" Width="100px" CssClass="ddstyle mr10px" OnSelectedIndexChanged="SelectedIndexChanged"></dx:ASPxComboBox>
                                <dx:ASPxComboBox ID="month" runat="server" AutoPostBack="true" ClientInstanceName="month" ValueType="System.Int32" Width="100px" CssClass="ddstyle mr10px" OnSelectedIndexChanged="SelectedIndexChanged"></dx:ASPxComboBox>
                                <dx:ASPxComboBox ID="section" runat="server" AutoPostBack="true" ValueType="System.String" Width="100px" CssClass="ddstyle" OnSelectedIndexChanged="SelectedIndexChanged"></dx:ASPxComboBox>
                            </div>
                        </div>
                        <dx:ASPxGridView ID="LeaveSystem" runat="server" AutoGenerateColumns="false" KeyFieldName="EMP_NO;Year;Month" Width="100%">
                            <SettingsBehavior AllowDragDrop="false" AllowSort="false" />
                            <SettingsPager Mode="ShowAllRecords" />
                        </dx:ASPxGridView>

                    </ContentTemplate>
                </asp:UpdatePanel>
                <dx:ASPxCallback ID="cb" ClientInstanceName="cb" runat="server" OnCallback="cb_Callback" ></dx:ASPxCallback>
                <dx:ASPxLabel ID="HiddenEmpID" runat="server" ClientInstanceName="HiddenEmpID" ClientVisible="false"></dx:ASPxLabel>
                <div class="flexs5 mt10px text-center">
                    <dx:ASPxButton ID="submitbtn" runat="server" Text="Submit" OnClick="submitbtn_Click" AutoPostBack="false" CssClass="mr10px"></dx:ASPxButton>
                   </div>

Код vb.net

  Friend Class CheckBoxTemplate
            Implements ITemplate
            Public Sub InstantiateIn(ByVal container As Control) Implements ITemplate.InstantiateIn
                Dim checkbox As New ASPxCheckBox
                Dim gridContainer As GridViewDataItemTemplateContainer = CType(container, GridViewDataItemTemplateContainer)
                'Dim empid As String = gridContainer.Grid.GetRowValues(gridContainer.VisibleIndex, "EmpID").ToString()
        checkbox.AllowGrayed = False
        checkbox.CheckedImage.Url = "images/checked_image.png"
        checkbox.UncheckedImage.Url = "images/unchecked_image.png"
        checkbox.CssClass += "customcheckbox"
        checkbox.ID = "DateCheckBox"
        checkbox.ClientSideEvents.CheckedChanged = String.Format("function (s, e) {{ cb.PerformCallback(HiddenEmpID.GetValue() + '|' + year.GetValue() + '|' + month.GetValue() + '|' + '{0}|' + s.GetChecked()); }}", gridContainer.Column.FieldName)
        checkbox.Value = DataBinder.Eval(gridContainer.DataItem, gridContainer.Column.FieldName)
        If checkbox.Value = 1 Then
            checkbox.Checked = True
        Else
            checkbox.Checked = False
        End If
        checkbox.ValueType = GetType(Int32)
        checkbox.ValueUnchecked = 0
        checkbox.ValueChecked = 1              
container.Controls.Add(checkbox)

            End Sub
        End Class

Protected Sub cb_Callback(source As Object, e As CallbackEventArgs)
    Session("par") = e.Parameter.Split("|"c)
End Sub

Проблема:

Я искал в Интернете и попробовал метод ниже, но, похоже, он не работает.

 Protected Sub submitbtn_Click(sender As Object, e As EventArgs)

        ' Dim fieldname1 As String = ""

        If IsPostBack Then

            Dim p() As String = Session("par")


            'Dim p() As String = e.Parameter.Split("|"c)


            'p(0) = empid, p(1) = year, p(2) = month, p(3) = Date, p(4) = Boolean
            If p(4) = True Then
                p(4) = "1"
            Else
                p(4) = "0"
            End If
            Dim query As String = String.Format("UPDATE LeaveSystem SET [{3}] = '{4}', UpdateTime = GETDATE() WHERE EmpID = '{0}' and Year = '{1}' and Month = '{2}' IF @@ROWCOUNT=0 INSERT INTO LeaveSystem (EmpID, Year, Month, [{3}], UpdateTime) values ('{0}', '{1}', '{2}', '{4}', GETDATE())", p(0), p(1), p(2), p(3), p(4))
            SetMssql(query)

        End If


        '' Check exceed 13 days

            Dim count1 As Integer = 0

               For I As Integer = 0 To LeaveSystem.VisibleRowCount - 1

  Dim chkRow As ASPxCheckBox = TryCast(LeaveSystem.FindRowCellTemplateControl(I, Nothing, "cb"), ASPxCheckBox)

            For k As Integer = 2 To LeaveSystem.Columns.Count - 1

                 Dim aheaderCb = TryCast(LeaveSystem.FindHeaderTemplateControl(LeaveSystem.Columns(k), "cb1"), ASPxCheckBox)
            If chkRow.IsVisible = True Then

                If aheaderCb.Checked = True Then

                    count1 = count1 + 1

                End If

            End If

        Next k

    Next I

    End Sub

При выполнении кнопки отправки ссылка на объект, не установленная для экземпляра ошибки объекта, появляется в строке: If chkRow.IsVisible = True Then. Я пытался много раз, но тот же результат появился. Пожалуйста, объясните мне это.

1 Ответ

0 голосов
/ 03 апреля 2019

Попробуйте это

  protected void btnGetRecord_Click(object sender, EventArgs e)
        {
            var checkedRows = (from GridViewRow row in myGrid.Rows
                               let checkbox = (CheckBox)row.FindControl("chkSelect")
                               where checkbox != null && checkbox.Checked == true
                               select row).ToList();


        }

Вы можете конвертировать код в VB.NET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...