在GridView的PageIndexChanged中保留DropDownList值 [英] Persisting DropDownList Value in PageIndexChanged of GridView

查看:127
本文介绍了在GridView的PageIndexChanged中保留DropDownList值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  Protected Sub grdView_PageIndexChanging(sender As Object,e As GridViewPageEventArgs)处理grdView.PageIndexChanging 

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

'使用数据表在分页时保留DDL值

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

作为GridViewRow的每一行在grdView.Rows
Dim dd As DropDownList = DirectCast(Row.FindControl(ddlSample),ComboBox)
如果ddl.SelectedValue<> (RowIndex)= Row.RowIndex
行(SelectedValue)= ddl.SelectedValue
Data.Rows .Add(行)
结束如果
下一个
'将数据表传递给会话
Session(MYDataTable)= Data

grdView.DataSource = grdDataSource
grdView.DataBind()
如果Session(MYDataTable)IsNot Nothing AndAlso Session(MYDataTable)IsNot DBNull.Value Then
Data = CType(Session(MYDataTable), DataTable)
对于每一行Data.Rows
如果e.NewPageIndex = row(PageIndex)然后
Dim ddl As DropDownList = DirectCast(grdView.Rows(row(RowIndex)) ).FindControl(ddlSample),DropDownList)
ddl.SelectedValue = row(SelectedValue)
End If
Next
结束如果

上面的代码是我用于持久DropDownList值的代码,但它不起作用如预期的那样。

在我的 GridView 中,我有两个列

第一栏详情:我有员工姓名列表

第二栏详情:每行有一个dropDownlist很多项目。



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



我面临的问题是




  • 第1步:我在第0页的rowindex 2的下拉列表中选择一个值

  • 第2步:将页面更改为5,我在第0页为rowindex 2选择的值也出现在第5页的rowindex 2中,代码。


但我想要的是我在第0页的rowindex 2的下拉列表中选择了一个值。 li>

  • 第2步:将页面更改为5,不应选择任何值,因为我没有选择任何值。
  • 步骤3:我再次返回第0页,Rowindex 2中ddl的值应该具有先前选定的值。


    编辑

    所提及的词典中的值 此处!!

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

    但我无法将其重新填充到Dropdownlist中

    解决方案

    好的,根据你在这里展示的内容,我已经得出了这个结论。

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

    pre $ Dim ddlValues As New Dictionary(Of String,Integer )
    对于rowIndex As Integer = 0对于grdOnlineVoter.Rows.Count
    Dim ddl As ComboBox = grdView.Rows(rowIndex).FindControl(ddlsample)
    如果ddl IsNot Nothing则
    如果ddl.SelectedIndex> 0然后
    Dim ddIndex As Integer = rowIndex +(GridView1.PageIndex * 10)
    ddlValues.Add(ddl.SelectedValue,ddlIndex)
    End If
    End If
    下一个

    现在页面1的值为:0-9



    第2页将有值10-19等。


     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
    

    The above Code is the code I'm having for Persisting DropDownList value but it is not working as expected.

    In my GridView i have two Columns

    Details of First column : I have list of employee names

    Details of Second Column : It has a dropDownlist in each row with many items in it.

    In my grid i have nearly 100 values, So i have set allowPaging="true" and have set pagesize="10".

    The problem what I'm facing is

    • Step 1 : I'm selecting a value in dropdownlist of rowindex 2 in page 0
    • Step 2 : changing the page to 5, the value I selected in page 0 for the rowindex 2 also appears in the page 5 for the rowindex 2 as per my code.

    But what i want is

    • Step 1 : I'm selecting a value in dropdownlist of rowindex 2 in page 0
    • Step 2 : changing the page to 5, no value should be selected as i haven't selected any values in it.
    • Step 3 : I i go back again to Page 0 the value of ddl in Rowindex 2 should have the previously selected value.

    EDIT

    I'm peristing the Values in Dictionary as mentioned here..!!

     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
    

    But i'm unable to repopulate it to the Dropdownlist

    解决方案

    Alright, based on what you have displayed here I have reached this conclusion.

    You are saving the values to the Dictionary to the specific Row number. That is 0-9. However, row numbers does not take pagenumber into consideration. So I recommend you to do the following: (Change is on row 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
    

    Now page 1 will have values: 0-9

    Page 2 will have values 10-19 etc.

    这篇关于在GridView的PageIndexChanged中保留DropDownList值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