在GridView的PageIndexChanged中保留DropDownList值 [英] Persisting DropDownList Value in PageIndexChanged of GridView
问题描述
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>
编辑
所提及的词典中的值 此处!!
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屋!