html代码:<%@ Page Language="vb" AutoEventWireup="false" Codebehind="test.aspx.vb" Inherits="SPEC.NET.test"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<title>test</title>
<meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<FONT face="宋体">
<asp:DataGrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 32px; POSITION: absolute; TOP: 24px" runat="server"
AutoGenerateColumns="False"  ></asp:DataGrid></FONT>
</form>
</body>
</HTML>
后台vb代码:
Public Class test
    Inherits System.Web.UI.Page
    Public Conn As System.Data.SqlClient.SqlConnection#Region " Web 窗体设计器生成的代码 "    '该调用是 Web 窗体设计器所必需的。
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()    End Sub
    Protected WithEvents DataGrid1 As System.Web.UI.WebControls.DataGrid    '注意: 以下占位符声明是 Web 窗体设计器所必需的。
    '不要删除或移动它。
    Private designerPlaceholderDeclaration As System.Object    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
        'CODEGEN: 此方法调用是 Web 窗体设计器所必需的
        '不要使用代码编辑器修改它。
        InitializeComponent()
    End Sub#End Region    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        '在此处放置初始化页的用户代码
        If Not IsPostBack Then
            Binddata()
        Else
            'Binddata()
        End If
    End Sub
    Private Sub Binddata()
        Dim DGadp As System.Data.SqlClient.SqlDataAdapter
        Dim Dset As Data.DataSet
        Dim Sqlstr1 As String
        Dim Col As System.Web.UI.WebControls.BoundColumn
        Dim Editbutton As System.Web.UI.WebControls.EditCommandColumn
        Dim i As Integer
        Conn = New System.Data.SqlClient.SqlConnection(ConfigurationSettings.AppSettings("Connstring"))
        Conn.Open()
        DGadp = New System.Data.SqlClient.SqlDataAdapter("select * from SPEC_log", Conn)
        Dset = New Data.DataSet
        DGadp.Fill(Dset, "DG")
        For i = 0 To Dset.Tables(0).Columns.Count - 1 ' 循环创建列
            Col = New System.Web.UI.WebControls.BoundColumn
            Col.HeaderText = Dset.Tables(0).Columns(i).ColumnName
            Col.DataField = Dset.Tables(0).Columns(i).ColumnName
            DataGrid1.Columns.Add(Col)
        Next
        '创建button
        Editbutton = New System.Web.UI.WebControls.EditCommandColumn
        Editbutton.HeaderText = "Edit"
        Editbutton.EditText = "Edit"
        Editbutton.CancelText = "Cancel"
        Editbutton.UpdateText = "Update"
        DataGrid1.Columns.Add(Editbutton)
'绑定数据
        DataGrid1.DataSource = Dset.Tables(0)
        DataGrid1.DataBind()
        Conn.Close()
    End Sub    Private Sub DataGrid1_EditCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.EditCommand
        DataGrid1.EditItemIndex = e.Item.ItemIndex
    End Sub    Private Sub DataGrid1_CancelCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.CancelCommand
        DataGrid1.EditItemIndex = -1
    End Sub
End Class=======================================================
要求实现效果,点击edit列,进入修改模式现在的问题:1.如果在Page_load中只在not ispostback中实行绑定的话,在点击edit时候,数据就丢失了。返回空白页面
   2.如果在page_load中else后也绑定数据的话,为什么要点2次edit才出现编辑模式?而且cancel功能也不起作用(即点了没反应),而且编辑的行是错乱的。请高手帮忙看看,应该很多人都碰到过这类问题。不知道大家是怎么解决的?谢谢啦

解决方案 »

  1.   

    Private Sub DataGrid1_EditCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.EditCommand
            DataGrid1.EditItemIndex = e.Item.ItemIndex
        End Sub这里DataGrid1.EditItemIndex = e.Item.ItemIndex后要重新绑定数据Binddata()
    所有的类似事件里面都要重新绑定数据的
    Private Sub DataGrid1_EditCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.EditCommand
            DataGrid1.EditItemIndex = e.Item.ItemIndex
            Binddata()
        End Sub    Private Sub DataGrid1_CancelCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.CancelCommand
            DataGrid1.EditItemIndex = -1
            Binddata()
        End Sub
      

  2.   

    恩,我自己也研究出来了,
    把你后面加的binddata()改成DataGrid1.DataBind()就可以了,不然回重复出现一倍的列.不过谢谢你了