ASP.net Gridview ..奇怪的东西

时间:2011-08-03 16:55:34

标签: asp.net vb.net search gridview session-variables

我有一个gridview并使用会话将变量从页面传递到编辑页面。这很有效,直到你搜索一个数字。当您在gridview中搜索正确的记录时,但是当您单击编辑时,它会传递错误的记录。

Private Sub gridview1_RowEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles GridView1.RowEditing
    Session("wr_id") = GridView1.Rows(e.NewEditIndex).Cells(2).Text & "~\/~" & _
                GridView1.Rows(e.NewEditIndex).Cells(3).Text & "~\/~" & _
                GridView1.Rows(e.NewEditIndex).Cells(4).Text & "~\/~" & _
                GridView1.Rows(e.NewEditIndex).Cells(5).Text & "~\/~" & _
                GridView1.Rows(e.NewEditIndex).Cells(6).Text & "~\/~" & _
                GridView1.Rows(e.NewEditIndex).Cells(7).Text & "~\/~" & _
                GridView1.Rows(e.NewEditIndex).Cells(8).Text & "~\/~" & _
                GridView1.Rows(e.NewEditIndex).Cells(9).Text & "~\/~" & _
                GridView1.Rows(e.NewEditIndex).Cells(10).Text & "~\/~" 
                Response.Redirect("WorkEdit.aspx")
End Sub

GRIDVIEW页面

Protected Sub btnSubmit_Click(sender As Object, e As System.EventArgs) Handles btnSubmit.Click
    Dim strPost As Boolean = HiddenSearch.Value
    If strPost = True Then
        Dim strNumber As String
        Dim Dropdown As String
        strNumber = Search_text.Text
        Dropdown = Search_Field.SelectedValue
        If Dropdown = "WO#" Then
            Convert.ToInt32(strNumber)
        End If
        Try
            SqlDataSource1.SelectCommand = "SELECT * FROM [WorkOrderLog] WHERE " + Dropdown + " = '" + strNumber + "' ORDER BY [WO#] DESC"
            SqlDataSource1.Select(DataSourceSelectArguments.Empty)
            SqlDataSource1.DataBind()
            GridView1.DataBind()
        Catch
            'output messagebox for debug
            Dim strPrompt As String
            strPrompt = "Something bad happened, check search text and try again."
            Dim strScript As String = "<script language=JavaScript>"
            strScript += "alert(' " & strPrompt & "');"
            strScript += "</script>"
            Search_text.Focus()
        End Try
    Else
        Search_text.Focus()
    End If


End Sub

WORDEDIT页面

Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    'change submit button on mouseover events
    Submit_Button.Attributes.Add("onmouseover", "this.src='../images/Submitdown.png'")
    Submit_Button.Attributes.Add("onmouseout", "this.src='../images/Submitup.png'")
    'change clear button on mouseover events
    Clear.Attributes.Add("onmouseover", "this.src='../images/Cancel(down).png'")
    Clear.Attributes.Add("onmouseout", "this.src='../images/Cancel(up).png'")
    Call Keypress_ALegal()
    Call Keypress_ASite()
    errorWOName.Text = HiddenWOName.Value
    errorLegalDesc.Text = HiddenLegalDesc.Value
    errorLocationNumber.Text = HiddenLocationNumber.Value
    errorDesc.Text = HiddenDesc.Value
    errorSiteNumber.Text = HiddenSiteNumber.Value

    If Not Page.IsPostBack Then

        'Get session info
        lblID.Text = "Session Variable Was Lost"
        If (Session("wr_id") <> "") Then
            Dim strSession As String = Session("wr_id")
            Dim sessionArray As Array
            'split session into array at ~\/~ 
            sessionArray = Split(Session("wr_id"), "~\/~")
            'assign textbox/dropdowns values passed from split variables
            lblID.Text = sessionArray(0)
            'WO Name
            If sessionArray(1) = "&nbsp;" Then
                WOName.Text = ""
            Else
                WOName.Text = sessionArray(1)
            End If
            Location.Text = sessionArray(2)
            'LegalDesc
            If sessionArray(3) = "&nbsp;" Then
                LegalDesc.Text = ""
            Else
                LegalDesc.Text = sessionArray(3)
            End If
            'Trans ADDED
            If sessionArray(4) = "&nbsp;" Then
                TransADDED.Text = ""
            Else
                TransADDED.Text = sessionArray(4)
            End If
            'Trans Retired
            If sessionArray(5) = "&nbsp;" Then
                TransRETIRED.Text = ""
            Else
                TransRETIRED.Text = sessionArray(5)
            End If
            If sessionArray(6) = "&nbsp;" Then
                Description.Text = ""
            Else
                Description.Text = sessionArray(6)
            End If
            If sessionArray(7) = "1/1/1900 12:00:00 AM" Or sessionArray(7) = "&nbsp;" Then
                Started.Text = ""
            Else
                Started.Text = (CType((sessionArray(7)), DateTime).ToString("MM/dd/yyyy HH:mm tt"))
            End If
            If sessionArray(8) = "1/1/1900 12:00:00 AM" Or sessionArray(8) = "&nbsp;" Then
                Completed.Text = ""
            ElseIf sessionArray(8) = "&nbsp;" Then
                Completed.Text = ""
            Else
                Completed.Text = (CType((sessionArray(8)), DateTime).ToString("MM/dd/yyyy HH:mm tt"))
            End If
            StakedBy.SelectedValue = sessionArray(9)

我意识到并不是所有的代码都粘贴在这里,因为它需要太多的空间。有任何想法吗?我猜这与e.NewEditIndex

有关

2 个答案:

答案 0 :(得分:0)

您的代码看起来很好。 Session(“wr_id”)是实际代码,还是“wr_id”模拟代码?

我问的原因是因为会话值可以通过字符串或索引访问。

  • 会话(“id”)将使用“id”键
  • 访问会话变量
  • 会话(8)将访问会话中的第9个元素

如果您的代码使用Session(selectedID)selectedID是填充的object变量,则会根据selectedID是否更改您访问会话变量的方式数字或字符串

<强>更新

查看您是否在代码中的任何其他位置绑定(例如,您的Page_Load事件)。在控件的编辑事件触发之前,您很可能会使用新数据重新绑定网格

答案 1 :(得分:0)

该问题的解决方案是将页面加载包装在if,ispostback语句中。谢谢你的帮助rkw。

   Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    If IsPostBack Then
        If Search_text.Text = "" Then
            SqlDataSource1.SelectCommand = "SELECT * FROM [WorkOrderLog] ORDER BY [WO#] DESC"
            SqlDataSource1.Select(DataSourceSelectArguments.Empty)
            SqlDataSource1.DataBind()
            GridView1.DataBind()
        Else
        End If
    End If
        If Not IsPostBack Then
            SqlDataSource1.SelectCommand = "SELECT * FROM [WorkOrderLog] ORDER BY [WO#] DESC"
            SqlDataSource1.Select(DataSourceSelectArguments.Empty)
            SqlDataSource1.DataBind()
            GridView1.DataBind()
        End If
End Sub