none
gridview点编辑后控件消失,需要重新点一下查询按钮才能显示 RRS feed

  • 问题

  • 我想实现的功能是,输入中文或者英文名点击查询可以生成一条结果,并且可以编辑。点击“显示所有”,可以显示所有人员信息,也可以编辑。现在的问题是,在gridview控件里点“编辑”后gridview控件就消失了,需要再点一次“查询”按钮才能进入编辑状态。我估计问题是出在if not ispostback,但不知道如何解决,望指点一下,谢谢。

    前台

    <%@ Page Title="" Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="hr.aspx.vb" Inherits="hr" %>

    <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

            <style type="text/css">
                .auto-style1 {
                    width: 100%;
                }

                .auto-style2 {
                }

                .auto-style3 {
                    width: 460px;
                    height: 26px;
                }

                .auto-style5 {
                    width: 460px;
                    text-align: center;
                }
            </style>

            <table class="auto-style1">

                <tr>
                    <td class="auto-style5">查询</td>

                    <td class="auto-style5">
                        <asp:LinkButton ID="LinkButton1" runat="server" PostBackUrl="~/hr/increaseHR.aspx">添加员工信息</asp:LinkButton>
                    </td>

                </tr>
                <tr>
                    <td class="auto-style2" colspan="2">请输入员工姓名(中文或英文一个即可)</td>

                </tr>
                <tr>
                    <td class="auto-style2">中文名:<asp:TextBox ID="txtnameC" runat="server"></asp:TextBox>
                    </td>

                    <td class="auto-style2">
                        <asp:Button ID="searchAll" runat="server" Text="显示所有员工" />
                    </td>

                </tr>
                <tr>
                    <td class="auto-style3">英文名:<asp:TextBox ID="txtnameE" runat="server"></asp:TextBox>
                    </td>

                    <td class="auto-style3">
                        <asp:Button ID="btnSearch" runat="server" Text="查询" />
                    </td>

                </tr>
                <tr>
                    <td colspan="2">
                                <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ID" AllowPaging="True">
                                    <Columns>
                                        <asp:BoundField DataField="ID" HeaderText="员工编号" ReadOnly="true" />
                                        <asp:BoundField DataField="nameC" HeaderText="中文名"  />
                                        <asp:BoundField DataField="nameE" HeaderText="英文名"  />
                                        <asp:BoundField DataField="age" HeaderText="年龄"  />
                                        <asp:BoundField DataField="sex" HeaderText="性别"  />
                                        <asp:BoundField DataField="sfz" HeaderText="身份证号"  />
                                        <asp:BoundField DataField="school" HeaderText="毕业院校"  />
                                        <asp:BoundField DataField="education" HeaderText="学历"  />
                                        <asp:BoundField DataField="marital" HeaderText="婚姻状态"  />
                                        <asp:BoundField DataField="hometown" HeaderText="籍贯"  />
                                        <asp:BoundField DataField="entryT" HeaderText="入职时间"  />
                                        <asp:CommandField ShowEditButton="True" />
                                    </Columns>
                                </asp:GridView>
                        <br />
                    </td>
                </tr>
            </table>
    </asp:Content>

    后台

    Imports System
    Imports System.Data
    Imports System.Data.SqlClient
    Imports System.Web.Configuration
    Partial Class hr
        Inherits System.Web.UI.Page
        Dim DB As New DBhandle()

        Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
            If Not IsPostBack Then

            End If
        End Sub

        Protected Sub searchAll_Click(sender As Object, e As EventArgs) Handles searchAll.Click
            Dim sqlstr As String = "SELECT * FROM HR"
            GridView1.DataSource = DB.GetDataSet(sqlstr, "hr")
            GridView1.DataBind()
        End Sub

        Protected Sub btnSearch_Click(sender As Object, e As EventArgs) Handles btnSearch.Click
            Dim nameE As String = txtnameE.Text
            Dim nameC As String = txtnameC.Text
            Dim sqlStr As String = "SELECT * FROM hr WHERE nameE= '" & nameE & "' Or nameC= '" & nameC & "'"
            GridView1.DataSource = DB.GetDataSet(sqlStr, "hr")
            GridView1.DataBind()
        End Sub

        Protected Sub GridView1_PageIndexChanging(sender As Object, e As GridViewPageEventArgs) Handles GridView1.PageIndexChanging
            GridView1.PageIndex = e.NewPageIndex
            GridView1.DataBind()
        End Sub



        Protected Sub GridView1_RowCancelingEdit(sender As Object, e As GridViewCancelEditEventArgs) Handles GridView1.RowCancelingEdit
            GridView1.EditIndex = -1
            GridView1.DataBind()
        End Sub

        Protected Sub GridView1_RowEditing(sender As Object, e As GridViewEditEventArgs) Handles GridView1.RowEditing
            GridView1.EditIndex = e.NewEditIndex
            GridView1.DataBind()
        End Sub

        Protected Sub GridView1_RowUpdating(sender As Object, e As GridViewUpdateEventArgs) Handles GridView1.RowUpdating
            '获取编辑行关键字的值
            Dim ID As String = GridView1.DataKeys(e.RowIndex).Value.ToString()
            '获取文本框中的内容
            Dim nameC As String = DirectCast(GridView1.Rows(e.RowIndex).Cells(1).Controls(0), TextBox).Text.ToString()
            Dim nameE As String = DirectCast(GridView1.Rows(e.RowIndex).Cells(2).Controls(0), TextBox).Text.ToString()
            Dim age As String = DirectCast(GridView1.Rows(e.RowIndex).Cells(3).Controls(0), TextBox).Text.ToString()
            Dim sex As String = DirectCast(GridView1.Rows(e.RowIndex).Cells(4).Controls(0), TextBox).Text.ToString()
            Dim sfz As String = DirectCast(GridView1.Rows(e.RowIndex).Cells(5).Controls(0), TextBox).Text.ToString()
            Dim school As String = DirectCast(GridView1.Rows(e.RowIndex).Cells(6).Controls(0), TextBox).Text.ToString()
            Dim education As String = DirectCast(GridView1.Rows(e.RowIndex).Cells(7).Controls(0), TextBox).Text.ToString()
            Dim marital As String = DirectCast(GridView1.Rows(e.RowIndex).Cells(8).Controls(0), TextBox).Text.ToString()
            Dim hometown As String = DirectCast(GridView1.Rows(e.RowIndex).Cells(9).Controls(0), TextBox).Text.ToString()
            Dim entryT As String = DirectCast(GridView1.Rows(e.RowIndex).Cells(10).Controls(0), TextBox).Text.ToString()
            Dim sqlStr As String = "UPDATE hr SET nameC='" & nameC & "',nameE='" & nameE & "',age='" & age & "',sex='" & sex & "',sfz='" & sfz & "',school='" & school & "',education='" & education & "',marital='" & marital & "',hometown='" & hometown & "',entryT='" & entryT & "'where ID =" & ID
            Dim connectionString As String = WebConfigurationManager.ConnectionStrings("Sdb").ConnectionString
            Dim con As New SqlConnection(connectionString)
            Dim cmd As New SqlCommand(sqlStr, con)
            Try
                con.Open()
                cmd.ExecuteNonQuery()
                MsgBox("修改成功")
            Catch ex As Exception
                MsgBox(ex.Message, MsgBoxStyle.Critical, "修改失败")
            Finally
                con.Close()
            End Try

            GridView1.EditIndex = -1
            GridView1.DataBind()
        End Sub

    End Class

       


    • 已编辑 rocky9527 2014年5月23日 3:31 修改
    • 已移动 Fred Bao 2014年5月26日 1:26 ASP.NET Related
    2014年5月23日 3:19

