1
 Protected Sub grdView_PageIndexChanging(sender As Object, e As GridViewPageEventArgs) Handles grdView.PageIndexChanging

        grdView.SelectedIndex = -1
        grdView.PageIndex = e.NewPageIndex

        ' To persist DDL values at paging using datatable 

        Dim Data As New DataTable
        Data.Columns.Add("RowIndex", Type.GetType("System.Int32"))
        Data.Columns.Add("SelectedValue", Type.GetType("System.String"))

        For Each Row As GridViewRow In grdView.Rows
            Dim ddl As DropDownList = DirectCast(Row.FindControl("ddlSample"), ComboBox)
            If ddl.SelectedValue <> ""  Then
                Dim Rows As DataRow = Data.NewRow
                Rows("RowIndex") = Row.RowIndex
                Rows("SelectedValue") = ddl.SelectedValue
                Data.Rows.Add(Rows)
            End If
        Next
 ' Passing the datatable to session  
 Session("MYDataTable") = Data

 grdView.DataSource = grdDataSource
            grdView.DataBind()
            If Session("MYDataTable") IsNot Nothing AndAlso Session("MYDataTable") IsNot DBNull.Value Then
                Data = CType(Session("MYDataTable"), DataTable)
                For Each row In Data.Rows
                    If e.NewPageIndex = row("PageIndex") Then
                        Dim ddl As DropDownList = DirectCast(grdView.Rows(row("RowIndex")).FindControl("ddlSample"), DropDownList)
                        ddl.SelectedValue = row("SelectedValue")
                    End If
                Next
            End If

上面的代码是我用于持久化 DropDownList 值的代码,但它没有按预期工作。

在我的GridView我有两列

第一列的详细信息:我有员工姓名列表

第二列的详细信息:它的每一行都有一个下拉列表,其中包含许多项目。

在我的网格中,我有近 100 个值,所以我已经设置allowPaging="true"并设置了pagesize="10".

我面临的问题是

  • 第 1 步: 我在第 0 页的 rowindex 2 的下拉列表中选择一个值
  • 第 2 步:将页面更改为 5,根据我的代码,我在第 0 页为 rowindex 2 选择的值也出现在第 5 页的 rowindex 2 中。

但我想要的是

  • 第 1 步: 我在第 0 页的 rowindex 2 的下拉列表中选择一个值
  • 第 2 步:将页面更改为 5,不应选择任何值,因为我没有在其中选择任何值。
  • 第 3 步:我再次返回第 0 页,Rowindex 2 中 ddl 的值应该具有先前选择的值。

编辑

如此处所述,我正在保留字典中的值..!!

 Dim ddlValues As New Dictionary(Of String, Integer)
            For rowIndex As Integer = 0 To grdOnlineVoter.Rows.Count
                Dim ddl As ComboBox = grdView.Rows(rowIndex).FindControl("ddlsample")
                If ddl IsNot Nothing Then
                    If ddl.SelectedIndex > 0 Then
                        Dim ddlIndex As Integer = rowIndex
                        ddlValues.Add(ddl.SelectedValue, ddlIndex)
                    End If
                End If
            Next

但我无法将其重新填充到下拉列表

4

1 回答 1

0

好的,根据您在这里显示的内容,我得出了这个结论。

您正在将字典中的值保存到特定的行号。那是0-9。但是,行号不考虑页码。所以我建议您执行以下操作:(更改在第 6 行)

Dim ddlValues As New Dictionary(Of String, Integer)
For rowIndex As Integer = 0 To grdOnlineVoter.Rows.Count
  Dim ddl As ComboBox = grdView.Rows(rowIndex).FindControl("ddlsample")
  If ddl IsNot Nothing Then
      If ddl.SelectedIndex > 0 Then
          Dim ddlIndex As Integer = rowIndex + (GridView1.PageIndex * 10)
          ddlValues.Add(ddl.SelectedValue, ddlIndex)
      End If
  End If
Next

现在第 1 页将具有值:0-9

第 2 页的值为 10-19 等。

于 2014-04-04T10:19:32.530 回答