【问题标题】:ASP.net Gridview.. something weirdASP.net Gridview .. 一些奇怪的东西
【发布时间】:2011-09-14 20:03:29
【问题描述】:

我有一个 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 有关

【问题讨论】:

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


    【解决方案1】:

    您的代码看起来不错。 Session("wr_id") 是实际代码,还是 "wr_id" 模拟代码?

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

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

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

    更新

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

    【讨论】:

    • Session("wr_id") 是实际代码。会话中包含的是当前记录的字符串与“~\/~”连接,用户单击“编辑”,然后转发到编辑页面,在“~\/~”处拆分字符串。问题是用户搜索时,发送的索引号不正确。
    • 您可能需要发布更多代码。 GridView_DataBiding(Bound) 事件发生了什么?或者为 GridView 定义的任何其他事件?
    【解决方案2】:

    该问题的解决方案是将页面加载包装在 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-13
      • 1970-01-01
      • 2017-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多