答案

  • 你好,

     GridView1.EditIndex = e.NewEditIndex
     GridView1.DataBind()
    或者
     GridView1.EditIndex = -1
     GridView1.DataBind()

    根据你提供的代码, 我见你在每个gridview的事件里都重新Bind数据了, 但是你在绑定之前没有给gridview一个datasource。 

    GridView1.EditIndex =e.NewEditIndex
    GridView1.DataSource=your data source
    GridView1.DataBind()

    至于如何使用gridview的edit 事件, 你可以参考下面的文档。

    http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.gridview.rowediting(v=vs.110).aspx

    谢谢!

    你好,首先感谢回复。我是一个初学者,所以代码有些东拼西凑

    GridView1.EditIndex =e.NewEditIndex
    GridView1.DataSource=your data source (我在其他的例子中没有看到有这一句,所以也就没有添加数据源
    GridView1.DataBind()

    至于指定数据源我是通过下面的语句:

     GridView1.DataSource = DB.GetDataSet(sqlStr, "hr")

    针对getdataset我写了个方法:

    Public Function GetDataSet(sqlstr As String, TableName As String) As DataSet
            Dim myconn As SqlConnection = GetConnection()
            myconn.Open()
            Dim adapt As New SqlDataAdapter(sqlstr, myconn)
            Dim ds As New DataSet()
            adapt.Fill(ds, TableName)
            myconn.Close()
            Return ds
        End Function


    • 已标记为答案 rocky9527 2015年3月26日 3:54
    2014年5月26日 3:56

全部回复

  • 你好,

     GridView1.EditIndex = e.NewEditIndex
     GridView1.DataBind()
    或者
     GridView1.EditIndex = -1
     GridView1.DataBind()

    根据你提供的代码, 我见你在每个gridview的事件里都重新Bind数据了, 但是你在绑定之前没有给gridview一个datasource。 

    GridView1.EditIndex =e.NewEditIndex
    GridView1.DataSource=your data source
    GridView1.DataBind()

    至于如何使用gridview的edit 事件, 你可以参考下面的文档。

    http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.gridview.rowediting(v=vs.110).aspx

    谢谢!

    2014年5月26日 1:41
  • 你好,

     GridView1.EditIndex = e.NewEditIndex
     GridView1.DataBind()
    或者
     GridView1.EditIndex = -1
     GridView1.DataBind()

    根据你提供的代码, 我见你在每个gridview的事件里都重新Bind数据了, 但是你在绑定之前没有给gridview一个datasource。 

    GridView1.EditIndex =e.NewEditIndex
    GridView1.DataSource=your data source
    GridView1.DataBind()

    至于如何使用gridview的edit 事件, 你可以参考下面的文档。

    http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.gridview.rowediting(v=vs.110).aspx

    谢谢!

    你好,首先感谢回复。我是一个初学者,所以代码有些东拼西凑

    GridView1.EditIndex =e.NewEditIndex
    GridView1.DataSource=your data source (我在其他的例子中没有看到有这一句,所以也就没有添加数据源
    GridView1.DataBind()

    至于指定数据源我是通过下面的语句:

     GridView1.DataSource = DB.GetDataSet(sqlStr, "hr")

    针对getdataset我写了个方法:

    Public Function GetDataSet(sqlstr As String, TableName As String) As DataSet
            Dim myconn As SqlConnection = GetConnection()
            myconn.Open()
            Dim adapt As New SqlDataAdapter(sqlstr, myconn)
            Dim ds As New DataSet()
            adapt.Fill(ds, TableName)
            myconn.Close()
            Return ds
        End Function


    • 已标记为答案 rocky9527 2015年3月26日 3:54
    2014年5月26日 3:56