代码如下:
----------------
office.aspx
-------------------<%@ Page Language="VB" Trace="false" Inherits="BWSLib.OFFICEPage" src="Office.vb"  AutoEventWireUp="false" %>
<%@ Register TagPrefix="expo" Namespace="BWSLib.Controls" Assembly="MyEditableGrid" %><HTML>
<HEAD>
<title>Country</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">
<link rel="stylesheet" href="../css/register.css">
<style>
INPUT { BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; FONT-SIZE: xx-small; BORDER-LEFT: black 1px solid; BORDER-BOTTOM: black 1px solid; FONT-FAMILY: verdana }A:hover { COLOR: red; TEXT-DECORATION: underline }
A { TEXT-DECORATION: none }
</style>
</HEAD>
<BODY bgcolor="ivory" link="blue" vlink="blue">
<form runat="server" ID="Form2">
<P><FONT face="宋体"></FONT>&nbsp;</P>
<P>&nbsp;</P>
<P align="center">
<asp:Image id="Image1" runat="server" ImageUrl="../Img/log.gif"></asp:Image><BR>
<strong>Office Management<BR>
</strong>
</P>
<P align="center">
<font face="Verdana, Helvetica, sans-serif"><strong>Please Select A Country</strong> :</font> 
<asp:DropDownList id="DropDownList1"
   runat="server" autopostback="true"
   Font-Name = "Verdana, Helvetica, sans-serif"
   Font-Size = "xx-small"       
     ></asp:DropDownList><expo:MyEditableGrid id="grid" runat="server" 
AutoGenerateColumns="false"
PageSize="5"
Font-Name = "Verdana, Helvetica, sans-serif"
Font-Size = "xx-small"
DataKeyField="OFFICE_ID"
CellSpacing="0" CellPadding="3"
BorderStyle="solid" BorderColor="skyblue" BorderWidth="1" GridLines="both"
OnInitRow="InitRow"
OnUpdateView="UpdateView"
OnSaveData="SaveData"
OnInsertData="InsertData"
OnDeleteData="DeleteData">
<COLUMNS>
<ASP:BOUNDCOLUMN runat="server" headertext="ID" datafield="OFFICE_ID" readonly="true" />
<ASP:BOUNDCOLUMN runat="server" headertext="Office Code" datafield="OFFICE_CODE" />
<ASP:BOUNDCOLUMN runat="server" headertext="Exchange" datafield="OFFICE_EXCHANGE" />
<ASP:BOUNDCOLUMN runat="server" headertext="Office Name" datafield="OFFICE_NAME" />
<ASP:BOUNDCOLUMN runat="server" headertext="Country"  readonly="true" datafield="COUNTRY_CODE" />
</COLUMNS>  
<HEADERSTYLE backcolor="skyblue" 
  font-name= "Verdana, Helvetica, sans-serif"
  font-size="7pt"
  font-bold="true" />
<ITEMSTYLE backcolor="#eeeeee" />
<PAGERSTYLE backcolor="skyblue" 
 font-size="10pt" 
 font-name="webdings" 
 PrevPageText="3" 
 NextPageText="4" />
</EXPO:MYEDITABLEGRID>
<asp:linkbutton runat="server" 
    Font-Name="verdana"
    Font-Size="x-small" 
    Text="Insert" 
    onclick="OnInsert"
    id="Linkbutton1" />
</P>
</form>
</BODY>
</HTML>

