我正在尝试允许我的用户使用ASP.Net GridView控件输入大量数据。我正在尝试创建的影响是使GridView控件像电子表格一样。用户可以从列到列以及行到行自由输入数据和选项卡。用户可以使用页面底部的按钮根据需要添加行。表格底部还有一个按钮,可根据需要保存。
为此,我创建了一个带有一堆空行的DataTable,并将其绑定到GridView。 GridView的列是包含文本框的模板列。因此,当页面打开时,它实际上看起来像一个电子表格。当用户点击添加行按钮时,我只需将另外十行添加到GridView绑定的DataTable中,它就像魅力一样。
我遇到的问题是读取用户输入的数据。当用户点击分页链接或更新按钮时,我想用用户输入的数据更新DataTable。这就是我所拥有的。
Private Sub UpdateDataTable()
Dim objCatRow As clsCategoriesRow = Session("gvCategoriesRow")
Dim drQuery() As DataRow = Nothing
Dim drRow As DataRow = Nothing
Dim objRow As GridViewRow = Nothing
Dim intRecNo As Integer = 0
Dim txt As TextBox = Nothing
Dim lbl As Label = Nothing
'Loop through all of the rows in the grid view control
For Each objRow In Me.gvCategories.Rows
'Get the label that contains the identity column
lbl = objRow.Cells(GridColumns.Category).FindControl("lblItemRecNo")
intRecNo = lbl.Text
'Update the datarow bound to this grid view row
'First, query the datarow from the data table
drQuery = objCatRow.Table.Select("recno = " & intRecNo)
'Make sure our query returned a row
If Not IsNothing(drQuery) AndAlso drQuery.Count > 0 Then
'Get the value from the textbox in the grid view
txt = objRow.Cells(GridColumns.Category).FindControl("txtItemCategory")
'Upadte the data row with the value the user entered
'THE VALUE IN txt.Text IS EMPTY. HOW CAN I GET THE VALUE THE USER TYPED IN?
drQuery(0)("Category") = txt.Text
'Get the value from the textbox in the grid view
txt = objRow.Cells(GridColumns.SortORder).FindControl("txtItemSortOrder")
'Upadte the data row with the value the user entered
drQuery(0)("sortorder") = txt.Text
End If
Next
End Sub
问题是这不会返回用户输入的内容。行
txt = objRow.Cells(GridColumns.Category).FindControl(“txtItemCategory”)
返回对模板化列中文本框的引用。但是,它包含先前的值,即视图状态的值,而不是用户键入的值。
如何获取用户输入网格的值?
我想提一下,我知道如何为每一行添加EDIT和UPDATE按钮。如果可以的话,我想避免这样做。我的用户有大量要输入的数据,这种方法会使应用程序无法使用。
提前致谢,
麦克
答案 0 :(得分:0)
你应该替换它:
txt = objRow.Cells(GridColumns.Category).FindControl("txtItemCategory")
用这个
txt = objRow.Cells(GridColumns.Category).FindControl("txtItemCategory").Value
答案 1 :(得分:0)
用户发布的表单数据可在Page.Request.Form.Item集合中找到。 Page.Request.Form.AllKeys列出了与所有表单项值相关联的“键”。
If Page.Request.Form.HasKeys Then
For Each key as String In Page.Request.Form.AllKeys
' step through the keys and use Page.Request.Form.Item(key) to get the data entered
Next
end If
经过测试,我可以在回发时的page.load期间从Request.Form数据或GridView控件获取数据,只要您不在回发时绑定控件,但仅在初始请求期间( “得到”)。
请注意,必须为每个页面请求重新创建控件。只有在页面上重新创建控件并处理控件的ViewState等后,ASP.NET才会使用发布的请求数据来重新填充表单数据控件。