解决方案 »

  1.   

    接上
    office.vb
    -------------------------
    Imports System
    Imports System.Web.UI
    Imports System.Web.UI.WebControls
    Imports System.Text
    Imports System.Data
    Imports System.Data.OleDb
    Imports System.Data.SqlClient
    Imports BWSLib.Controls
    Imports System.ConfigurationNamespace BWSLibPublic Class OFFICEPage
            Inherits Page
            ' Declare as Public or Protected members all 
            ' the controls in the layout
            Protected grid As MyEditableGrid
            Protected WithEvents Linkbutton1 As System.Web.UI.WebControls.LinkButton
            Protected WithEvents DropDownList1 As System.Web.UI.WebControls.DropDownList
            Protected m_connString As String
            Dim CountryIDParam As Integer
            ' Page OnLoad
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
            m_connString = ConfigurationSettings.AppSettings("CRMSQLOLEDBStrconn")
               If Not IsPostBack Then
                 Bindlist(DropDownList1, "COUNTRY_NAME", "COUNTRY_ID", "SELECT * FROM COUNTRY_TAB")
                 CountryIDParam = 1
                 DataFromSourceToMemory(CountryIDParam)
                 UpdateDataView()
                Else
                 grid.CurrentPageIndex = 0
                 If CountryIDParam <> Get_DropDownList1Value() Then
                     CountryIDParam = DropDownList1.SelectedValue
                     DataFromSourceToMemory(CountryIDParam)
                     UpdateDataView()
                  End If
                End If
                grid.CurrentPageIndex = 0
            End Sub        Private Function Get_DropDownList1Value() As Integer
                Return DropDownList1.SelectedValue
            End Function        ' DataFromSourceToMemory
            Private Sub DataFromSourceToMemory(ByVal idstr As Integer)
                ' Gets rows from the data source
                Dim oDS As DataSet = PhysicalDataRead(idstr)
                ' Stores it in the Cache cache
                Cache("MyData") = oDS
            End Sub
            ' PhysicalDataRead
            Private Function PhysicalDataRead(ByVal idstr As Integer) As DataSet
                ' Command  and connection string
                Dim strCmd As String = "SELECT * FROM OFFICE_TAB,COUNTRY_TAB WHERE OFFICE_TAB.OFFICE_COUNTRYID=COUNTRY_TAB.COUNTRY_ID AND COUNTRY_TAB.COUNTRY_ID= " & idstr
                Dim da As OleDbDataAdapter = New OleDbDataAdapter(strCmd, m_connString)
                Dim ds As DataSet = New DataSet
                da.Fill(ds, "OFFICE_TAB")            Return ds
            End Function
            ' Returns data
            Private Function GetData() As DataView
                ' Retrieves the data
                Dim ds As DataSet = CType(Cache("MyData"), DataSet)
                Dim dv As DataView = ds.Tables("OFFICE_TAB").DefaultView
                Return dv
            End Function        ' Refresh the UI
            Private Sub UpdateDataView()
                grid.DataSource = GetData()
                grid.DataBind()
            End Sub        '''''''''''    EVENT HANDLERS 
            ' EVENT HANDLER: SaveData
            Public Sub SaveData(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
                Dim sb As StringBuilder = New StringBuilder("")
                sb.Append("UPDATE OFFICE_TAB SET ")
                sb.Append("OFFICE_CODE='{0}',")
                sb.Append("OFFICE_EXCHANGE='{1}',")
                sb.Append("OFFICE_NAME      ='{2}' ")
                sb.Append("WHERE OFFICE_ID={3}")
                Dim cmd As String = sb.ToString()            Dim OfficeCode As TextBox = CType(e.Item.Cells(1).Controls(0), TextBox)
                Dim OfficeExchange As TextBox = CType(e.Item.Cells(2).Controls(0), TextBox)
                Dim OfficeName As TextBox = CType(e.Item.Cells(3).Controls(0), TextBox)            cmd = String.Format(cmd, OfficeCode.Text, OfficeExchange.Text, OfficeName.Text, grid.DataKeys(e.Item.ItemIndex))            ' Executes the command
                Dim conn As OleDbConnection = New OleDbConnection(m_connString)
                Dim c As OleDbCommand = New OleDbCommand(cmd, conn)
                c.Connection.Open()
                c.ExecuteNonQuery()
                c.Connection.Close()            DataFromSourceToMemory(CountryIDParam)
            End Sub
      

  2.   

    接上        ' EVENT HANDLER: InsertData
            Public Sub InsertData(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)            Dim sb As StringBuilder = New StringBuilder("")
                sb.Append("INSERT INTO OFFICE_TAB (OFFICE_CODE, OFFICE_EXCHANGE,OFFICE_NAME,OFFICE_COUNTRYID) VALUES(")
                sb.Append("'{0}', '{1}', '{2}',{3})")            Dim cmd As String = sb.ToString()
                Dim OfficeCode As TextBox = CType(e.Item.Cells(1).Controls(0), TextBox)
                Dim OfficeExchange As TextBox = CType(e.Item.Cells(2).Controls(0), TextBox)
                Dim OfficeName As TextBox = CType(e.Item.Cells(3).Controls(0), TextBox)
                cmd = String.Format(cmd, OfficeCode.Text, OfficeExchange.Text, OfficeName.Text, CountryIDParam)            ' Executes the command
                Dim conn As OleDbConnection = New OleDbConnection(m_connString)
                Dim c As OleDbCommand = New OleDbCommand(cmd, conn)
                c.Connection.Open()
                c.ExecuteNonQuery()
                c.Connection.Close()            DataFromSourceToMemory(CountryIDParam)
            End Sub
            ' EVENT HANDLER: DeleteData
            Public Sub DeleteData(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
                Dim cmd As String = "DELETE FROM OFFICE_TAB WHERE OFFICE_ID={0}"
                cmd = String.Format(cmd, grid.DataKeys(e.Item.ItemIndex))            ' Executes the command
                Dim conn As OleDbConnection = New OleDbConnection(m_connString)
                Dim c As OleDbCommand = New OleDbCommand(cmd, conn)
                c.Connection.Open()
                c.ExecuteNonQuery()
                c.Connection.Close()            DataFromSourceToMemory(CountryIDParam)
            End Sub        ' EVENT HANDLER: OnInsert
            Public Sub OnInsert(ByVal sender As Object, ByVal e As EventArgs)
                grid.AddNewRow = True
                UpdateDataView()
            End Sub        ' EVENT HANDLER: InitRow
            Public Sub InitRow(ByVal sender As Object, ByVal e As DataGridInitRowEventArgs)
                e.Row("OFFICE_EXCHANGE") = "0755-2502"
            End Sub
            ' EVENT HANDLER: UpdateView
            Public Sub UpdateView(ByVal sender As Object, ByVal e As EventArgs)
                UpdateDataView()
            End Sub        Private Sub InitializeComponent()
            End Sub        'LOAD DropDownList context
            Private Sub Bindlist(ByVal T As DropDownList, ByVal nameParam As String, ByVal valueParam As String, ByVal SQLStr As String)
                Dim MyConnection As SqlConnection = New SqlConnection(ConfigurationSettings.AppSettings("CRMStrconn"))
                Dim MySqlCommand As SqlDataAdapter = New SqlDataAdapter(SQLStr, MyConnection)
                Dim ds As DataSet = New DataSet            MySqlCommand.Fill(ds, nameParam)
                T.DataSource = ds.Tables(nameParam).DefaultView
                T.DataTextField = nameParam
                T.DataValueField = valueParam
                T.DataBind()
            End Sub    End Class
    End Namespace错误信息如下:
    =============无效的 CurrentPageIndex 值。它必须大于等于 0 且小于 PageCount。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Web.HttpException: 无效的 CurrentPageIndex 值。它必须大于等于 0 且小于 PageCount。源错误: 
    行 76:         Private Sub UpdateDataView()
    行 77:             grid.DataSource = GetData()
    行 78:             grid.DataBind()
    行 79:         End Sub
    行 80: 
     源文件: C:\Web\CRM\Admin\Office.vb    行: 78 堆栈跟踪: 
    [HttpException (0x80004005): 无效的 CurrentPageIndex 值。它必须大于等于 0 且小于 PageCount。]
       System.Web.UI.WebControls.DataGrid.CreateControlHierarchy(Boolean useDataSource)
       System.Web.UI.WebControls.BaseDataList.OnDataBinding(EventArgs e)
       System.Web.UI.WebControls.BaseDataList.DataBind()
       BWSLib.OFFICEPage.UpdateDataView() in C:\Web\CRM\Admin\Office.vb:78
       BWSLib.OFFICEPage.OnInsert(Object sender, EventArgs e) in C:\Web\CRM\Admin\Office.vb:155
       System.Web.UI.WebControls.LinkButton.OnClick(EventArgs e)
       System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
       System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
       System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
       System.Web.UI.Page.ProcessRequestMain() 如何解决,急
      

  3.   

    to : lovecherry
    代码是长了一点,没什么技术含量,但是我还是帖,要不问题会搁置,
    没办法,祥细点,便于别人能清楚一些,容易发现问题的所在,不好意
      

  4.   

    EditableGrid 控件?
    我没有用过
      

  5.   

    这个控件有下的
    http://www.microsoft.com/china/MSDN/library/NetFramework/default.mspx
      

  6.   

    无效的 CurrentPageIndex 值。它必须大于等于 0 且小于 PageCount。 你跟踪CurrentPageIndex看看多少
      

  7.   

    http://blog.csdn.net/tonybaobao/archive/2005/01/16/255447.aspx
    不知道这个和你的有没相似之处
      

  8.   

    有一个类似的帖子顶上来了
    你再看看吧
    http://community.csdn.net/Expert/TopicView1.asp?id=3765482